Tutorial de comandos básicos de MySQL (Parte 2) 2013-08-02

Esta es la segunda parte del Tutorial de comandos básicos de MySQL en Debian Wheezy

En este nanotutorial vamos a conocer las sentencias UPDATE, DELETE, JOIN, TRUNCATE entre otras. Esta es la segunda parte del Tutorial de comandos básicos de MySQL, si te perdiste la primera parte puedes visitarla en este nanotutorial.

Tutorial de comandos básicos de MySQL (Parte 2)

Iniciar sesión en el cliente de MySQL

Para continuar vamos a iniciar sesión en el cliente de MySQL además de configurar la base de datos a utilizar con la sentencia USE.

mysql -u root -p
USE employees;

Iniciar sesión en el cliente de MySQL

Ahora continuaremos con las nuevas sentencias SQL de este tutorial.

Sentencias SQL

INSERT

La sentencia INSERT sirve para ingresar registros en una tabla. Para ingresar un registro debemos conocer las columnas de la tabla y los tipos de datos de cada una. Se acompaña con la sentencia VALUES para definir los valores de los campos en el registro a ingresar.

INSERT INTO <nombre_tabla>(<campos_tabla>) VALUES(<valores_campos>);

Para ingresar un registro en la tabla de empleados podemos ejecutar la siguiente sentencia:

INSERT INTO employees(first_name, last_name, gender, birth_date, hire_date) VALUES('John', 'Doe', 'M', '1970-01-01', '2013-08-02');

INSERT

Para ingresar múltiple registros en una misma sentencia basta con anidar los registros delimitados por coma luego de la sentencia VALUES:

INSERT INTO employees(emp_no, first_name, last_name, gender, birth_date, hire_date) VALUES(500001, 'Robert', 'Roe', 'M', '1970-01-01', '2013-08-02'), (500002, 'Brett', 'Boe', 'M', '1970-01-01', '2013-08-02');

INSERT

UPDATE

La sentencia UPDATE sirve para actualizar registros de una tabla. Esta se acompaña de la sentencia SET para definir los nuevos valores de los campos a actualizar.

UPDATE <nombre_tabla> SET <nombre_campo> = <valor_campo>;

Podemos actualizar todos los registros de una tabla o definir condiciones con la sentencia WHERE, con esto solamente actualizaremos los registros que cumplan con las condiciones dadas (si no defines condiciones, todos los registros de la tabla serán actualizados).

UPDATE <nombre_tabla> SET <nombre_campo> = <valor_campo> WHERE <condiciones>;

Veamos un ejemplo de este tipo:

UPDATE employees SET first_name = 'Marta', last_name = 'Moe' WHERE emp_no = 500002;

UPDATE

DELETE

Esta sentencia sirve para eliminar registros de una tabla. Al igual que la sentencia UPDATE se puede acompañar de la sentencia WHERE para eliminar solamente los registros que cumplan con las condiciones, de lo contrario todos los registros de la tabla serán borrados.

DELETE FROM <nombre_tabla>;
DELETE FROM <nombre_tabla> WHERE <condiciones>;

Veamos un ejemplo:

DELETE FROM employees WHERE emp_no = 500002;

DELETE

TRUNCATE

Con esta sentencia podemos vaciar una tabla completa reiniciando las secuencias en columnas autoincrementales.

TRUNCATE TABLE <nombre_tabla>;

Conociendo los JOIN

La sentencia JOIN tiene como finalidad unir datos de diferentes tablas. En estructuras de base de datos normalizadas es muy frecuente encontrar la información dispersa en múltiples tablas, es aquí donde podemos conocer la importancia de los JOIN.

Existen diferentes tipos de JOIN, los cuales vamos a conocer a continuación.

INNER JOIN

Muestra los registros que tengan incidencia tanto en tabla1 como en tabla2, todo registro que no cumpla con esta incidencia es descartado.

La sintaxis es la siguiente:

SELECT <nombre_tabla1>.<nombre_campo1>, <nombre_tabla2>.<nombre_campo2> FROM <nombre_tabla1> INNER JOIN <nombre_tabla2> ON <nombre_tabla1>.<nombre_campo_relacionado1> = <nombre_tabla2>.<nombre_campo_relacionado2>;

Un ejemplo puede ser todos los empleados que han recibido al menos un salario, descartando todos aquellos que a pesar de estar registrados como empleados aún no reciben un salario.

Veamos un ejemplo:

SELECT employees.emp_no, employees.first_name, employees.last_name, salaries.salary, salaries.from_date, salaries.to_date FROM employees INNER JOIN salaries ON employees.emp_no = salaries.emp_no ORDER BY employees.emp_no DESC LIMIT 100;

INNER JOIN

LEFT JOIN

Este muestra los registros que al menos tengan incidencia en tabla1 sin importar que no exista incidencia en tabla2.

SELECT <nombre_tabla1>.<nombre_campo1>, <nombre_tabla2>.<nombre_campo2> FROM <nombre_tabla1> LEFT JOIN <nombre_tabla2> ON <nombre_tabla1>.<nombre_campo_relacionado1> = <nombre_tabla2>.<nombre_campo_relacionado2>;

Un ejemplo puede ser los registros de empleados que recién ingresamos, estos aún no tienen incidencia en la tabla salaries, estos fueron excluidos en por el INNER JOIN pero serán incluidos en el LEFT JOIN con valor NULL en las columnas de la tabla salaries.

Aquí la sentencia:

SELECT employees.emp_no, employees.first_name, employees.last_name, salaries.salary, salaries.from_date, salaries.to_date FROM employees LEFT JOIN salaries ON employees.emp_no = salaries.emp_no ORDER BY employees.emp_no DESC LIMIT 100;

LEFT JOIN

RIGHT JOIN

Esta sentencia muestra los registros que al menos tengan incidencia en tabla2 sin importar que no exista incidencia en tabla1;

Su sintaxis es la siguiente:

SELECT <nombre_tabla1>.<nombre_campo1>, <nombre_tabla2>.<nombre_campo2> FROM <nombre_tabla1> RIGHT JOIN <nombre_tabla2> ON <nombre_tabla1>.<nombre_campo_relacionado1> = <nombre_tabla2>.<nombre_campo_relacionado2>;

Como ejemplo podemos listar todos los registros la tabla salarios aún si estos no tienen incidencia en la tabla employees, nuevamente serán excluidos los registros recién ingresados de empleados.

Aquí la sentencia SQL:

SELECT employees.emp_no, employees.first_name, employees.last_name, salaries.salary, salaries.from_date, salaries.to_date FROM employees RIGHT JOIN salaries ON employees.emp_no = salaries.emp_no ORDER BY employees.emp_no DESC LIMIT 100;

RIGHT JOIN


Acerca del autor

Hugo Gilmar Erazo Full Stack Web Developer

Soy un desarrollador web con más de 10 años de experiencia. Me considero fanático de GNU/Linux, lo cual me ha permitido complementar mis conocimientos en el desarrollo web con la administración de servidores.

Aunque manejo todo lo relacionado al Front-End, me inclino más por el desarrollo Back-End. También desarrollo aplicaciones móviles híbridas. Me gusta lo que hago.

Compartir este artículo