UNION (ALL), INTERSECT E MINUS

Essas quatro funcionalidade ( UNION ALL é um caso aparte 🙂 ) são primordiais para obter fragmentos de resultados.
Ao invés de sobrecarregar sua query com diversas condições e controles tente utilizar esses brinquedinhos.

UNION

Agrega o resultado da query subsequente a query anterior, EX:

SELECT TABLE_NAME FROM USER_TABLES
UNION
SELECT TABLE_NAME FROM ALL_TABLES

Ela retornará todas as tabelas do usuario e todas as tabelas do sistema, PORÉMMMMMMMMM, NÃO REPETIRÁ!!!!!!!

Se voce quiser trazer tudo, mesmo que repita, use:

SELECT TABLE_NAME FROM USER_TABLES
UNION ALL
SELECT TABLE_NAME FROM ALL_TABLES

A query acima trará as tabelas de USER_TABLES e também de ALL_TABLES repetindo caso seja necessário.

INTERSECT

Traz a diferença entre dois conjuntos de dados.
Digamos que voce queira os registros que existam em uma query e NECESSARIAMENTE não existam na outra. ( e vice-versa )

SELECT TABLE_NAME FROM USER_TABLES
INTERSECT
SELECT TABLE_NAME FROM ALL_TABLES

Isso trará todas as tabelas do usuario que nao estejam em ALL_TABLES ( que no caso é 0 pq todas as tabelas estão lá ) e também trará todas
as tabelas que tenham na ALL_TABLES e não na USER_TABLES.

Podemos resumir o INTERSECT como: Traz todos os registros que se repetem nas sentenças.

MINUS

Traz todos os registros da primeira consulta MENOS ( MINUS ) os registros da segunda consulta. ( ele também ignora os repetidos )

SELECT TABLE_NAME FROM USER_TABLES
MINUS
SELECT TABLE_NAME FROM ALL_TABLES

O resultado será vazio. Pois todos os registros da primeira query estão na segunda.

Deixe uma resposta