2.6. Operadores SET

Los operadores SET (Conjunto) combinan los resultados de dos o más consultas en un único resultado. Las consultas que contienen operadores SET (Conjunto) son llamadas consultas compuestas (compound queries).

Operadores SET
Operador Obtiene
UNIONTodas las filas distintas seleccionadas por ambas consultas
UNION ALLTodas las filas seleccionadas por ambas consultas, incluyendo todos los duplicados
INTERSECTTodas las filas distintas seleccionadas por ambas consultas
MINUSTodas las filas distintas seleccionadas por la primera sentencia SELECT que no se encuentren en la segunda sentencia SELECT

Gráficamente lo representamos así

Todos los operadores SET tienen la misma precedencia. Si una sentencia SQL contiene múltiples operadores SET, el servidor de Oracle evalúa estos de izquierda a derecha. Se puede hacer uso de los paréntesis para especificar un orden explicito de evaluación como pueden ser las consultas que usan el operador INTERSECT con operadores SET.

Operador UNION

El operador UNION obtiene todas las filas seleccionadas por ambas consultas.

Use el operador UNION para obtener todas las filas de múltiples tablas y eliminar cualquier fila duplicada.

Normas a seguir

El siguiente ejemplo muestra el uso de UNION

SELECT nombre, apellido1 , Apellido2, ife, curp
FROM empleados
UNION
SELECT nombre, apellido1 , apellido2, ife, curp
FROM clientes
ORDER BY nombre, apellido1 , apellido2;

Operador UNION ALL

Use el operador UNION ALL para obtener todas las filas de múltiples consultas.

Normas a seguir

Nota: Con excepción de las normas anteriores, UNION y UNION ALL es lo mismo.

SELECT nombre, apellido1 , Apellido2, ife, curp
FROM empleados
UNION ALL
SELECT nombre, apellido1 , apellido2, ife, curp
FROM clientes
ORDER BY nombre, apellido1 , apellido2;

Operador INTERSECT

Use el operador INTERSECT para obtener todas las filas comunes de múltiples consultas.

Normas a seguir

SELECT nombre RFC FROM clientes_2015
INTERSECT
SELECT nombre, RFC FROM clientes_2016

Operador MINUS

Use el operador MINUS para obtener las filas de la primera consulta que no estén presentes en la segunda consulta (la primera sentencia SELECT MENOS la segunda sentencia SELECT)

Normas a seguir

Ejemplo: la siguiente consulta combina el resultado de las 2 consultas, y devuelve solo los elementos de la primera consulta que no se encuentren en la segunda, es decir todos aqueloos clientes que lo fueron en el 2015 pero no lo fueron en el 2016,

SELECT nombre, rfc FROM clientes_2015
MINUS
SELECT nombre, rfc FROM clientes_2016

Resumen

En este tema se ha visto: