sql >> Database >  >> RDS >> MariaDB

MariaDB UNION-operator uitgelegd

In MariaDB, de UNION operator combineert de resultaten van meerdere SELECT uitspraken in een enkele resultaatset.

Syntaxis

De officiële syntaxis gaat als volgt:

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

Vanaf MariaDB 10.4.0 kunnen haakjes worden gebruikt om de prioriteit te specificeren.

Voorbeeld

Stel dat we de volgende tabellen hebben:

SELECT * FROM Teachers;
SELECT * FROM Students;

Resultaat:

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

We kunnen de UNION . gebruiken operator om alle docenten en studenten terug te sturen:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultaat:

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

Standaard is de UNION operator past impliciet een DISTINCT toe operatie. Met andere woorden, het retourneert standaard alleen afzonderlijke waarden. Dus de bovenstaande resultaten bevatten slechts één van Warren, Cathy en Bill. Dit ondanks het feit dat de gecombineerde tabellen eigenlijk twee Warrens, twee Cathys en drie Bills bevatten (er zijn twee docenten genaamd Cathy, een docent en een klant genaamd Warren, en twee genaamd Bill, evenals een student genaamd Bill).

Hier is een voorbeeld dat expliciet de DISTINCT . gebruikt operator:

SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;

Resultaat:

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

We krijgen dus hetzelfde resultaat als zonder de DISTINCT telefoniste.

Duplicaten opnemen

We kunnen de ALL . gebruiken zoekwoord om dubbele waarden in de resultaten op te nemen:

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Resultaat:

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

Deze keer kregen we twaalf rijen in plaats van de acht die we in ons eerste voorbeeld kregen.

We kunnen zien dat beide Cathy's zijn geretourneerd en alle drie de rekeningen zijn geretourneerd.


  1. Prioriteit wijzigen voor gelijktijdig programma

  2. PostgreSQL-kolom 'foo' bestaat niet

  3. Wat is een scalaire UDF in SQL Server?

  4. De binnenkant van WITH ENCRYPTIE