No banco de dados Oracle, o
UNION O operador nos permite combinar os resultados de duas consultas em um único conjunto de resultados. Exemplo
Suponha que temos as seguintes tabelas:
SELECT * FROM Teachers;
SELECT * FROM Students; Resultado:
| ID DO PROFESSOR | NOME DO PROFESSOR |
|---|---|
| 1 | Warren |
| 2 | Ben |
| 3 | Cathy |
| 4 | Cathy |
| 5 | Faturar |
| 6 | Faturar |
| ESTUDANTE | NOME DO ALUNO |
|---|---|
| 1 | Faye |
| 2 | Jato |
| 3 | Ponto |
| 4 | Ein |
| 5 | Warren |
| 6 | Faturar |
Aqui está um exemplo de uso do
UNION operador para retornar os nomes de todos os professores e alunos:SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students; Resultado:
| NOME DO PROFESSOR |
|---|
| Ben |
| Faturar |
| Cathy |
| Ein |
| Faye |
| Jato |
| Ponto |
| Warren |
Por padrão, o
UNION operador aplica implicitamente um DISTINCT Operação. Em outras palavras, ele retorna apenas valores distintos por padrão. Portanto, os resultados acima contêm apenas um de Warren, Cathy e Bill. Isso apesar do fato de que as tabelas combinadas na verdade contêm dois Warrens, dois Cathys e três Bills (há dois professores chamados Cathy, um professor e um cliente chamados Warren, e dois chamados Bill, bem como um aluno chamado Bill). Incluir duplicatas
Podemos usar o
ALL palavra-chave para incluir valores duplicados nos resultados:SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students; Resultado:
| NOME DO PROFESSOR |
|---|
| Warren |
| Ben |
| Cathy |
| Cathy |
| Faturar |
| Faturar |
| Faye |
| Jato |
| Ponto |
| Ein |
| Warren |
| Faturar |
Desta vez, obtivemos doze linhas em vez das oito que obtivemos em nosso primeiro exemplo.
Podemos ver que ambas as Cathys foram devolvidas e todos os três Bills foram devolvidos.
Algumas coisas para lembrar
Observe que as expressões devem corresponder em número e devem estar no mesmo grupo de tipos de dados. Portanto, não podemos fazer o seguinte:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students; Resultado:
ORA-01789: query block has incorrect number of result columns
Ou isto:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students; Resultado:
ORA-01790: expression must have same datatype as corresponding expression
Embora possamos usar funções como
TO_CHAR() para converter uma coluna em um grupo de tipos de dados adequado:SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students; Resultado:
TEACHERNAME 1 2 3 4 5 6 Ben Bill Cathy Warren