Union, Union All, Except, Except All e Intersect
É possível combinar os resultados de duas ou mais consultas através dos operadores Union, Except 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' |