Operador UNION em MySQL – Combinar resultados de duas ou mais consultas.

Operador UNION em MySQL

Assim como uma JOIN, uma operação UNION permite combinar dados provenientes de duas ou mais tabelas (ou da mesma tabela, com condições diferentes). Porém, em vez de combinar as colunas dessas tabelas, a UNION combina as linhas de dois ou mais conjuntos de resultados. Imagine que um INNER JOIN é uma operação de intersecção entre conjuntos, e que o UNION é uma operação de soma de conjuntos.

Assim, uma UNION combina (“une”) duas ou mais declarações SELECT. O resultado de cada SELECT deve possuir o mesmo número de colunas, e o tipo de dado de cada coluna correspondente deve ser compatível.

Para ordenar o resultado de uma operação UNION, podemos usar uma declaração ORDER BY após o último SELECT codificado. Neste ORDER BY somente é possível usar os nomes de colunas que foram declarados no primeiro SELECT da declaração UNION completa. Os nomes de colunas no resultado final são tirados deste primeiro SELECT.

Sintaxe do UNION

SELECT declaração_1
UNION [ALL}
SELECT declaração_2
UNION [ALL}
SELECT declaração_3 ...
[ORDER BY colunas]

Por padrão, o operador UNION elimina resultados duplicados; para inclui-los no resultado final, acrescente a palavra ALL.

Exemplos

Exemplo 01

  • Retornar nomes de livros, preços e assuntos dos livros.
  • Caso o assunto seja Eletrônica, mostrar o preço acrescido de 15% em seu valor.
  • Caso o livro custe mais de 200 reais, descontar 10% em seu valor.
  • Ordenar por preço, do mais caro para o mais barato.
SELECT L.NomeLivro Livro, L.PrecoLivro 'Preço Normal', L.PrecoLivro * 0.90 'Preço Ajustado', A.Assunto
FROM tbl_Livros L INNER JOIN tbl_Assuntos A
ON L.IdAssunto = A.IdAssunto
WHERE L.PrecoLivro > 200.00
UNION
SELECT L.NomeLivro Livro, L.PrecoLivro 'Preço Normal', L.PrecoLivro * 1.15 'Preço Ajustado', A.Assunto
FROM tbl_Livros L INNER JOIN tbl_Assuntos A
ON L.IdAssunto = A.IdAssunto
WHERE A.Assunto = 'Eletrônica'
ORDER BY 'Preço Ajustado' DESC;

Exemplo 02

  • Retornar nomes de livros e preços dos livros.
  • Caso o preço do livro seja igual ou superior a R$ 150,00, mostrar a mensagem “Livro Caro” em uma coluna à direita no resultado da consulta.
  • Caso contrário, mostrar a mensagem “Preço Razoável”
  • Ordenar por preço, do mais barato para o mais caro.
SELECT NomeLivro Livro, PrecoLivro Preço, 'Livro Caro' Resultado
FROM tbl_Livros
WHERE PrecoLivro >= 150.00
UNION
SELECT NomeLivro Livro, PrecoLivro Preço, 'Preço Razoável' Resultado
FROM tbl_Livros
WHERE PrecoLivro < 150.00
ORDER BY Preço;

Exemplo 03

Por padrão, o MySQL não possui suporte a FULL OUTER JOIN (junção externa completa). Porém, podemos simular um FULL OUTER JOIN usando UNION, como no exemplo abaixo.

SELECT * FROM tbl_Assuntos
LEFT JOIN tbl_Livros
ON tbl_Livros.IdAssunto = tbl_Assuntos.IdAssunto
UNION
SELECT * FROM tbl_Assuntos
RIGHT JOIN tbl_Livros
ON tbl_Livros.IdAssunto = tbl_Assuntos.IdAssunto;

Efetuamos um LEFT JOIN entre duas tabelas, um RIGHT JOIN e então unimos os dois resultados usando UNION. Pronto! FULL OUTER JOIN em MySQL!

 

Sobre Fábio dos Reis (1364 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*