Esta clausula sirve para combinar los resultados de dos o más consultas.
SELECT * FROM jefe WHERE departamento
= 'Ventas' UNION SELECT * FROM empleado WHERE
departamento = 'Ventas';
Como se puede ver, primero
seleccionamos todos los jefes del departamento de ventas y luego, utilizamos la
palabra clave UNION para añadir todos los empleados del departamento de ventas.
¿Podríamos dividir esta
instrucción en dos consultas distintas? Sí. Pero, utilizando una UNION,
obtenemos, juntos, todos los resultados de la primera tabla más todos los
resultados de la segunda tabla.
Requisitos para usar UNION. Para
que los resultados puedan combinarse en una sola tabla, las dos tablas deben
tener el mismo número de columnas. También debemos recordar que sus columnas
respectivas deben tener almacenado el mismo tipo de dato (número o texto).
Si, por ejemplo, en la columna
lugar, una de tus tablas tiene almacenados números (1, 2, 3) y, la otra, tiene
textos ("primero", "segundo", "tercero"), no
funcionará.
Clausula UNION ALL
De forma predeterminada, UNION
elimina las filas duplicadas. Por suerte, esto se puede cambiar. Solo hay que
escribir UNION ALL en lugar de UNION en la consulta
SELECT * FROM jefe WHERE
departamento = 'Ventas' UNION ALL SELECT
* FROM empleado WHERE departamento = 'Ventas';
... para obtener todas las filas,
aunque sean iguales. Es decir haya empleados que aparezcan como jefe y como
empleado.
Clausula INTERSECT
SELECT * FROM jefe WHERE
departamento = 'Ventas' INTERSECT SELECT
* FROM empleado WHERE departamento = 'Ventas';
En lugar de UNION (o UNION ALL),
escribimos INTERSECT. ¿Cuál es la diferencia?
UNION devuelve todos los
resultados de la primera consulta más los resultados de la segunda. INTERSECT,
en cambio, solo muestra las filas que están en AMBAS tablas.
En este caso, obtendríamos los
empleados que a su vez son jefes del departamento de Ventas.
Los requisitos aquí siguen siendo
los mismos: el número de columnas de ambas tablas debe ser el mismo y los tipos
de valores (número o texto) deben coincidir.
Clausula EXCEPT
SELECT * FROM jefe WHERE
departamento = 'Ventas' EXCEPT SELECT *
FROM empleado WHERE departamento = 'Ventas';
Muestra todos los resultados de
la primera tabla (la anterior a EXCEPT), excepto los resultados que también
aparecen en la segunda tabla (la posterior a EXCEPT).
En nuestro ejemplo, veremos todas
los empleados, MENOS los jefes aparezcan
también en la tabla de empleados.
No hay comentarios:
Publicar un comentario