SQL: UNION
O operador UNION é utilizado para juntar os registros de duas ou mais tabelas. Assim como o operador JOIN, o UNION pode ser usado mais de uma vez na declaração. A limitação é que não se pode usar a cláusula ORDER BY em consultas de união.
O operador UNION é utilizado para juntar os registros de duas ou mais tabelas. Assim como o operador JOIN, o UNION pode ser usado mais de uma vez na declaração. A limitação é que não se pode usar a cláusula ORDER BY em consultas de união.
Visão geral
O UNION é um operador SQL utilizado para combinar um ou mais resultados de uma consulta do tipo SELECT, porém é necessário que as colunas tenham o tipo de dados similar, mesma quantidade e ordem de colunas.
Suponhamos que seja necessário retornar todos os registros referentes a professores e coordenadores de uma instituição, tendo em vista que esses dados ficam em tabelas diferentes. Observe abaixo as tabelas professor (Tabela 1) e coordenador (Tabela 2).
id | Nome | admissao |
1 | Remo Lupin | 2018-01-01 |
2 | Rúbeo Hagrid | 2017-02-01 |
3 | Minerva McGonagall | 2016-11-08 |
id | Nome | disciplina |
1 | Filius Flitwick. | Feitiços |
2 | Gilderoy Lockhart | Defesa contra as artes das trevas |
3 | Rolanda Hooch | Voo e Quadribol |
Para trazer os dados das duas tabelas na mesma consulta, podemos utilizar o operador UNION, conforme trecho de código abaixo:
SELECT
Nome
FROM
professor
UNION
SELECT
Nome
FROM
coordenador
Obtemos como resultado a união das duas tabelas, conforme mostra a Tabela 3.
Nome |
Remo Lupin |
Rúbeo Hagrid |
Minerva McGonagall |
Filius Flitwick. |
Gilderoy Lockhart |
Rolanda Hooch |
Note que no resultado da consulta conseguimos condensar o nome dos professores e coordenadores em um único resultado.
Sintaxe
SELECT
[ coluna1, coluna2, ... ]
FROM
[ tabela1 ]
UNION [ ALL ]
SELECT
[ coluna1, coluna2, ... ]
FROM
[ tabela2 ]
Na prática
Exemplo 1
Para este exemplo considere o seguinte cenário:
A empresa AT&F possui uma tabela no banco de dados para armazenar todos os seus gerentes (Tabela 4), e outra tabela para armazenar todos os supervisores (Tabela 5).
Id | nome | departamento | data_admissao |
1 | Enrique Santos | Tecnologia | 2008-09-01 |
2 | Nadia Cristina | Contratos | 2007-05-01 |
Id | nome | departamento | data_admissao |
1 | Marcus Vinicius | Administracao | 2012-05-05 |
2 | Ana Clara | Recepcao | 2015-04-01 |
3 | Kelly Cristina | Faculdade | 2015-01-01 |
4 | Michele Francisca | Faculdade | 2017-01-01 |
5 | Ana Flavia | Comercial | 2017-02-01 |
6 | Sarah Camila | Comercial | 2017-01-01 |
Suponhamos que seja necessário trazer todos os supervisores e todos os gerentes, que estão em tabelas diferentes. Para isso podemos utilizar a query abaixo:
SELECT
nome
FROM
supervisor
UNION
SELECT
nome
FROM
gerente
Dessa forma obtivemos o resultado ilustrado na Tabela 6.
nome |
Marcos Vinícius |
Ana Clara |
Kelly Cristina |
Michele Francisca |
Ana Flávia |
Sarah Camila |
Enrique Santos |
Nadia Cristina |
Observe que este resultado trouxe o nome de todos os funcionários, independente do cargo, pois utilizamos UNION para unir o resultado de duas queries.
Exemplo 2
Para este exemplo, considere a estrutura de tabelas abaixo, onde temos a tabela curso_pos (Tabela 7), responsável por manter dados dos cursos de Pós Graduação da instituição, a tabela curso_graduacao (Tabela 8), responsável por manter dados dos cursos de Graduação da instituição, e a tabela curso_aperfeicoamento (Tabela 9).
ID | Nome | Data_Cadastro |
1 | MBA em Gerenciamento de Projetos | 2018-01-10 |
2 | Pós Graduação em Administração de Empresas | 2018-02-20 |
3 | Pós Graduação em Banco de Dados | 2018-03-15 |
ID | Nome | Data_Cadastro |
1 | Matemática | 2016-11-01 |
2 | Línguas | 2016-10-05 |
3 | Geografia | 2014-04-06 |
4 | Ciência da Computação | 2017-10-10 |
5 | Análise e Desenvolvimento de Sistemas | 2018-01-01 |
6 | Química | 2018-09-01 |
ID | Nome | Data_Cadastro |
1 | Excel para Iniciantes | 2015-01-10 |
2 | Oratória | 2017-02-20 |
3 | Retenção de impostos | 2018-03-15 |
Suponhamos que o responsável pela instituição solicitou que o departamento de TI enviasse todos os cursos que a instituição possui, independente da modalidade. Para isso podemos utilizar a query abaixo:
SELECT
nome
FROM
curso_pos
UNION
SELECT
nome
FROM
curso_graduacao
UNION
SELECT
nome
FROM
curso_aperfeicoamento
O resultado pode ser visto abaixo, na Tabela 10, onde trouxemos a união das 3 tabelas.
Nome |
MBA em Gerenciamento de Projetos |
Pós Graduação em Administração de Empresas |
Pós Graduação em Banco de Dados |
Matemática |
Línguas |
Geografia |
Ciência da Computação |
Análise e Desenvolvimento de Sistemas |
Química |
Excel para Iniciantes |
Oratória |
Retenção de impostos |
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo