PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como o UNION funciona no PostgreSQL


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.