sábado, 6 de julio de 2024

Clausula UNION en SQL

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.

Clausula UNION en SQL

¿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