UNION
Parte de la sección Fundamentos del Journey de SQL de Coddy. Lección 48 de 72.
Las uniones son distintas de las combinaciones. Las combinaciones usan condiciones para combinar tablas, pero las uniones simplemente colocan una tabla encima de la otra. Para usar UNION, escribiremos:
SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2Ambas consultas SELECT deben cumplir las siguientes reglas:
- El número de columnas debe ser igual
- El orden es importante
- Las columnas en la misma posición deben contener el mismo tipo de datos (SQLite no comprueba sus tipos)
Por ejemplo, supongamos que tenemos las siguientes tablas:
germany_people
| id | name |
| 1 | Lena |
| 2 | Leonie |
england_people
| id | name |
| 1 | George |
| 2 | Lena |
Problema: Queremos crear una gran tabla con todos los nombres que tenemos.
SELECT name from germany_people
UNION
SELECT name from england_peopleResultado:
| nombre |
| Lena |
| Leonie |
| George |
UNION devuelve solo valores distintos, mientras que UNION ALL devuelve todos los registros tal cual:
SELECT name from germany_people
UNION ALL
SELECT name from england_peopleResultado:
| name |
| Lena |
| Leonie |
| George |
| Lena |
También puedes combinar UNION ALL con funciones de agregación, GROUP BY y ORDER BY para resumir datos de varias tablas. El truco consiste en envolver UNION ALL dentro de una subconsulta y después aplicar la agrupación y la ordenación.
Por ejemplo, supongamos que queremos contar cuántas veces aparece cada nombre en ambas tablas:
SELECT name, COUNT(*) AS total_count
FROM (
SELECT name FROM germany_people
UNION ALL
SELECT name FROM england_people
) AS combined
GROUP BY name
ORDER BY total_count DESCResultado:
| name | total_count |
| Lena | 2 |
| Leonie | 1 |
| George | 1 |
Aquí se usa UNION ALL (no UNION) para conservar los duplicados, como Lena. De lo contrario, se eliminarían antes de contar. La subconsulta combina todas las filas y después GROUP BY + COUNT las resumen. ORDER BY ordena el resultado final.
Desafío
FácilTablas y columnas disponibles:
sales_2009:product_id,quantity_soldsales_2010:product_id,quantity_soldsales_2011:product_id,quantity_sold
Hay 3 tablas de ventas.
Calcula la suma de las ventas de cada producto de todas las tablas en conjunto.
El resultado debe incluir el product_id y las ventas totales.
Asigna a esta columna el nombre total_sales.
Ordena los resultados por las ventas totales en orden descendente.
Pruébalo tú mismo
-- Combina las tres tablas en un solo resultado, conservando todas las filas
SELECT product_id, ____ AS total_sales
FROM (
SELECT * FROM sales_2009
____
SELECT * FROM sales_2010
____
SELECT * FROM sales_2011
)
-- Una fila por producto, con el total más alto primero
GROUP BY ____
ORDER BY ____ DESC;Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Más palabras clave
La palabra clave INLa palabra clave BETWEENLa palabra clave LIKELa palabra clave ASRepaso: modelos de teléfonos móviles2Condiciones
Conceptos básicos de las condicionesLa palabra clave ANDLa palabra clave ORLa palabra clave NOTCombinación de múltiples condicionesParéntesisBooleanos5Operaciones aritméticas
Operadores matemáticosColumnas matemáticasLa operación móduloLa función ROUND()3Formato de retorno específico
Valores nulosOrdenar resultados Parte 1Ordenar resultados Parte 2Repaso: empresa de ciberseguridadLimitar el número de registrosRepaso: fábrica de vehículos6Retos introductorios
Repaso - Elecciones parlamentariasRepaso - Detención policial de un criminalRepaso - Envase de bebidas de barRepaso - Diseñar nuevas columnas9Varias tablas
JOIN básico, parte 1JOIN básico, parte 2Repaso: JOINAuto JOINRepaso: auto JOINUNIONSimplificar consultas: palabra clave WITHRepaso: consultas con WITHRepaso: contratista inmobiliario12Funciones de ventana, parte 2
Funciones RANK y DENSE_RANKRepaso: RANK y DENSE_RANKFunción NTILEFunciones de agregaciónCriterios ROWS y RANGEPractica por tu cuenta: Playground de SQL