Databases

T01-010-01 Consultas con operaciones de conjuntos

Enunciado

UNION

En las operaciones que veremos en este apartado intervienen varias consultas SELECT. En concreto, en la operación UNION, se combinan las filas del primer SELECT con las filas del segundo SELECT, desapareciendo las filas duplicadas.

Sintaxis

Consulta SELECT

UNION

Consulta SELECT

El número de columnas que devuelven ambas consultas SELECT debe ser el mismo y los tipos de dichas columnas deben ser compatibles.

Ejemplo:

Muestra los empleados que están o han estado en el departamento 110:

En primer lugar, vamos a buscar a los empleados que están (HR.employees) en el departamento 110

SELECT DISTINCT EMPLOYEE_ID, DEPARTMENT_ID
FROM HR.employees
WHERE DEPARTMENT_ID = 110

EMPLOYEE_ID DEPARTMENT_ID
205 110
206 110

Ahora buscaremos a los empleados que estuvieron en algún momento (HR.job_history) en el departamento 110

SELECT DISTINCT EMPLOYEE_ID, DEPARTMENT_ID
FROM HR.job_history
WHERE DEPARTMENT_ID = 110

EMPLOYEE_ID DEPARTMENT_ID
101 110

Por último, combinamos ambos resultados para alcanzar la consulta que se requería:

SELECT DISTINCT EMPLOYEE_ID, DEPARTMENT_ID
FROM HR.employees
WHERE DEPARTMENT_ID = 110
UNION
SELECT DISTINCT EMPLOYEE_ID, DEPARTMENT_ID
FROM HR.job_history
WHERE DEPARTMENT_ID = 110

EMPLOYEE_ID DEPARTMENT_ID
101 110
205 110
206 110

Naturalmente, lo lógico sería mostrar los nombres y apellidos de los empleados, en lugar de su identificador, por lo que una respuesta con más información sería:

SELECT DISTINCT FIRST_NAME, LAST_NAME, DEPARTMENT_ID
FROM HR.employees
WHERE DEPARTMENT_ID = 110
UNION
SELECT DISTINCT FIRST_NAME, LAST_NAME, job_history.DEPARTMENT_ID
FROM HR.job_history JOIN HR.employees USING (EMPLOYEE_ID)
WHERE job_history.DEPARTMENT_ID = 110

FIRST_NAME LAST_NAME DEPARTMENT_ID
Neena Kochhar 110
Shelley Higgins 110
William Gietz 110

Ejercicio

Neena Kochhar no se encuentra cómoda en el departamento actual, por lo que está viendo la opción de mudarse a California o de volver a alguno de los departamentos en los que ya ha estado trabajando.

¿Cuáles son los departamentos que o bien están en el estado de 'California' o bien ya ha estado trabajando en ellos con anterioridad Neena Kochhar?

Tipo

SELECT

Solución


												
SELECT DISTINCT DEPARTMENT_NAME FROM HR.departments JOIN HR.locations USING(LOCATION_ID) WHERE STATE_PROVINCE = 'California' UNION SELECT DISTINCT DEPARTMENT_NAME FROM HR.employees JOIN HR.job_history USING (EMPLOYEE_ID) JOIN HR.departments ON (job_history.DEPARTMENT_ID = departments.DEPARTMENT_ID) WHERE FIRST_NAME = 'Neena' AND LAST_NAME = 'Kochhar'

Prueba


											

Librerías (Onfly databases)