sql >> Base de Datos >  >> RDS >> Oracle

Explicación del operador Oracle UNION

En Oracle Database, UNION El operador nos permite combinar los resultados de dos consultas en un único conjunto de resultados.

Ejemplo

Supongamos que tenemos las siguientes tablas:

SELECT * FROM Teachers;
SELECT * FROM Students;

Resultado:

ID DEL PROFESOR NOMBRE DEL PROFESOR
1 Warren
2 Ben
3 Cathy
4 Cathy
5 Factura
6 Factura
ID DE ESTUDIANTE NOMBRE DEL ESTUDIANTE
1 Faye
2 Jet
3 Pico
4 Ein
5 Warren
6 Factura

Aquí hay un ejemplo del uso de UNION operador para devolver los nombres de todos los profesores y estudiantes:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultado:

NOMBRE DEL PROFESOR
Ben
Factura
Cathy
Ein
Faye
Jet
Espiga
Madrid

De forma predeterminada, UNION operador aplica implícitamente un DISTINCT operación. En otras palabras, devuelve solo valores distintos de forma predeterminada. Entonces, los resultados anteriores contienen solo uno de Warren, Cathy y Bill. Esto es a pesar del hecho de que las tablas combinadas en realidad contienen dos Warren, dos Cathy y tres Bill (hay dos maestros llamados Cathy, un maestro y un cliente llamado Warren, y dos llamados Bill, así como un estudiante llamado Bill).

Incluir duplicados

Podemos usar el ALL palabra clave para incluir valores duplicados en los resultados:

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Resultado:

NOMBRE DEL PROFESOR
Madrid
Ben
Cathy
Cathy
Factura
Factura
Faye
Jet
Espiga
Ein
Madrid
Factura

Esta vez obtuvimos doce filas en lugar de las ocho que obtuvimos en nuestro primer ejemplo.

Podemos ver que ambos Cathys fueron devueltos y los tres Bills fueron devueltos.

Algunas cosas para recordar

Tenga en cuenta que las expresiones deben coincidir en número y deben estar en el mismo grupo de tipos de datos. Por lo tanto, no podemos hacer lo siguiente:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

Resultado:

ORA-01789: query block has incorrect number of result columns

O esto:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Resultado:

ORA-01790: expression must have same datatype as corresponding expression

Aunque, podemos usar funciones como TO_CHAR() para convertir una columna en un grupo de tipo de datos adecuado:

SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students;

Resultado:

TEACHERNAME
1
2
3
4
5
6
Ben
Bill
Cathy
Warren