Olá pessoal, neste artigo veremos os conceitos e exemplos da cláusula Union All e aprenderemos a usar Subqueries. Acompanhem:

 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

 wellingtonbalbo@gmail.com