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