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!
Boa tarde, preciso fazer um pivot de dados no mysql poderia me ajudar?
Boa noite, como eu faço para agrupar os campos e somar também. Tenho que unir duas tabelas, elas tem campos em comum, que eu agrupo com Group By, mas tem um campo que tem valores e eu não estou conseguindo somar.
Bomn dia. Eu fiz o seu curso na UDEMY e adorei. Montei um banco de dados e preciso de uma sintaxe para fazer uma consulta usando o Inner Join, mais de duas tabelas, procurando com a cláusula WHERE palavras compostas. Por Exemplo:
“Filosofia da Ciência”. Acontece que a consulta busca tanto telas ligados à Ciência, quanto temas ligados à Filosofia. Você teria alguma sugestão para buscar a expressão, saomente quando ela for composta, como no exemplo acia?
att
Geraldo
Olá Geraldo!
Pode postar aqui o código completo da consulta que você usou, para eu entender melhor o que acontece?