UNIÃO MySQL

Resumo : neste tutorial, você aprenderá como usar UNIONo operador MySQL para combinar dois ou mais conjuntos de resultados de várias SELECTinstruções em um único conjunto de resultados.

UNION Operador MySQL

O operador MySQL UNIONpermite combinar dois ou mais conjuntos de resultados de consultas em um único conjunto de resultados. O seguinte ilustra a sintaxe do UNIONoperador:

SELECT column_list
UNION [DISTINCT | ALL]
SELECT column_list
UNION [DISTINCT | ALL]
SELECT column_list
...Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para combinar o conjunto de resultados de duas ou mais consultas usando o UNIONoperador, estas são as regras básicas que você deve seguir:

  • Primeiro, o número e a ordem das colunas que aparecem em todas  SELECTas declarações devem ser iguais.
  • Em segundo lugar, os tipos de dados das colunas devem ser iguais ou compatíveis.

Por padrão, o UNIONoperador remove  linhas duplicadas  mesmo que você não especifique o DISTINCToperador explicitamente.

Vamos ver as seguintes tabelas de exemplo: t1e t2:

DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;

CREATE TABLE t1 (
    id INT PRIMARY KEY
);

CREATE TABLE t2 (
    id INT PRIMARY KEY
);

INSERT INTO t1 VALUES (1),(2),(3);
INSERT INTO t2 VALUES (2),(3),(4);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A instrução a seguir combina conjuntos de resultados retornados de t1tabelas t2:

SELECT id
FROM t1
UNION
SELECT id
FROM t2;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O conjunto de resultados final contém os valores distintos de conjuntos de resultados separados retornados pelas consultas:

+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
+----+
4 rows in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Como as linhas com valores 2 e 3 são duplicadas, UNIONelas foram removidas e mantidas apenas valores exclusivos.

O diagrama de Venn a seguir ilustra a união de dois conjuntos de resultados provenientes de tabelas t1e t2:

UNIÃO MySQL

Se você usar UNION ALLexplicitamente, as linhas duplicadas, se disponíveis, permanecerão no resultado. Como UNION ALLnão precisa lidar com duplicatas, seu desempenho é mais rápido que o  UNION DISTINCT .

SELECT id
FROM t1
UNION ALL
SELECT id
FROM t2;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  2 |
|  3 |
|  4 |
+----+
6 rows in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Como você pode ver, as duplicatas aparecem no conjunto de resultados combinados devido à  UNION ALLoperação.

 UNIONvs.JOIN

JOINcombina conjuntos de resultados horizontalmente, e  UNIONacrescenta conjunto de resultados verticalmente. A imagem a seguir ilustra a diferença entre UNIONe JOIN:

MySQL UNION vs JOIN

Exemplos de MySQL UNIONe alias de coluna

Usaremos as tabelas customerse employeesno banco de dados de exemplo  para a demonstração:

Suponha que você queira combinar o nome e o sobrenome de funcionários e clientes em um único conjunto de resultados. Você pode usar o UNIONoperador da seguinte maneira:

SELECT 
    firstName, 
    lastName
FROM
    employees 
UNION 
SELECT 
    contactFirstName, 
    contactLastName
FROM
    customers;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Exemplo UNION do MySQL

Como você pode ver na saída, o MySQL UNIONusa os nomes das colunas da primeira SELECTinstrução para os títulos das colunas da saída.

Se quiser usar outros títulos de coluna, você precisará usar aliases de coluna explicitamente na primeira SELECTinstrução, conforme mostrado no exemplo a seguir:

SELECT 
    CONCAT(firstName,' ',lastName) fullname
FROM
    employees 
UNION SELECT 
    CONCAT(contactFirstName,' ',contactLastName)
FROM
    customers;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

MySQL UNION com exemplo de alias de coluna

Este exemplo usa o cabeçalho da coluna da primeira consulta para a saída. Ele usa a CONCAT()função para concatenar nome, espaço e sobrenome em um nome completo.

MySQL UNIONeORDER BY

Se quiser classificar o conjunto de resultados de uma união, use uma ORDER BYcláusula na última  SELECTinstrução, conforme mostrado no exemplo a seguir:

SELECT 
    concat(firstName,' ',lastName) fullname
FROM
    employees 
UNION SELECT 
    concat(contactFirstName,' ',contactLastName)
FROM
    customers
ORDER BY fullname;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Exemplo MySQL UNION e ORDER BY

Observe que se você colocar a ORDER BYcláusula em cada SELECTinstrução, isso não afetará a ordem das linhas no conjunto de resultados final.

Para diferenciar entre funcionários e clientes, você pode adicionar uma coluna conforme mostrado na consulta a seguir:

SELECT 
    CONCAT(firstName, ' ', lastName) fullname, 
    'Employee' as contactType
FROM
    employees 
UNION SELECT 
    CONCAT(contactFirstName, ' ', contactLastName),
    'Customer' as contactType
FROM
    customers
ORDER BY 
    fullnameLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
União MySQL com uma coluna personalizada

O MySQL também fornece uma opção alternativa para classificar um conjunto de resultados com base na posição da coluna usando a ORDER BYseguinte cláusula:

SELECT 
    CONCAT(firstName,' ',lastName) fullname
FROM
    employees 
UNION SELECT 
    CONCAT(contactFirstName,' ',contactLastName)
FROM
    customers
ORDER BY 1;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

No entanto, não é uma boa prática classificar o conjunto de resultados pela posição da coluna.

Neste tutorial, você aprendeu como usar UNIONa instrução MySQL para combinar dados de várias consultas em um único conjunto de resultados.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *