MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Explicação do operador MariaDB UNION


No MariaDB, o UNION operador combina os resultados de vários SELECT instruções em um único conjunto de resultados.

Sintaxe


A sintaxe oficial é assim:
SELECT ...
UNION [ALL | DISTINCT] SELECT ...
[UNION [ALL | DISTINCT] SELECT ...]
[ORDER BY [column [, column ...]]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]

A partir do MariaDB 10.4.0, os parênteses podem ser usados ​​para especificar a precedência.

Exemplo


Suponha que temos as seguintes tabelas:
SELECT * FROM Teachers;
SELECT * FROM Students;

Resultado:
+-----------+-------------+
| TeacherId | TeacherName |
+-----------+-------------+
|         1 | Warren      |
|         2 | Ben         |
|         3 | Cathy       |
|         4 | Cathy       |
|         5 | Bill        |
|         6 | Bill        |
+-----------+-------------+

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|         1 | Faye        |
|         2 | Jet         |
|         3 | Spike       |
|         4 | Ein         |
|         5 | Warren      |
|         6 | Bill        |
+-----------+-------------+

Podemos usar o UNION operador para devolver todos os professores e alunos:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultado:
+-------------+
| TeacherName |
+-------------+
| Warren      |
| Ben         |
| Cathy       |
| Bill        |
| Faye        |
| Jet         |
| Spike       |
| Ein         |
+-------------+
8 rows in set (0.003 sec)

Por padrão, o UNION operador aplica implicitamente um DISTINCT Operação. Em outras palavras, ele retorna apenas valores distintos por padrão. Portanto, os resultados acima contêm apenas um de Warren, Cathy e Bill. Isso apesar do fato de que as tabelas combinadas na verdade contêm dois Warrens, dois Cathys e três Bills (há dois professores chamados Cathy, um professor e um cliente chamados Warren, e dois chamados Bill, bem como um aluno chamado Bill).

Aqui está um exemplo que usa explicitamente o DISTINCT operador:
SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;

Resultado:
+-------------+
| TeacherName |
+-------------+
| Warren      |
| Ben         |
| Cathy       |
| Bill        |
| Faye        |
| Jet         |
| Spike       |
| Ein         |
+-------------+
8 rows in set (0.004 sec)

Assim, obtemos o mesmo resultado que obtivemos sem o DISTINCT operador.

Incluir duplicatas


Podemos usar o ALL palavra-chave para incluir valores duplicados nos resultados:
SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Resultado:
+-------------+
| TeacherName |
+-------------+
| Warren      |
| Ben         |
| Cathy       |
| Cathy       |
| Bill        |
| Bill        |
| Faye        |
| Jet         |
| Spike       |
| Ein         |
| Warren      |
| Bill        |
+-------------+
12 rows in set (0.002 sec)

Desta vez, obtivemos doze linhas em vez das oito que obtivemos em nosso primeiro exemplo.

Podemos ver que ambas as Cathys foram devolvidas e todos os três Bills foram devolvidos.