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.