Conteúdo do Curso
SQL Intermediário
SQL Intermediário
Cláusula UNION
Você dominou com sucesso as consultas internas e já despertamos o interesse de um cliente que deseja que escrevamos consultas SQL para eles.
Mas há uma exigência - teremos que juntar muitas tabelas e trabalhar com elas. Portanto, antes de mergulharmos nos JOINs
, vamos nos familiarizar com uma cláusula importante: UNION
.
Vamos rapidamente rever os pontos chave ao trabalhar com UNION
:
- Número e ordem das colunas: Todas as consultas combinadas com
UNION
devem ter o mesmo número de colunas, e estas colunas devem estar na mesma ordem; - Tipos de dados: Os tipos de dados das colunas correspondentes em cada consulta devem ser compatíveis;
- Linhas únicas: Por padrão,
UNION
remove linhas duplicadas. Para incluir duplicatas, utiliza-seUNION ALL
.
Para uma melhor compreensão de como combinar corretamente tabelas utilizando a cláusula UNION
, introduzi uma tabela adicional que contém informações sobre contractors
.
Não há muitas informações aqui, apenas o first_name
, last_name
e email
.
Eis como esta tabela se parece:
Você pode ver que esta tabela tem semelhanças com a tabela employees
. Utilizando a cláusula UNION
, podemos combinar estas duas tabelas para, por exemplo, ver uma lista de todos os nomes e sobrenomes dos empregados e contratados envolvidos na empresa.
Para fazer isso, utilizaremos a cláusula UNION
:
(SELECT employee_id as id, first_name, last_name FROM employees) UNION (SELECT contractor_id as id, first_name, last_name FROM contractors) ORDER BY id
Vamos descrever brevemente o que está acontecendo aqui:
Temos 2 consultas que retornam 3 colunas com tipos de dados idênticos para cada coluna.
Ou seja, queremos ver o Id
, first_name
e last_name
de todos os participantes da empresa.
Também criamos um alias para o Id para que as colunas em ambas as consultas SELECT
tenham os mesmos nomes.
Em seguida, usamos a cláusula UNION
para combinar o resultado dessas duas consultas SELECT
com remoção de duplicatas (embora não tenhamos duplicatas).
Depois disso, usamos a cláusula ORDER BY
para ordenar pelo Id
.
Nota
Estamos ordenando pelo Id, que é uma coluna comum a ambas as tabelas.
Para melhor compreender, é necessário perceber que após combinar com a cláusula UNION
, obtemos "uma grande consulta" com a qual podemos então trabalhar usando diferentes cláusulas; no nosso caso, é a cláusula ORDER BY
.
Mas não podemos usar cláusulas como WHERE
ou GROUP BY
para tabelas combinadas dessa forma usando a cláusula UNION
.
Para fazer isso, precisaremos escrever essa combinação em uma subconsulta na seção FROM
.
Veja como ficará:
SELECT id, first_name, last_name FROM ( SELECT employee_id AS id, first_name, last_name FROM employees UNION SELECT contractor_id AS id, first_name, last_name FROM contractors ) AS combined WHERE first_name = 'Jane'
Portanto, usar uma consulta como uma subconsulta na seção FROM
abre um leque de possibilidades para nós!
Nota:
A princípio pode parecer assustador, mas acredite, com esse conhecimento e a capacidade de usar tais estruturas, será muito mais fácil escrever consultas complexas e realizar as tarefas que lhe foram atribuídas.
Obrigado pelo seu feedback!