Cláusula UNION ALL de MySQL
La cláusula `UNION ALL` de MySQL se utiliza para combinar los resultados de dos o más sentencias `SELECT`. A diferencia de `UNION`, incluye las filas duplicadas en el conjunto de resultados final.
Utilización
La cláusula `UNION ALL` se utiliza cuando necesitas combinar los resultados de varias consultas sin eliminar las entradas duplicadas. Es especialmente útil para agregar conjuntos de datos en los que los duplicados son significativos y deben conservarse.
SELECT column1, column2, ...
FROM table1
UNION ALL
SELECT column1, column2, ...
FROM table2;
En esta sintaxis, `UNION ALL` fusiona los resultados de ambas sentencias `SELECT`, incluidas las filas duplicadas.
Ejemplos
1. Básico UNIÓN TODOS
SELECT name FROM students
UNION ALL
SELECT name FROM alumni;
Este ejemplo combina nombres de las tablas "alumnos" y "antiguos alumnos", incluyendo duplicados si algún nombre aparece en ambas tablas.
2. UNION ALL con diferentes columnas
SELECT id, name FROM employees
UNION ALL
SELECT employee_id, full_name FROM contractors;
Aquí, `UNION ALL` combina las columnas `id` y `name` de `employees` con `employee_id` y `full_name` de `contractors`. Ambas consultas deben tener el mismo número de columnas en el mismo orden, y sus tipos de datos deben ser compatibles para evitar errores.
3. Utilizar UNION ALL con condiciones
SELECT product_id, description FROM products WHERE category = 'Electronics'
UNION ALL
SELECT product_id, description FROM discontinued_products WHERE category = 'Electronics';
Este ejemplo combina productos y productos descatalogados dentro de la categoría "Electrónica", conservando todos los duplicados.
4. Utilizar UNION ALL con ORDER BY
SELECT id, name FROM employees
UNION ALL
SELECT employee_id, full_name FROM contractors
ORDER BY name;
Este ejemplo demuestra la aplicación de "ORDENAR POR" al conjunto de resultados final para garantizar que los resultados combinados se ordenan por nombre.
Consejos y buenas prácticas
- Asegúrate de la compatibilidad de las columnas. Todas las sentencias `SELECT` deben tener el mismo número de columnas con tipos de datos compatibles para evitar errores.
- Preserva los duplicados significativos. Utiliza "UNIR TODO" cuando las filas duplicadas sean beneficiosas para tus necesidades de análisis o elaboración de informes.
- Optimiza el rendimiento de la consulta. Ten en cuenta que utilizar "UNION ALL" con grandes conjuntos de datos puede afectar al rendimiento; considera la posibilidad de indexar las columnas críticas. Utiliza la sentencia `EXPLAIN` para analizar el plan de consulta en busca de oportunidades de optimización.
- Utiliza la ordenación explícita. Si el orden es importante, aplica `ORDENAR POR` al conjunto de resultados final, no a las consultas individuales dentro de `UNIR TODO`.
- Tratamiento de errores. Asegúrate de que las columnas de todas las sentencias `SELECT` tienen recuentos coincidentes y tipos de datos compatibles para evitar errores de ejecución.