PostgreSQL UNION
El operador `UNION` de PostgreSQL se utiliza para combinar los conjuntos de resultados de dos o más consultas `SELECT` en un único conjunto de resultados, eliminando las filas duplicadas. Garantiza que el conjunto de resultados combinado sea único. La ordenación del conjunto de resultados no la realiza `UNION` de forma inherente y debe especificarse explícitamente con una cláusula `ORDER BY`.
Utilización
El operador `UNION` se utiliza cuando necesitas agregar resultados de varias sentencias `SELECT` en un conjunto de datos cohesionado. Es especialmente útil para fusionar tablas con estructuras similares.
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
En esta sintaxis, `UNION` fusiona las salidas de las dos sentencias `SELECT`, descartando cualquier fila duplicada. Los nombres implícitos de las columnas del conjunto de resultados se derivan de la primera sentencia `SELECT`.
Ejemplos
1. UNIÓN básica
SELECT city
FROM customers
UNION
SELECT city
FROM suppliers;
Este ejemplo combina una lista de ciudades de las tablas "clientes" y "proveedores", eliminando los duplicados para obtener una lista única.
2. UNIÓN con nombres de columna diferentes
SELECT first_name AS name
FROM employees
UNION
SELECT supplier_name AS name
FROM suppliers;
Aquí, las columnas con nombres diferentes se combinan utilizando `UNION`. El alias `nombre` se aplica al conjunto de resultados, y la coherencia en los alias es crucial para la legibilidad y el mantenimiento. Las columnas deben ser del mismo tipo de datos.
3. UNIÓN con ORDENAR POR
SELECT product_name
FROM products
UNION
SELECT service_name
FROM services
ORDER BY 1;
Este ejemplo combina los nombres de productos y servicios en una lista y ordena todo el conjunto de resultados alfabéticamente. La cláusula `ORDENAR POR` utiliza la posición de la columna, lo que suele recomendarse para evitar ambigüedades.
Consejos y buenas prácticas
- Asegúrate de la compatibilidad de las columnas. El número y los tipos de datos de las columnas de cada `SELECT` deben coincidir.
- Utiliza "UNIR TODO" para mejorar el rendimiento. Si los duplicados son aceptables, `UNIR TODO` evita la sobrecarga de ordenar y eliminar duplicados.
- Ten cuidado con "ORDENAR POR". Sólo el último `SELECT` puede incluir una cláusula `ORDER BY`, que afecta a todo el conjunto de resultados. Haz referencia a los nombres de las columnas de salida o utiliza las posiciones de las columnas para evitar ambigüedades.
- Comprueba el manejo de NULL. Asegúrate de que las columnas de las consultas tratan los valores "NULL" de forma coherente para evitar resultados inesperados.
- Piensa en la indexación. Las tablas de indexación utilizadas en las consultas `UNION` pueden optimizar el rendimiento al acelerar la recuperación de datos.
- Comprende las implicaciones para el rendimiento. Utilizar `UNION` puede implicar un procesamiento adicional para ordenar y eliminar duplicados en comparación con `UNION ALL`.