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
coordenadorObtemos 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_aperfeicoamentoO 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 |