Algumas vezes não conseguimos obter os resultados que desejamos com uma só consulta no banco de dados. Para resolver esse problema existem os operadores UNION e UNION ALL.
Vamos a um exemplo:
(SELECT * FROM clientes WHERE idcidade = 1 LIMIT 3) UNION (SELECT * FROM clientes WHERE idcidade = 5 LIMIT 3) UNION (SELECT * FROM clientes WHERE idcidade = 8 LIMIT 3)
No exemplo acima ele vai retornar de uma só vez o mesmo que retornaria se você fizesse três selects diferentes.
Você também pode utilizar UNION ALL ao invés de UNION. A diferença é que ele vai retornar todos os resultados, inclusive as linhas repetidas.
Se não tiver como serem retornados registros duplicados, é mais vantagem usar o UNION ALL, que é mais rápido.
Observe que esse operador torna a consulta extremamente mais lenta, e ele só deve ser usados em casos bem específicos. Use com cautela.
outubro 17th, 2012 on 22:43
Obrigado pelo código e pelo conselho.
Me ajudou mesmo. Abraços.
novembro 23rd, 2013 on 07:50
Putz. Me ajudou bastante também. Fiquei bastante tempo procurando por algo assim. Obrigado!
outubro 9th, 2014 on 15:28
Vlw cara. Essa UNION realmente faz a força
janeiro 24th, 2016 on 14:17
Obrigado, camarada! me ajudou bastante =)
junho 29th, 2016 on 11:00
obrigado =)
junho 3rd, 2017 on 19:59
Boa noite será que você poderia dar uma ajuda?
Tenho uma tabela cliente e gostaria de selecionar e cotar quanto clientes são do sexo M e F.
Estou tentando asim:
select CLI_SEXO, count(*) TOTAL_M, count(*) TOTAL_F from cliente group by CLI_SEXO
e me retorna:
CLI_SEXO TOTAL_M TOTAL_F
F 220 220
M 120 120
Eu queria pegar estes dois valores separados, mas não consegui, nem usado union.
Desde já obrigado pela atenção.
agosto 15th, 2017 on 15:16
Fala Adilson.
Só com o GROUP BY não funciona?
SELECT CLI_SEXO, COUNT(*)
FROM cliente
GROUP BY CLI_SEXO