Menu
Coddy logo textTech

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 table2

Ambos 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

idname
1Lena
2Leonie

england_people

idname
1George
2Lena

Problema: Queremos hacer una gran tabla con todos los nombres que tenemos.

SELECT name from germany_people
UNION
SELECT name from england_people

Resultado:

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_people

Resultado:

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 DESC

Resultado:

nombretotal
Lena2
Leonie1
George1

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.

challenge icon

Desafío

Fácil

Tablas 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 table2

Reglas 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:

  • UNION devuelve solo valores distintos
  • UNION ALL devuelve todos los registros incluyendo duplicados
SELECT name FROM germany_people
UNION
SELECT name FROM england_people
SELECT name FROM germany_people
UNION ALL
SELECT name FROM england_people

Puedes 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 DESC

Esto cuenta cuántas veces aparece cada nombre en ambas tablas, incluyendo duplicados.

Pruébalo tú mismo

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos