Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Explicação do Operador Oracle UNION


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