No PostgreSQL, o
UNION
O operador combina os resultados de várias consultas em um único conjunto de resultados. Sintaxe
A sintaxe oficial é assim:
query1 UNION [ALL] query2
A
UNION
operador anexa o resultado de query2
ao resultado de query1
(embora não haja garantia de que esta seja a ordem em que as linhas são realmente retornadas). As linhas duplicadas são eliminadas, a menos que
UNION ALL
é usado. Exemplo
Suponha que temos as seguintes tabelas:
SELECT * FROM Teachers;
SELECT * FROM Students;
Resultado:
teacherid | teachername -----------+------------- 1 | Warren 2 | Ben 3 | Cathy 4 | Cathy 5 | Bill 6 | Bill studentid | studentname -----------+------------- 1 | Faye 2 | Jet 3 | Spike 4 | Ein 5 | Warren 6 | Bill
Podemos usar o
UNION
operador para devolver todos os professores e alunos:SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Resultado:
teachername ------------- Spike Ben Ein Cathy Jet Faye Bill Warren (8 rows)
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). Aqui está um exemplo que usa explicitamente o
DISTINCT
operador:SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;
Resultado:
teachername ------------- Spike Ben Ein Cathy Jet Faye Bill Warren (8 rows)
Mesmo resultado.
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:
teachername ------------- Warren Ben Cathy Cathy Bill Bill Faye Jet Spike Ein Warren Bill (12 rows)
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.