En SQL existen 2 tipos de consultas:
Son las consultas que se utilizan para definir la estructura de la base de datos. Por ejemplo, crear tablas, modificarlas, eliminarlas, etc. Algunos ejemplos son:
CREATE TABLE
: Crea una tabla.ALTER TABLE
: Modifica una tabla.DROP TABLE
: Elimina una tabla.TRUNCATE TABLE
: Elimina todos los registros de una tabla.CREATE DATABASE
: Crea una base de datos.Son las consultas que se utilizan para manipular los datos de la base de datos. Por ejemplo, insertar, modificar, eliminar, etc. Algunos ejemplos son:
SELECT
: Selecciona datos de una tabla.INSERT
: Inserta datos en una tabla.UPDATE
: Actualiza datos de una tabla.DELETE
: Elimina datos de una tabla.Esta consulta se utiliza para seleccionar datos de una tabla. Es posible seleccionar todos los campos de una tabla o solo algunos. Además, es posible filtrar las filas que se desean seleccionar.
SELECT column1, column2, ...
FROM table_name;
Si se desea seleccionar todos los campos de una tabla, se puede utilizar el símbolo *
:
SELECT *
FROM table_name;
Si se desea filtrar las filas que se desean seleccionar, se puede utilizar la cláusula WHERE
:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
La condición puede ser una comparación entre dos campos, por ejemplo:
SELECT *
FROM table_name
WHERE column1 = column2;
También puede ser una comparación entre un campo y un valor, por ejemplo:
SELECT *
FROM table_name
WHERE column1 = 'value';
También es posible utilizar operadores lógicos, por ejemplo:
SELECT *
FROM table_name
WHERE column1 > 'value' AND column2 < 'value2';
Existen operadores de comparación específicos para cadenas de texto, por ejemplo LIKE
:
SELECT *
FROM table_name
WHERE column1 LIKE 'value%';
El símbolo %
indica que puede haber cualquier cadena de texto. En este caso, se seleccionarían todas las filas cuyo valor del campo column1
empiece por value
seguido de cualquier cadena de texto.
Otro ejemplo de LIKE
:
SELECT *
FROM table_name
WHERE column1 LIKE '%value%';
En este caso, se seleccionarían todas las filas cuyo valor del campo column1
contenga la cadena de texto value
. Ya que puede haber cualquier cadena de texto antes y después de value
, incluyendo que no haya nada.
También es posible utilizar operadores de comparación específicos para fechas, por ejemplo BETWEEN
:
SELECT *
FROM table_name
WHERE column1 BETWEEN '2020-01-01' AND '2020-12-31';
En este caso, se seleccionarían todas las filas cuyo valor del campo column1
esté entre las fechas 2020-01-01
y 2020-12-31
.
IN
Otro operador de comparación muy útil es IN
:
SELECT *
FROM table_name
WHERE column1 IN ('value1', 'value2', 'value3');
En este caso, se seleccionarían todas las filas cuyo valor del campo column1
sea value1
, value2
o value3
.
Este operador es especialmente potente cuando se utiliza junto con otra consulta dentro de los paréntesis:
SELECT *
FROM table_name
WHERE column1 IN (SELECT column1 FROM table_name2);
En este caso, se seleccionarían todas las filas cuyo valor del campo column1
esté dentro de los resultados de la consulta SELECT column1 FROM table_name2
.
Si se desea ordenar los resultados de una consulta, se puede utilizar la cláusula ORDER BY
:
SELECT *
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
El orden de los campos es importante, ya que se ordenarán por el primero, y en caso de empate, por el segundo, y así sucesivamente. Además, se puede especificar si se desea ordenar de forma ascendente o descendente.
Si se desea limitar el número de resultados de una consulta, se puede utilizar la cláusula LIMIT
:
SELECT *
FROM table_name
LIMIT number;
En este caso, se seleccionarían los primeros number
resultados de la consulta.
Si se desea saltarse los primeros resultados de una consulta, se puede utilizar la cláusula OFFSET
:
SELECT *
FROM table_name
OFFSET number;
En este caso, se seleccionarían todos los resultados de la consulta, excepto los primeros number
resultados.
Si se desea agrupar los resultados de una consulta, se puede utilizar la cláusula GROUP BY
:
SELECT column1, column2, ...
FROM table_name
GROUP BY column1;
En este caso, se agruparán los resultados por el valor de los campos column1
. Esto quiere decir que si hay varias filas con el mismo valor de column1
, se agruparán en una sola fila.
Si se desea contar el número de resultados de una consulta, se puede utilizar la función COUNT
:
SELECT COUNT(*)
FROM table_name;
En este caso, se devolvería el número de filas de la tabla table_name
.
Si se desea sumar los valores de una columna de una consulta, se puede utilizar la función SUM
:
SELECT SUM(column1)
FROM table_name;
En este caso, se devolvería la suma de los valores de la columna column1
de la tabla table_name
.
Para insertar una nueva fila en una tabla, se puede utilizar la sentencia INSERT
:
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
En este caso, se insertaría una nueva fila en la tabla table_name
con los valores value1
, value2
, ... en los campos column1
, column2
, ...
Es importante que el orden de los campos y los valores coincida. Además, si no se especifican los campos, se insertarán los valores en el mismo orden en el que se creó la tabla.
Para actualizar una fila de una tabla, se puede utilizar la sentencia UPDATE
:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
En este caso, se actualizarían los valores de los campos column1
, column2
, ... de la tabla table_name
para aquellas filas que cumplan la condición condition
.
Para eliminar una fila de una tabla, se puede utilizar la sentencia DELETE
:
DELETE FROM table_name WHERE condition;
En este caso, se eliminarían las filas de la tabla table_name
que cumplan la condición condition
. No se especifican los campos, ya que se eliminarían las filas completas que cumplan la condición.
Para unir dos tablas, se puede utilizar la sentencia JOIN
:
SELECT *
FROM table_name1
JOIN table_name2 ON table_name1.column1 = table_name2.column2;
En este caso, se unirían las tablas table_name1
y table_name2
por el campo column1
de la primera tabla y el campo column2
de la segunda tabla. Esto quiere decir que se seleccionarían todas las filas de la primera tabla, y para cada una de ellas, se seleccionarían todas las filas de la segunda tabla que cumplan la condición table_name1.column1 = table_name2.column2
. Por lo tanto, si hay varias filas en la segunda tabla que cumplan la condición, se repetirán las filas de la primera tabla tantas veces como filas cumplan la condición en la segunda tabla.
Por ejemplo, si tenemos las tablas:
id | empresa |
---|---|
1 | |
2 | Apple |
3 | Amazon |
id | nombre | empresa |
---|---|---|
1 | Juan | 1 |
2 | Pedro | 1 |
3 | María | 2 |
4 | Marta | 3 |
5 | Carlos | 3 |
Si ejecutamos la consulta:
SELECT empresas.*, empleados.nombre, empleados.id AS id_empleado
FROM empresas
JOIN empleados ON empresas.id = empleados.empresa;
Obtendríamos los resultados:
id | empresa | nombre | id_empleado |
---|---|---|---|
1 | Juan | 1 | |
1 | Pedro | 2 | |
2 | Apple | María | 3 |
3 | Amazon | Marta | 4 |
3 | Amazon | Carlos | 5 |
Notar que la columna id
de la tabla empresas
se ha repetido tantas veces como filas de la tabla empleados
cumplan la condición empresas.id = empleados.empresa
. Además, fue necesario especificar el alias id_empleado
para la columna id
de la tabla empleados
, ya que ambas tablas tienen una columna id
, y si no se especifica el alias, se produciría un error de ambigüedad.
Existen varios tipos de JOIN
:
INNER JOIN
: Devuelve las filas que tienen valores comunes en ambas tablas.LEFT JOIN
: Devuelve todas las filas de la tabla de la izquierda, y las filas de la tabla de la derecha que tienen valores comunes. Si no hay valores comunes, se rellenan los campos de la tabla de la derecha con NULL
.RIGHT JOIN
: Devuelve todas las filas de la tabla de la derecha, y las filas de la tabla de la izquierda que tienen valores comunes. Es equivalente a un LEFT JOIN
pero intercambiando las tablas.FULL JOIN
: Devuelve todas las filas de ambas tablas, y las filas que tienen valores comunes. No es soportado por algunos motores de base de datos.FULL JOIN
, otros no soportan el comando UPDATE
sin especificar la condición WHERE
, otros soportan TOP
en lugar de LIMIT
, etc.DML
, pero también existen las consultas de DDL
(Data Definition Language) para crear, modificar y eliminar tablas, campos, índices, etc. Estas consultas no se explican en este resumen, pero se pueden consultar en la documentación oficial. También existen las consultas de DCL
(Data Control Language) para dar permisos a usuarios, etc. Estas consultas no se explican en este resumen, pero se pueden consultar en la documentación oficial.