MariaDB
 sql >> Database >  >> RDS >> MariaDB

Spiegazione dell'operatore MariaDB UNION

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.