Operações SET (SQL)

tipo de operação em SQL Da Wikipédia, a enciclopédia livre

Operações SET, em SQL, são um conjunto de operações realizadas sobre tabelas que se assemelham às operações realizadas sobre conjuntos na teoria dos conjuntos. Entre essas operações estão a união e interseção, que quando aplicadas às tabelas, através dos operadores padrões da SQL, resultam em novas tabelas.

No contexto da SQL, estes operadores combinam dois ou mais comandos SELECT onde o retorno depende operador utilizado.[1]

Operador UNION

Resumir
Perspectiva

Em SQL a cláusula UNION [2] combina os resultados de duas consultas SQL em uma única tabela para todas as linhas correspondentes. As duas consultas devem resultar no mesmo número de colunas e em tipos de dados compatíveis com o objetivo de unirem-se. Quaisquer registros duplicados são automaticamente removidos a menos que UNION ALL seja usado.

UNION pode ser útil em aplicações de data warehouse onde tabelas não são perfeitamente normalizadas. Um simples exemplo poderia ser um banco de dados com as tabelas vendas2005 e vendas2006 que possuem estruturas idênticas mas são separadas devido às considerações de desempenho. Uma consulta UNION poderia combinar resultados das duas tabelas.

Observe que UNION não garante a ordem das linhas. As linhas do segundo operando pode aparecer antes, depois ou misturadas com as linhas do primeiro operando. Em situações onde uma ordem específica é desejada, ORDER BY deve ser usada.

Observe que UNION ALL pode ser muito mais rápido que UNION.

Exemplos

Dadas estas duas tabelas:

Mais informação pessoa, quantia ...
vendas2005
pessoaquantia
João1000
Alex2000
Roberto5000
Fechar
Mais informação person, amount ...
vendas2006
personamount
João2000
Alex2000
Isaque35000
Fechar

Executando esta declaração:

SELECT * FROM vendas2005
UNION
SELECT * FROM vendas2006;

produz este conjunto de resultados, embora a ordem das linhas podem variar devido a cláusula ORDER BY não ter sido fornecida:

Mais informação pessoa, quantia ...
pessoaquantia
João1000
Alex2000
Roberto5000
João2000
Isaque35000
Fechar

Observe que há duas linhas para João devido estas linhas serem distintas através de suas colunas. Há apenas uma linha para Alex porque estas linhas não são distintas para as duas colunas.

UNION ALL fornece resultados diferentes, devido ele não eliminar duplicações. Executando esta declaração:

SELECT * FROM vendas2005
UNION ALL
SELECT * FROM vendas2006;

forneceria estes resultados, novamente permitindo variância para a falta de uma declaração ORDER BY:

Mais informação pessoa, quantia ...
pessoaquantia
João1000
João2000
Alex2000
Alex2000
Roberto5000
Isaque35000
Fechar

A discussão de full outer join também possui um exemplo que usa UNION.

Operador INTERSECT

O operador SQL INTERSECT pega o resultado de duas consultas e retorna apenas as linhas que aparecem em ambos os conjuntos resultantes. Para propósitos de remoção de duplicação o operador INTERSECT não faz distinção entre NULLs. O operador INTERSECT remove linhas duplicadas do conjunto resultante final.

Exemplo

O exemplo a seguir de consulta INTERSECT retorna todas as linhas da tabela Ordens onde Quantidade está entre 50 e 100.

SELECT *
FROM   Ordens
WHERE  Quantidade BETWEEN 1 AND 100

INTERSECT

SELECT *
FROM   Ordens
WHERE  Quantidade BETWEEN 50 AND 200;

Operador EXCEPT

Resumir
Perspectiva

O operador SQL EXCEPT pegas as linhas distintas de uma consulta e retorna as linhas que não aparecem em um segundo conjunto resultante. O operador EXCEPT ALL (não suportado em MSSQL) não remove duplicações. Para propósitos de eliminação de linha e remoção de duplicação, o operador EXCEPT não faz distinção entre NULLs.

Notavelmente, a plataforma Oracle fornece um operador MINUS que é equivalente em funcionalidade ao operador EXCEPT DISTINCT do Padrão SQL.

Exemplo

No exemplo a seguir a consulta EXCEPT retorna todas as linhas da tabela Ordens onde Quantidade está entre 1 e 49 e aquelas com uma Quantidade entre 76 e 100.

Formulada de outra maneira, a consulta retorna todas as linhas onde a Quantidade está entre 1 e 100, além de linhas onde a quantidade está entre 50 e 75.

SELECT *
FROM   Ordens
WHERE  Quantidade BETWEEN 1 AND 100

EXCEPT

SELECT *
FROM   Ordens
WHERE  Quantidade BETWEEN 50 AND 75;

Alternativamente, em implementações da linguagem SQL sem o operador EXCEPT, a forma equivalente de um LEFT JOIN onde os valores do lado direito são NULL pode ser usado em vez daquele.

Exemplo

T/O seguinte exemplo é equivalente ao exemplo acima mas sem utilização do operador EXCEPT.

SELECT o1.*
FROM (
    SELECT *
    FROM Ordens
    WHERE Quantidade BETWEEN 1 AND 100) o1
LEFT JOIN (
    SELECT *
    FROM Ordens
    WHERE Quantidade BETWEEN 50 AND 75) o2
ON o1.id = o2.id
WHERE o2.id IS NULL

Ver também

Referências

Ligações externas

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.