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