sql >> Databasteknik >  >> RDS >> MariaDB

MariaDB UNION Operatör förklaras

I MariaDB, UNION operatorn kombinerar resultaten från flera SELECT uttalanden till en enda resultatuppsättning.

Syntax

Den officiella syntaxen ser ut så här:

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

Från MariaDB 10.4.0 kan parenteser användas för att ange prioritet.

Exempel

Anta att vi har följande 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 använda UNION operatör för att returnera alla lärare och 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 är UNION operatorn tillämpar implicit en DISTINCT drift. Med andra ord returnerar den endast distinkta värden som standard. Så ovanstående resultat innehåller bara ett vardera av Warren, Cathy och Bill. Detta trots att de kombinerade tabellerna faktiskt innehåller två Warrens, två Cathys och tre Bills (det finns två lärare som heter Cathy, en lärare och en kund som heter Warren, och två som heter Bill, samt en elev som heter Bill).

Här är ett exempel som uttryckligen använder 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 samma resultat som vi fick utan DISTINCT operatör.

Inkludera dubbletter

Vi kan använda ALL sökord för att inkludera dubbletter av värden i resultaten:

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)

Den här gången fick vi tolv rader istället för de åtta som vi fick i vårt första exempel.

Vi kan se att båda Cathys returnerades och alla tre räkningarna returnerades.


  1. Hur listar man poster med datum från de senaste 10 dagarna?

  2. Hur skriver man en fråga som gör något som liknar MySQL:s GROUP_CONCAT i Oracle?

  3. PERIOD_DIFF() Exempel – MySQL

  4. Hur man återställer MySQL root-lösenord