Utilizar conjuntos no PostgreSQL, usando recursos como a União, Interseção e Diferença podem ser bastante úteis no dia-a-dia. O mais utilizado é a União, mas a Interseção e Diferença também são necessárias em muitos momentos. Disponibilizei também uma base de testes, que você pode utilizar para testar os exemplos que vou mostrar aqui.

 

Para que funcionem corretamente, é necessário que os selects utilizados tenham o mesmo número de colunas e dados do mesmo tipo.

União (UNION E UNION ALL)
O UNION serve para juntar ou unir dois selects, um abaixo do outro. As linhas repetidas são ignoradas.

Exemplo 1.

SELECT nom_prof AS nome FROM professores
UNION
SELECT nom_alu AS nome FROM alunos

No exemplo 1, o primeiro select retorna os nomes de todos os professores, e o segundo retorna o nome de todos os alunos. O UNION junta todos os nomes em uma única lista.

O UNION ALL é bastante semelhante ao UNION. A única diferença é que as linhas repetidas são exibidas.

Exemplo 2:

SELECT nom_prof AS nome FROM professores
UNION ALL
SELECT nom_alu AS nome FROM alunos

O exemplo 2 faz a mesma coisa do exemplo 1, com a diferença que as linhas repetidas são exibidas no exemplo 2.

Interseção (INTERSECT)
Exibe apenas os registros que estão nos dois selects.

Exemplo 3:

SELECT nom_prof AS nome FROM professores
INTERSECT
SELECT nom_alu AS nome FROM alunos

Diferença (EXCEPT)
São exibidas as linhas que estão no primeiro select, mas não estão no segundo select.

Exemplo 4:

SELECT nom_prof AS nome FROM professores
EXCEPT
SELECT nom_alu AS nome FROM alunos