Unión
Parte de la sección Fundamentos del Journey de SQL de Coddy. Lección 48 de 72.
Las uniones son diferentes de los joins. Los joins usan condiciones para combinar tablas, pero las uniones simplemente añaden dos tablas, una 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 campos debe ser igual
- El orden es importante
- Las columnas en la misma posición deben coincidir en los tipos de datos
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 tabla grande con todos los nombres que tenemos.
SELECT name from germany_people
UNION
SELECT name from england_peopleResultado:
| name |
| 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 sobre ella.
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 del recuento. 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.
Encuentra 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
-- Apila las tres tablas en un solo resultado, manteniendo cada fila
SELECT product_id, ____ AS total_sales
FROM (
SELECT * FROM sales_2009
____
SELECT * FROM sales_2010
____
SELECT * FROM sales_2011
)
-- Una fila por producto, el total más grande 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 celulares2Condiciones
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ículos6Desafíos introductorios
Repaso - Elección parlamentariaRepaso - Detención policial de un criminalRepaso - Recipiente de bebida de barRepaso - Ingeniería de nuevas columnas9Múltiples tablas
Unión básica, parte 1Unión básica, parte 2Repaso: uniónAutouniónRepaso: autouniónUniónSimplificar consultas, palabra clave WITHRepaso: consultas WITHRepaso: contratista inmobiliario12Funciones de ventana, parte 2
Funciones RANK y DENSE_RANKRepaso: RANK y DENSE_RANKFunción NTILEFunciones de agregaciónCriterio ROWS y RANGEPractica por tu cuenta: Playground de SQL