La chuleta SQL de Cursatica
SQL Filtrado Consultar varias tablas
SQL o lenguaje de consulta estructurada INNER JOIN FULL JOIN
(Structured Query Language) es un Comparaciones
lenguage para comunicarse con bases de INNER JOIN o de forma implícita JOIN
Consultar el nombre de las ciudades devuelve las filas para las que hay FULL JOIN (explícitamente FULL OUTER
datos relacionales. SQL te permite JOIN) devuelve todas las filas de
seleccionar datos y construir informes con nota mayor de 6: conincidencias en ambas tablas.
ambas tablas. Si no hay coincidencia
complejos. Se utiliza en casi todos los SELECT nombre FROM ciudad
SELECT [Link], [Link], en alguna de las filas, el resultado
sitemas que almacenan datos. WHERE nota > 6; ci.id_pais, [Link], [Link]
es nulo para esa fila y tabla (NULL)
Datos de muestra FROM ciudad AS ci
SELECT [Link], [Link],
Consultar el nombre de las ciudades [INNER] JOIN pais AS pa
diferentes a Caracas: ci.id_pais, [Link], [Link]
País ON ci.id_pais = [Link]; FROM ciudad AS ci
id Nombre Área Población SELECT nombre FROM ciudad
Ciudad País FULL [OUTER] JOIN pais AS pa
1 España 505944 47450795 WHERE nombre <> 'Caracas'; id Nombre id_pais id Nombre ON ci.id_pais = [Link];
2 Venezuela 916455 28704947
1 Madrid
1 1 España
... ... ... ... Venezuela Ciudad País
Operaciones con texto
2 Caracas 2 2
Ciudad ... ... ... ... ... id Nombre id_pais id Nombre
id Nombre id_pais Población Nota España
Consultar el nombre de las ciudades que LEFT JOIN 1 Madrid
1 1
1 Madrid
1 3223394 10 empiecen por E o termien por s: Venezuela
2 Caracas 2 1943901 6 LEFT JOIN consulta todas las filas de 2 Caracas 2 2
... ... ... ... ... SELECT nombre FROM ciudad
la tabla izquierda y las filas que NULL NULL NULL 11 Chile
WHERE nombre LIKE 'E%'
coincidan de la tabla derecha. Si no
19 Bogotá 8 NULL NULL
Consultar una tabla
OR nombre LIKE '%s'; hay una fila coincidente en la tabla
derecha, el resultado será
sera nulo (NULL)
Consultar todas las columnas y filas
de la tabla país: Consultar el nombre de las ciudades que SELECT [Link], [Link], CROSS JOIN
SELECT * FROM pais; comiencen por cualquier letra seguidas ci.id_pais, [Link], [Link]
CROSS JOIN devuelve todas las
de “ublín” como Dublín in Irlanda: FROM ciudad AS ci
combinaciones de filas de la primera
Consultar las columnas nombre y área LEFT JOIN pais AS pa
de la tabla país: SELECT nombre FROM ciudad
tabla con la segunda tabla. Si la
ON ci.id_pais = [Link]; primera tabla tiene N filas y la segunda
SELECT nombre, area FROM pais; WHERE nombre LIKE '_ublín';
Ciudad País M, el resultado tendra M por N filas. El
Consultar el nombre de las ciudades id Nombre id_pais id Nombre CROSS JOIN se utiliza poco.
ordenados por nota en orden ASCendente: Otras operaciones
1 Madrid
1 1 España
SELECT [Link], [Link],
SELECT nombre FROM ciudad
Consultar el nombre de las ciudades con 2 Caracas 2 2 Venezuela ci.id_pais, [Link], [Link]
ORDER BY nota [ASC]; población entre 1M y 5M: 19 Bogotá 8 NULL NULL
FROM ciudad AS ci
Consultar el nombre de las ciudades SELECT nombre FROM ciudad
RIGHT JOIN CROSS JOIN pais AS pa;
ordenados por nota en orden DESCendente: WHERE poblacion
RIGHT JOIN consulta todas las filas de
BETWEEN 1000000 AND 5000000; la tabla derecha y las filas que
Ciudad País
SELECT nombre FROM ciudad
coincidan de la tabla izquierda. Si no id Nombre id_pais id Nombre
ORDER BY nota DESC;
hay una fila coincidente en la tabla España
Alias Consultar el nombre de las ciudades a izquierda, el resultado será nulo. 1 Madrid
1 1
las que no le falte nota: 1 Madrid 1 2 Venezuela
Se utilizan alias para renombrar SELECT [Link], [Link],
columnas y tablas. ci.id_pais, [Link], [Link]
SELECT nombre FROM ciudad
1 Madrid 1 11 Chile
Columnas WHERE nota IS NOT NULL; FROM ciudad AS ci
... ... ... ... ...
SELECT nombre AS nombre_ciudad RIGHT JOIN pais AS pa
FROM ciudad; ON ci.id_pais = [Link]; Hay una sintaxis alternativa para el
Consultar el nombre de las ciudades con CROSS JOIN que nos devuelve el mismo
Tablas
los id_pais en la lista (1,2,9): Ciudad País
id Nombre resultado:
SELECT [Link], [Link]
id Nombre id_pais
FROM ciudad AS ci
1 Madrid
1 1 España SELECT [Link], [Link],
SELECT nombre FROM ciudad
JOIN pais AS pa
2 Caracas 2 2 Venezuela ci.id_pais, [Link], [Link]
WHERE id_pais IN (1,2,9);
ON ci.id_pais = [Link]; NULL NULL NULL 11 Chile FROM ciudad AS ci, pais AS pa;
Aprende SQL desde cero hasta experto con múltiples recursos interactivos en [Link]
La chuleta SQL de Cursatica
Agrupar y agreagar Subconsultas (Subqueries)
GROUP BY agrupa las filas que tengan los mismos Una subconsulta o subquery es una consulta que esta Operaciones con sets
anidada dentro de otra consulta o subconsulta. Las operaciones con sets se utilizan para combinar
valores en las columnas especificadas. Luega calcula el resultado de una o más consultas en uno solo.
métricas (agrega las filas) para cada una de las Valor único
Las columnas resultantes deben tener el mismo
combinaciones de valores únicos. número de columnas y tipos de datos compatibles. El
La subconsulta más sencilla devuelve una única fila
y un único valor. Ese valor puede ser utilizado con nombre de las columnas puede ser diferente.
Nombre id_pais Agrupar id_pais
count
múltiples operadores comparativos como <,=,>...
Madrid 1 GROUP BY + 1
3 Tabla: digital Tabla: analogico
Agregar
Valencia 1 2 2 La siguiente consulta muestra las ciudades cuya tienda producto cantidad tienda producto cantidad
COUNT
Barcelona
1 nota es la máxima asignada en la tabla ciudades:
17 2 1 móvil 17
1 libro 199
Caracas
2 SELECT nombre FROM ciudades
1 tablet 11 2 pelota 179
Maracaibo
2 SELECT nombre, COUNT(id_pais)
WHERE rating = (
Londres 17 FROM ciudad
SELECT MAX(rating) FROM ciudades); 3 pila
101
3 pila 101
Liverpool 17 GROUP BY id_pais;
Varios valores
UNION
Funciones para agregar
Una subconsulta puede devolver varias filas y o UNION combina el resultado de dos consultas
varias columnas. El resultado puede ser comparado añadiendo al final del resultado de la primera
avg(exp) - Calcula la media de las filas del grup con operadores como IN, ANY, ALL, EXISTS.
el resultado la segunda y elimina registros
count(exp) - Recuenta las filas del grup duplicados.
max(exp) - Calcula el máximo del las filas del grup La siguiente consulta muestra las ciudades de UNION ALL es similar a UNION pero NO elimina
min(exp) - Calcula el mínimo del las filas del grup países con una población superior a 10M: registros (filas) duplicados.
sum(exp) - Calcula la suma de las filas del grupo
SELECT nombre FROM ciudades
La siguiente consulta une los resultados de
Ejemplos de consultas
WHERE id_pais IN (
ejecutar ambas consultas y devuelve todos los
SELECT id FROM pais
productos por tienda y su cantidad:
Recuento del número de ciudades: WHERE poblacion > 20000000);
SELECT tienda, producto, cantidad
SELECT COUNT(*) FROM ciudades; Consultas correlacionadas FROM digital
Recuento del número notas no nulas: En una subconsulta correlacionada (correlated UNION [ALL]
subquery) la subconsulta hace referencia a la SELECT tienda, producto, cantidad
SELECT COUNT(nota) FROM ciudades; FROM digital;
consulta exterior (outer query), por lo que la
Recuento de identificadores únicos de país: subconsulta no puede ser ejecutada de forma
independiente.
ITERSECT
SELECT COUNT(DISTINCT id_pais) FROM ciudades; INTERSECT devuelve solo las filas que aparezcan en
La siguiente consulta devuelve las ciudades cuya ambos resultados.
Valores máximos y mínimos de población: población sea mayor a la media de la población del
país: SELECT tienda, producto, cantidad
SELECT MAX(poblacion), MIN(poblacion)
FROM digital
FROM ciudades; SELECT * FROM ciudades AS ci_exterior
WHERE poblacion > (
INTERSECT
SELECT AVG(poblacion)
SELECT tienda, producto, cantidad
Suma de población por agrupando por país:
FROM ciudades AS ci_media
FROM digital;
SELECT id_pais, SUM(poblacion)
FROM ciudades GROUP BY id_pais; WHERE
EXCEPT
ci_media.id_pais = ci_exterior.id_pais); EXCEPT devuelve las filas que aparezcan en el
Valor medio de la nota de ciudades por país para los La siguiente consulta devuelve el nombre de los primer set resultado pero no en el segundo set.
países que tengan más de cuatro ciudades con nota: países que tengan al menos una ciudad en la tabla
ciudades:
SELECT tienda, producto, cantidad
FROM digital
SELECT id_pais, AVG(nota)
SELECT nombre FROM pais
EXCEPT
FROM ciudades GROUP BY id_pais
WHERE EXISTS (
SELECT tienda, producto, cantidad
HAVING COUNT(nota) > 3; SELECT * FROM ciudades
FROM digital;
WHERE id_pais = [Link]);
Aprende SQL desde cero hasta experto con múltiples recursos interactivos en [Link]