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