Trabajar con conjuntos de filas
Hasta ahora cada consulta producía un resultado. Los operadores de
conjuntos combinan los resultados de dos SELECT como si fueran
conjuntos matemáticos. Se escriben entre las dos consultas:
SELECT nombre FROM productos
UNION
SELECT nombre FROM liquidacion;
Reglas comunes a todos
Para combinar dos consultas, ambas deben tener:
- el mismo número de columnas, y
- tipos compatibles en cada posición (se emparejan por posición, no por nombre).
Los nombres de las columnas del resultado los aporta la primera consulta.
UNION vs UNION ALL
UNIONcombina las filas de ambas y elimina los duplicados. Para hacerlo debe comparar y ordenar internamente, así que tiene un coste extra.UNION ALLcombina y conserva todas las filas, duplicados incluidos. Es más rápido y es el que debes usar cuando sabes que no hay duplicados (o cuando los quieres contar).
SELECT categoria FROM productos
UNION ALL
SELECT categoria FROM liquidacion;
INTERSECT y EXCEPT
INTERSECTdevuelve las filas que aparecen en ambas consultas (la intersección).EXCEPTdevuelve las filas de la primera que no están en la segunda (la resta de conjuntos). El orden importa:A EXCEPT Bno esB EXCEPT A.
SELECT nombre FROM productos
INTERSECT
SELECT nombre FROM liquidacion; -- productos que también se liquidan
Como
UNION, los operadoresINTERSECTyEXCEPTtambién eliminan duplicados por defecto.
ORDER BY en combinaciones
Un ORDER BY se aplica al resultado completo de la combinación, por lo que
va al final, después de la última consulta (no dentro de cada SELECT):
SELECT nombre FROM productos
UNION
SELECT nombre FROM liquidacion
ORDER BY nombre; -- ordena TODO el resultado combinado
Ejemplos
UNION elimina duplicados; UNION ALL los conserva
SELECT categoria FROM productos
UNION
SELECT categoria FROM liquidacion
ORDER BY categoria;