Databases
T01-010-01 Consultas con operaciones de conjuntos
Enunciado
UNIONEn las operaciones que veremos en este apartado intervienen varias consultas
SELECT. En concreto, en la operaciónUNION, se combinan las filas del primerSELECTcon las filas del segundoSELECT, desapareciendo las filas duplicadas.Sintaxis
Consulta SELECT
UNION
Consulta SELECTEl 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
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)

