mysql union comprehensive tutorial with union examples
Este tutorial explica o comando MySQL UNION, seus tipos, Union vs Union All, e exemplos para combinar dados de 2 ou mais consultas:
MySQL UNION é usado para combinar resultados de múltiplas consultas SELECT em um único conjunto de resultados. Também é possível ter todas as consultas / operações complexas nas consultas SELECT e realizar UNION com outras instruções SELECT para produzir um resultado combinado.
como remover um índice de um array java
A característica padrão de uma instrução UNION seria remover as entradas ou linhas duplicadas do conjunto de linhas resultante; no entanto, ela também fornece maneiras de buscar os registros duplicados usando a cláusula UNION ALL.
O que você aprenderá:
- Compreendendo a UNIÃO por meio da teoria dos conjuntos
- Qual problema o MySQL UNION resolve
- MySQL UNION Vs UNION ALL
- Conclusão
Compreendendo a UNIÃO por meio da teoria dos conjuntos
A operação UNION pode ser muito bem compreendida a partir dos princípios da Teoria SET.
Suponha que temos as tabelas A e B representadas pelos conjuntos abaixo e eles têm alguns dados sobrepostos (ou também podem ser totalmente não relacionados) - UNION incluirá a combinação de dados de ambas as tabelas.
Vejamos um exemplo em que os conjuntos A e B têm alguns elementos comuns. O UNION conterá todos os valores do conjunto A e B com os valores duplicados omitidos.
Agora, e se os conjuntos A e B forem separados e não contiverem nenhum elemento comum? Aqui também, UNION retornará o mesmo resultado.
Vamos discutir o cenário em que existem elementos sobrepostos entre os conjuntos e queremos que os valores duplicados também apareçam no conjunto de resultados.
O MySQL fornece uma maneira de fazer isso usando a opção UNION ALL conforme mostrado na imagem abaixo.
Qual problema o MySQL UNION resolve
MySQL UNION é usado quando você tem dados semelhantes em 2 ou mais tabelas e deseja ver uma visão combinada dos dados contidos em ambas as tabelas, em vez de executar instruções SELECT para tabelas individuais.
Por exemplo - Suponha que haja 2 tabelas - Empregado e Aluna. E você está trabalhando em um banco de dados de pessoas que deseja apenas um nome, idade e data de nascimento para todos os funcionários e alunos.
Sem UNION, você precisará executar consultas SELECT separadas para ambas as tabelas e, em seguida, realizar o cálculo desejado com o conjunto de resultados obtido.
Sintaxe do MySQL UNION
As consultas abaixo retornarão uma UNION de 2 ou mais de 2 instruções SELECT.
SELECT {column1}, {column2} FROM {table1} UNION (ALL | DISTINCT) SELECT {column3}, {column4} FROM {table2} UNION (ALL | DISTINCT) SELECT ...
Vamos tentar ver os diferentes componentes da sintaxe
- Podemos ver que é possível combinar várias consultas SELECT com UNION para obter o conjunto de linhas resultante.
- Nome da coluna e tipos de dados: é importante entender que as colunas que queremos combinar devem ter o mesmo tipo de dados ou compatível. Por exemplo: se você tiver a coluna1 como STRING, a coluna3 também deverá ser STRING (ou compatível com STRING).
- Os nomes e posições das colunas são determinados a partir da primeira instrução SELECT na consulta UNION. Por exemplo, na sintaxe acima: coluna1 e coluna2 são nomeados como colunas de cabeçalho no conjunto de resultados e os valores de coluna3 e coluna4 são mapeados para coluna1 e coluna2, respectivamente.
- Os resultados de uma consulta UNION por padrão remove entradas duplicadas. Por exemplo, neste caso, se houver uma entrada duplicada que tenha uma correspondência exata e os mesmos valores para a coluna1 e coluna2, essas linhas serão omitidas do conjunto de resultados.
Se duplicatas forem desejadas, então podemos usar a opção ‘TODOS’ junto com o UNION.
O uso de DISTINTO está implícito por padrão. Observe que também pode ser especificado explicitamente para ter mais legibilidade.
Vamos ver um exemplo de amostra de uma consulta UNION.
Suponha que haja 2 tabelas - funcionário e aluno - cada uma com informações pessoais.
CREATE TABLE employee (id INT PRIMARY KEY, name VARCHAR(100), age INT, dob DATE, department VARCHAR(100)); CREATE TABLE student (id INT PRIMARY KEY, name VARCHAR(100), age INT, dob DATE, department VARCHAR(100));
Agora, insira alguns dados fictícios em ambas as tabelas, conforme mostrado abaixo:
INSERT INTO employee values (1,'Darren', 32, '1988-05-20', 'ENGINEERING'), (2,'Abhishek', 28, '1992-05-20', 'ACCOUNTING'), (3,'Amit', 30, '1990-09-20', 'ENGINEERING'), (4,'Steven', 40, '1980-05-21', 'HUMAN RESOURCES'), (5,'Kartik', 20, '2000-05-12', 'TRAINEE'); ---------------------------------------------- INSERT INTO student values (1,'Akash', 22, '1998-05-17', 'COMPUTER'), (2,'Ian', 26, '1994-06-18', 'COMPUTER'), (3,'Shirley', 19, '2001-11-20', 'MECHANICAL'), (4,'Joana', 21, '1999-05-21', 'ELECTRONICS'), (5,'Kartik', 20, '2000-05-12', 'COMPUTER');
Como você pode ver acima, adicionamos intencionalmente uma linha com os mesmos atributos de nome, idade e data de nascimento.
Vamos agora ver como podemos combinar os dados nessas 2 tabelas usando comandos UNION. Estaremos consultando o nome de usuário e idade de ambas as tabelas.
UNIÃO Simples
Consulta:
SELECT name, age FROM employee UNION SELECT name, age FROM student;
Você verá 9 registros no resultado (o que significa que a consulta acima omitiu a entrada duplicada).
Resultado:
nome | idade |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | vinte |
Akash | 22 |
Shirley | 19 |
Joana | vinte e um |
UNION Com UNION ALL
Usar UNION com a cláusula ALL garantirá que as entradas duplicadas também sejam exibidas.
Consulta:
SELECT name, age FROM employee UNION ALL SELECT name, age FROM student;
Resultado:
nome | idade |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | vinte |
Akash | 22 |
Shirley | 19 |
Joana | vinte e um |
Kartik | vinte |
UNION com condição
Vamos adicionar condições às instruções SELECT onde queremos dados dos funcionários com menos de 30 anos e alunos com menos de 25.
Consulta:
SELECT name, age FROM employee where age <30 UNION SELECT name, age FROM student where age < 25;
Resultado:
nome | idade |
---|---|
Amit | 30 |
Abhishek | 28 |
Kartik | vinte |
Akash | 22 |
Shirley | 19 |
Joana | vinte e um |
Como você pode ver acima, o conjunto de resultados inclui o resultado combinado com as condições individuais do SELECT validadas.
Resultados de pedidos UNION
Os resultados de uma consulta UNION não são ordenados por padrão.
Para impor uma ordenação por uma coluna existente no conjunto resultante, uma cláusula ORDER BY pode ser especificada no final do comando UNION.
Vamos usar os mesmos dados de funcionário / aluno e ordenar os resultados UNION em ordem crescente por idade.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY age asc
Resultado:
nome | idade |
---|---|
Shirley | 19 |
Kartik | vinte |
Joana | vinte e um |
Akash | 22 |
Ian | 26 |
Abhishek | 28 |
Darren | 32 |
Steven | 40 |
O conjunto de resultados acima é ordenado por valores de idade em ordem crescente. Também podemos usar apelidos de coluna para se referir às colunas na cláusula ORDER BY.
Por exemplo: - Uma consulta como a abaixo também produzirá o mesmo resultado.
SELECT name as customer_name, age as customer_age FROM employee UNION SELECT name, age FROM student ORDER BY customer_age asc
Existe outra maneira de usar a cláusula ORDER BY, apenas mencionando a posição da coluna em vez do nome da coluna.
Por exemplo: Na consulta UNION acima, estamos selecionando nome e idade, o que implica que essas colunas estão nas posições 1 e 2, respectivamente.
Portanto, para ORDER BY age, podemos simplesmente especificar a posição em vez do nome da coluna real.
Portanto, a consulta abaixo também produzirá o mesmo resultado.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY 2 asc
MySQL UNION Vs UNION ALL
O MySQL fornece 2 variantes de UNION, ou seja, UNION DISTINCT e UNION ALL
Observe que DISTINCT está implícito por padrão, mesmo que não seja declarado.
A principal diferença entre os dois é que UNION ALL permite combinar e retornar linhas duplicadas também, enquanto UNION apenas retorna as linhas combinadas removendo duplicatas.
A tabela abaixo explica os detalhes:
Parâmetro | UNIÃO | UNION ALL |
---|---|---|
Definição | É equivalente a UNION DISTINCT - ignora linhas duplicadas de dados enquanto retorna o resultado | Retorna todas as linhas incluindo duplicatas |
Sintaxe | SELECIONE {columnList} DE {table1} UNIÃO SELECIONE {columnList} FROM {table2} | SELECIONE {columnList} DE {table1} UNION ALL SELECIONE {columnList} FROM {table2} |
Requisitos de dados | Os dados combinados devem ter tipos de dados semelhantes e devem ser buscados na mesma ordem quando buscados em várias tabelas | Igual a UNION |
perguntas frequentes
P # 1) O Union é mais rápido do que o JOIN?
Responda: UNION e JOINs são usados para praticamente 2 finalidades diferentes.
Tecnicamente falando, UNION é muito mais rápido do que JOIN (especialmente para grandes conjuntos de dados), pois UNION apenas concatena linhas de dados das instruções SELECT individuais.
P # 2) O que é o operador UNION ALL?
Responda: Semelhante a UNION, o operador UNION ALL também retorna UNION entre 2 consultas SELECT, mas a diferença é que ele também contém as linhas / entradas duplicadas.
P # 3) Qual é a diferença entre UNION e JOIN?
Responda: UNION e JOIN são usados para combinar dados de 2 ou mais tabelas. Mas há uma grande diferença em termos do conjunto de resultados obtido e a forma como os dados são coletados.
As semelhanças e diferenças entre JOIN e UNION estão listadas na tabela abaixo:
UNIÃO | JUNTE-SE |
---|---|
Combina dados de várias tabelas | Combina dados de várias tabelas |
Não requer nenhuma condição específica para coletar ou combinar dados | JOIN funciona em uma condição JOIN que é necessária para validar os dados provenientes do conjunto de resultados |
Os dados de tabelas diferentes são considerados como linhas diferentes do conjunto de resultados | Os dados de diferentes tabelas são combinados em uma única linha - por exemplo, uma linha no conjunto de resultados pode conter 2 colunas da tabela 1, 3 colunas da tabela 2, etc., dependendo da condição JOIN e da consulta SELECT |
UNIONs são simples e diretas | JOINS requerem condições complexas e dependendo das necessidades, vários tipos de junções como INNER / OUTER etc podem ser usados. |
Conclusão
Neste tutorial, aprendemos sobre como usar MySQL UNION para combinar dados de 2 ou mais instruções SELECT.
A instrução UNION é realmente útil para agrupar dados semelhantes de grandes conjuntos de tabelas diferentes e, em seguida, executar uma análise nos dados combinados.
O comando UNION também oferece suporte a uma cláusula ALL, que também permite a busca de registros duplicados.
Leitura recomendada
- O que é MySQL e por que é usado?
- Diferença entre SQL Vs MySQL Vs SQL Server (com exemplos)
- Junção Interna Vs Junção Externa: Diferença Exata com Exemplos
- Tutorial do MySQL JOIN: interno, externo, cruzado, esquerdo, direito e próprio
- Tutorial de criação de visualização do MySQL com exemplos de código
- Tutorial de criação de tabela MySQL com exemplos
- Tutorial de instrução de atualização do MySQL - Atualizar sintaxe de consulta e exemplos
- As 40 melhores perguntas e respostas para entrevistas em MySQL (2.021 perguntas)