TOP

Lição SQL 12. Consultas combinadas (UNION)

A maioria das consultas SQL usa uma única instrução que retorna dados de uma ou mais tabelas. SQL também permite executar várias consultas separadas ao mesmo tempo e exibir o resultado como um único conjunto de dados. Essas consultas combinadas são geralmente chamadas de junções ou consultas complexas.


1. Usando o operador UNION

As consultas SQL são combinadas usando o operador UNION. Para fazer isso, você precisa especificar cada solicitação SELECT e colocar a palavra-chave UNION entre elas. Não há limite para o número de usos do operador UNION em uma consulta geral. Na seção anterior, observamos que MS Access não tem a capacidade de criar uma união externa completa, agora veremos como isso pode ser alcançado por meio do operador UNION.

Run SQLSELECT *
FROM Sumproduct 
LEFT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City
UNION
SELECT * 
FROM Sumproduct 
RIGHT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City

Vemos que a consulta exibiu todas as colunas da primeira tabela e da segunda, independentemente de todos os registros terem contrapartes em outra tabela.

Também é importante notar que em muitos casos, em vez de UNION, podemos usar a cláusula WHERE com muitas condições e obter um resultado semelhante. Porém, por meio de UNION, os registros parecem mais concisos e claros.

Também é necessário seguir certas regras ao escrever consultas combinadas:

  • a solicitação UNION deve incluir dois ou mais operadores SELECT separados pela palavra-chave UNION (ou seja, se quatro operadores SELECT forem usados na solicitação, deverá haver três palavras-chave UNION);
  • cada consulta no operador UNION deve ter as mesmas colunas, expressões ou funções estatísticas, que, além disso, devem ser listadas na mesma ordem;
  • os tipos de dados da coluna devem ser compatíveis. Eles não precisam necessariamente ser do mesmo tipo, mas devem ter um tipo semelhante para que o SGBD possa convertê-los de forma inequívoca (por exemplo, podem ser diferentes tipos de dados numéricos ou diferentes tipos de data).
  • 2. Incluir ou excluir linhas repetidas

    Uma consulta com UNION remove automaticamente todas as linhas duplicadas do conjunto de resultados da consulta (em outras palavras, se comporta como uma cláusula WHERE com múltiplas condições em uma única instrução SELECT). Este é o comportamento padrão do operador UNION, mas podemos alterá-lo se quisermos. Para isso devemos usar o operador UNION ALL em vez de UNION.

    3. Classificando os resultados das consultas combinadas

    Os resultados da instrução SELECT são classificados usando a instrução ORDER BY. Ao combinar consultas usando UNION, apenas uma cláusula ORDER BY pode ser usada e deve ser colocada na última instrução SELECT. Na verdade, na prática, não faz muito sentido ordenar parte dos resultados numa ordem e a outra parte noutra. Portanto, múltiplas sentenças ORDER BY não são permitidas.