In MariaDB, il UNION
l'operatore combina i risultati di più SELECT
dichiarazioni in un unico set di risultati.
Sintassi
La sintassi ufficiale è questa:
SELECT ...
UNION [ALL | DISTINCT] SELECT ...
[UNION [ALL | DISTINCT] SELECT ...]
[ORDER BY [column [, column ...]]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
Da MariaDB 10.4.0, le parentesi possono essere utilizzate per specificare la precedenza.
Esempio
Supponiamo di avere le seguenti tabelle:
SELECT * FROM Teachers;
SELECT * FROM Students;
Risultato:
+-----------+-------------+ | 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 | +-----------+-------------+
Possiamo usare il UNION
operatore per restituire tutti gli insegnanti e gli studenti:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Risultato:
+-------------+ | TeacherName | +-------------+ | Warren | | Ben | | Cathy | | Bill | | Faye | | Jet | | Spike | | Ein | +-------------+ 8 rows in set (0.003 sec)
Per impostazione predefinita, il UNION
l'operatore applica implicitamente un DISTINCT
operazione. In altre parole, restituisce solo valori distinti per impostazione predefinita. Quindi i risultati di cui sopra contengono solo uno ciascuno di Warren, Cathy e Bill. Questo nonostante il fatto che le tabelle combinate contengano effettivamente due Warren, due Cathy e tre Bill (ci sono due insegnanti chiamate Cathy, un'insegnante e un cliente chiamato Warren, e due chiamate Bill, oltre a uno studente chiamato Bill).
Ecco un esempio che utilizza esplicitamente il DISTINCT
operatore:
SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;
Risultato:
+-------------+ | TeacherName | +-------------+ | Warren | | Ben | | Cathy | | Bill | | Faye | | Jet | | Spike | | Ein | +-------------+ 8 rows in set (0.004 sec)
Quindi otteniamo lo stesso risultato che abbiamo ottenuto senza DISTINCT
operatore.
Includi duplicati
Possiamo usare il ALL
parola chiave per includere valori duplicati nei risultati:
SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;
Risultato:
+-------------+ | TeacherName | +-------------+ | Warren | | Ben | | Cathy | | Cathy | | Bill | | Bill | | Faye | | Jet | | Spike | | Ein | | Warren | | Bill | +-------------+ 12 rows in set (0.002 sec)
Questa volta abbiamo ottenuto dodici righe invece delle otto che abbiamo ottenuto nel nostro primo esempio.
Possiamo vedere che entrambi i Cathy sono stati restituiti e tutti e tre i Bill sono stati restituiti.