Union
Parte de la sección Fundamentos del Journey de SQL de Coddy — lección 48 de 72.
Las unions son diferentes de los joins. Joins utilizan condiciones para combinar tablas pero unions simplemente añaden dos tablas una encima de la otra. Para usar UNION escribiremos:
SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2Ambos selects deben obedecer las siguientes reglas:
- El número de campos debe ser igual
- El orden es importante
- Las columnas en el mismo lugar deben coincidir con 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 hacer 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 como están:
SELECT name from germany_people
UNION ALL
SELECT name from england_peopleResultado:
| nombre |
| Lena |
| Leonie |
| George |
| Lena |
También puedes combinar UNION ALL con GROUP BY, funciones de agregación y ORDER BY envolviendo la unión en una subconsulta. Por ejemplo, para contar cuántas veces aparece cada nombre en ambas tablas:
SELECT name, COUNT(*) AS total
FROM (
SELECT name FROM germany_people
UNION ALL
SELECT name FROM england_people
) AS all_people
GROUP BY name
ORDER BY total DESCResultado:
| nombre | total |
| Lena | 2 |
| Leonie | 1 |
| George | 1 |
Aquí, UNION ALL mantiene todas las filas (incluyendo duplicados) para que el COUNT refleje el número real de ocurrencias. La consulta externa luego agrupa y ordena el resultado combinado.
Desafío
FácilTablas y columnas disponibles:
<strong>sales_2009</strong>:<strong>product_id</strong>,<strong>quantity_sold</strong><strong>sales_2010</strong>:<strong>product_id</strong>,<strong>quantity_sold</strong><strong>sales_2011</strong>:<strong>product_id</strong>,<strong>quantity_sold</strong>
Hay 3 tablas de ventas.
Encuentra la suma de ventas para cada producto de todas las tablas juntas.
El resultado debe incluir el product_id y las ventas totales.
Nombra esta columna total_sales.
Ordena los resultados por las ventas totales en orden descendente.
Hoja de referencia
UNION combina tablas apilándolas verticalmente. A diferencia de los joins, las uniones no usan condiciones: simplemente añaden tablas una encima de la otra.
Sintaxis básica de UNION:
SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2Reglas de UNION:
- El número de campos debe ser igual
- El orden es importante
- Las columnas en la misma posición deben coincidir en tipos de datos
UNION vs UNION ALL:
UNIONdevuelve solo valores distintosUNION ALLdevuelve todos los registros incluyendo duplicados
SELECT name FROM germany_people
UNION
SELECT name FROM england_peopleSELECT name FROM germany_people
UNION ALL
SELECT name FROM england_peoplePuedes usar UNION ALL dentro de una subconsulta y luego aplicar GROUP BY, ORDER BY y funciones de agregación en el resultado combinado:
SELECT name, COUNT(*) AS total
FROM (
SELECT name FROM germany_people
UNION ALL
SELECT name FROM england_people
) AS all_people
GROUP BY name
ORDER BY total DESCEsto cuenta cuántas veces aparece cada nombre en ambas tablas, incluyendo duplicados.
Pruébalo tú mismo
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns