Ir para o conteúdo principal

Union, Union All, Except, Except All e Intersect

É possível combinar os resultados de duas ou mais consultas através dos operadores UnionExcept e Intersect. Será mostrado um exemplo de situação onde esses operadores podem ser usados e os resultados entre duas tabelas.

TABELAS EXEMPLO: 

EX_FILIAL

| DESCRICAO  |
--------------
| 'Matriz'   |
| 'Matriz'   |
| 'Filial 1' |
| 'Filial 1' |
| 'Filial 2' |
| 'Filial 3' |

SQL de CRIAÇÃO/INSERÇÃO: 

CREATE TABLE ex_filial (descricao TEXT);
INSERT INTO ex_filial VALUES ('Matriz'),
                             ('Matriz'),
                             ('Filial 1'),
                             ('Filial 1'),
                             ('Filial 2'),
                             ('Filial 3');
COMMIT;

EX_PONTOS_DE_VENDA

| DESCRICAO   |
---------------
| 'Filial 1'  |
| 'Filial 2'  |
| 'Filial 2'  |
| 'Filial 3'  |
| 'Unidade 1' |
| 'Unidade 1' |
| 'Unidade 2' |

SQL de CRIAÇÃO/INSERÇÃO: 

CREATE TABLE ex_pontos_de_venda (descricao TEXT);
INSERT INTO ex_pontos_de_venda VALUES ('Filial 1'),
                                      ('Filial 2'),
                                      ('Filial 2'),
                                      ('Filial 3'),
                                      ('Unidade 1'),
                                      ('Unidade 1'),
                                      ('Unidade 2');
COMMIT;
UNION 

O operador UNION une o retorno de duas consultas fazendo DISTINCT.

SELECT DESCRICAO FROM EX_FILIAL
 UNION
SELECT DESCRICAO FROM EX_PONTOS_DE_VENDA

Retorno: 

| DESCRICAO   |
---------------
| 'Filial 2'  |
| 'Matriz'    |
| 'Unidade 2' |
| 'Unidade 1' |
| 'Filial 1'  |
| 'Filial 3'  |
UNION ALL 

O operador UNION ALL une o retorno de duas consultas sem fazer DISTINCT.

SELECT DESCRICAO FROM EX_FILIAL
 UNION ALL
SELECT DESCRICAO FROM EX_PONTOS_DE_VENDA

Retorno: 

| DESCRICAO   |
---------------
| 'Matriz'    |
| 'Matriz'    |
| 'Filial 1'  |
| 'Filial 1'  |
| 'Filial 2'  |
| 'Filial 3'  |
| 'Filial 1'  |
| 'Filial 2'  |
| 'Filial 2'  |
| 'Filial 3'  |
| 'Unidade 1' |
| 'Unidade 1' |
| 'Unidade 2' |
EXCEPT 

O operador EXCEPT não mostra qualquer dado da primeira consulta que se repete na segunda.

SELECT DESCRICAO FROM EX_FILIAL
EXCEPT
SELECT DESCRICAO FROM EX_PONTOS_DE_VENDA

Retorno: 

| DESCRICAO |
--------------
| 'Matriz'  |

EXCEPT ALL 

O operador EXCEPT ALL elimina os dados da primeira consulta de acordo com a quantidade que o mesmo resultado se repete na segunda.

SELECT DESCRICAO FROM EX_FILIAL
EXCEPT ALL
SELECT DESCRICAO FROM EX_PONTOS_DE_VENDA

Retorno: 

| DESCRICAO  |
---------------
| 'Filial 1' |
| 'Matriz'   |
| 'Matriz'   |
INTERSECT

O operador INTERSECT mostra somente os dados que contem em ambas as consultas.

SELECT DESCRICAO FROM EX_FILIAL
INTERSECT
SELECT DESCRICAO FROM EX_PONTOS_DE_VENDA

Retorno: 

| DESCRICAO  |
--------------
| 'Filial 1' |
| 'Filial 2' |
| 'Filial 3' |