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

MariaDB UNION Operatør forklaret

I MariaDB er UNION operator kombinerer resultaterne fra flere SELECT udsagn i et enkelt resultatsæt.

Syntaks

Den officielle syntaks lyder sådan her:

SELECT ...
UNION [ALL | DISTINCT] SELECT ...
[UNION [ALL | DISTINCT] SELECT ...]
[ORDER BY [column [, column ...]]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]

Fra MariaDB 10.4.0 kan parenteser bruges til at angive forrang.

Eksempel

Antag, at vi har følgende tabeller:

SELECT * FROM Teachers;
SELECT * FROM Students;

Resultat:

+-----------+-------------+
| 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        |
+-----------+-------------+

Vi kan bruge UNION operatør for at returnere alle lærere og elever:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultat:

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

Som standard er UNION operatør anvender implicit en DISTINCT operation. Med andre ord returnerer det kun distinkte værdier som standard. Så ovenstående resultater indeholder kun én af hver af Warren, Cathy og Bill. Dette er på trods af, at de kombinerede tabeller faktisk indeholder to Warrens, to Cathys og tre Bills (der er to lærere, der hedder Cathy, en lærer og en kunde, der hedder Warren, og to, der hedder Bill, samt en elev, der hedder Bill).

Her er et eksempel, der eksplicit bruger DISTINCT operatør:

SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;

Resultat:

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

Så vi får det samme resultat, som vi fik uden DISTINCT operatør.

Medtag dubletter

Vi kan bruge ALL søgeord for at inkludere duplikerede værdier i resultaterne:

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Resultat:

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

Denne gang fik vi tolv rækker i stedet for de otte, som vi fik i vores første eksempel.

Vi kan se, at begge Cathys blev returneret, og alle tre regninger blev returneret.


  1. Hvad er den maksimale længde af data, jeg kan lægge i en BLOB-kolonne i MySQL?

  2. Kragefodsnotation

  3. Java Stored Procedure vs PL/SQL Stored Procedure

  4. Chen Notation