TÓPICO 8 – SET OPERATORS
Neste tópico 8, falarei sobre os Set Operators que servem para combinar 2 ou mais clausulas SELECT, fazendo com que a saída seja mesclada de alguma maneira. Por ser um assunto pequeno, colocarei aqui apenas algumas dicas para quem for fazer o exame de certificação em SQL.
Os operadores SET são:
- UNION: Combina conjuntos de linhas, eliminando as linhas duplicadas (menos performático que o UNION ALL).
- UNION ALL: Combina conjuntos de linhas sem eliminar as duplicadas.
- INTERSECT: Inclui linhas comuns em ambas as queries, eliminando as duplicadas.
- MINUS: Retorna o que existe no primeiro conjunto de linhas menos o segundo conjunto de linhas (As linhas que tem na primeira tabela, que não tem na segunda tabela, ou seja, retorna as linhas que existem unicamente no primeiro SELECT).
DICAS RÁPIDAS SOBRE OS SET OPERATORS
– Para que os SET operators funcionem, o numero de parâmetros nos SELECTs deve ser igual, bem como o tipo de dados (Conversão implícita é permitida aqui).
– Tipos de dados LOB não podem ser usados.
– A clausula ORDER BY só deve aparecer no final, ou seja, no último SELECT.
– Multiplos operadores SET podem ser usados em uma query. E não existe uma prioridade de execução, ou seja, quem aparecer primeiro será executado primeiro. Essa regra só pode ser quebrada caso se use parênteses. Ex:
OBS1: Não se pode ter uma clausula ORDER BY dentro da subquery.
– Com SET operators, a clausula ORDER BY é restrita apenas para identificar itens comuns na lista do SELECT. Ex:
Bem… é isso pessoal. Até a próxima.
Keep Querying.
Bom dia,
Aproveitando o tópico, os nulos, serão iquinorados em quais operadores ?? Qual o comportamento padrão para os nulos para os operadores?
Obrigado
Olá,
Veja pelo resultado dos testes abaixo:
— nulls não são ignorados no UNION
SELECT NULL FROM DUAL
UNION ALL
SELECT ‘NOVOVALOR’ FROM DUAL
UNION ALL
SELECT NULL FROM DUAL
UNION ALL
SELECT ‘VALOR’ FROM DUAL
————————
saida
————————
(null)
NOVOVALOR
(null)
VALOR
— nulls são ignorados no INTERSECT
— não retorna nada
SELECT ‘VALOR’ FROM DUAL
INTERSECT
SELECT NULL FROM DUAL
INTERSECT
SELECT ‘VALOR’ FROM DUAL
INTERSECT
SELECT NULL FROM DUAL
————————
saida
————————
(nenhuma linha é retornada)
— nulls não são ignorados no MINUS
— Query 1
SELECT NULL FROM DUAL
MINUS
SELECT ‘VALOR’ FROM DUAL
–Query 2
SELECT ‘VALOR’ FROM DUAL
MINUS
SELECT NULL FROM DUAL
————————
saida
————————
Query 1:
(null)
Query 2:
VALOR