Introdução – Se desejarmos consultar informações pertencentes a mais de uma tabela e que são obtidas com a execução de mais de um comando SELECT, devemos usar a cláusula UNION ALL, que facilita a exibição de dados de tabelas distintas.
É isso que veremos detalhadamente a partir de agora. Veremos também as SUBQUERIES, usadas para refinar a consulta aos dados.
UNION ALL – O UNION ALL é uma cláusula responsável por unir informações obtidas a partir de diversos comandos SELECT. Para obtermos estes dados, não é obrigatório que as tabelas que as possuem estejam relacionadas.
Para exemplificar nossos conceitos, vamos considerar as tabelas Cargo, Clientes e Funcionarios, conforme a imagem abaixo (tabelas criadas em artigos anteriores, só baixar o script):
Supondo que precisamos obter o nome de todos os Cargos, Clientes e Funcionários das três tabelas acima, podemos usar o UNION ALL pra isso. Veja como no script a seguir:
SELECT IDCARGO AS 'ID', NOMECARGO AS 'CARGO / NOME', 'CARGO' AS TABELA
FROM CARGO
UNION ALL
SELECT IDCLIENTE, NOME, 'CLIENTES'
FROM CLIENTES
UNION ALL
SELECT IDFUNCIONARIO, NOMEFUNCIONARIO, 'FUNCIONÁRIO'
FROM FUNCIONARIO
ORDER BY TABELA
E que nos gera o seguinte resultado:
Perceba que criei uma coluna virtual dando a ela o alias Tabela, para indicar de qual tabela pertence determinado registro.
Observação Importante: Para que a consulta possa ser realizada, é essencial que as colunas sejam do mesmo datatype (string com string, int com int...).
Dica: O operador UNION, por padrão, elimina linhas duplicadas do conjunto de resultados. Porém, todas as linhas serão incluídas nos resultados e as linhas duplicadas não serão removidas caso usemos o ALL.
- Regras de Uso – Para usarmos a cláusula UNION ALL, devemos nos atentar a algumas regras, as quais são descritas abaixo:
· O apelido (alias) das colunas, quando necessário, deve ser incluído somente no primeiro SELECT;
· A inclusão de WHERE pode ser feita em qualquer um dos comandos SELECT;
· É possível escrever qualquer SELECT com JOIN ou SUBQUERY, caso realmente precisemos fazer isso;
· É necessário que todos os comandos SELECT usados apresentem o mesmo número de colunas;
· É necessário que todas as colunas dos comandos SELECT tenham os mesmos datatype em sequencia. Por exemplo: uma vez que a primeira coluna do primeiro SELECT seja do tipo string, é obrigatório que as primeiras colunas dos outros SELECT também apresentem o datatype string;
· Para que tenhamos dados ordenados, o último SELECT deve ter uma cláusula ORDER BY adicionada em seu final (como no exemplo acima);
· Devemos usar a cláusula UNION sem ALL para a exibição única de dados repetidos em mais de uma tabela (como já tinha dito anteriormente na Dica).
Dica 2: Faça mais testes unindo diversas tabelas (com ou sem relacionamentos), para praticar o uso do UNION, com e sem ALL, agora que você já sabe a diferença entre eles. Pode ter certeza: uma hora ou outra você usará o UNION!
Outro recurso muito utilizado é a Subquery, a qual começaremos a ver na próxima parte, aguardem!
Assim finalizo o artigo. Muito obrigado a todos!
Um abraço, e até o próximo artigo.
Wellington Balbo de Camargo