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
Tabela 1. Tabela professor

id Nome disciplina
1 Filius Flitwick. Feitiços
2 Gilderoy Lockhart Defesa contra as artes das trevas
3 Rolanda Hooch Voo e Quadribol
Tabela 2. Tabela coordenador

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
Tabela 3. Resultado da consulta

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
Tabela 4. Tabela gerente

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
Tabela 5. Tabela supervisor

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
Tabela 6. Tabela supervisor

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
1MBA em Gerenciamento de Projetos2018-01-10
2Pós Graduação em Administração de Empresas2018-02-20
3Pós Graduação em Banco de Dados2018-03-15
Tabela 7. Tabela curso_pos

ID Nome Data_Cadastro
1Matemática2016-11-01
2Línguas2016-10-05
3Geografia2014-04-06
4Ciência da Computação2017-10-10
5Análise e Desenvolvimento de Sistemas2018-01-01
6Química2018-09-01
Tabela 8. Tabela curso_graduacao

ID Nome Data_Cadastro
1Excel para Iniciantes2015-01-10
2Oratória2017-02-20
3Retenção de impostos2018-03-15
Tabela 9. Tabela curso_aperfeicoamento

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
Tabela 10. Resultado da consulta trazendo todos os cursos das três tabelas