sql >> Databáze >  >> RDS >> MariaDB

Vysvětlení operátora MariaDB UNION

V MariaDB, UNION operátor kombinuje výsledky z více SELECT příkazy do jedné sady výsledků.

Syntaxe

Oficiální syntaxe vypadá takto:

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

Od MariaDB 10.4.0 lze k určení priority použít závorky.

Příklad

Předpokládejme, že máme následující tabulky:

SELECT * FROM Teachers;
SELECT * FROM Students;

Výsledek:

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

Můžeme použít UNION operátor vrátit všechny učitele a studenty:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Výsledek:

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

Ve výchozím nastavení UNION operátor implicitně aplikuje DISTINCT úkon. Jinými slovy, ve výchozím nastavení vrací pouze odlišné hodnoty. Výše uvedené výsledky tedy obsahují pouze jeden Warren, Cathy a Bill. A to i přesto, že kombinované stoly ve skutečnosti obsahují dva Warreny, dvě Cathy a tři Billy (jsou tam dva učitelé Cathy, učitel a zákazník jménem Warren a dva Bill a jeden student Bill).

Zde je příklad, který explicitně používá DISTINCT operátor:

SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;

Výsledek:

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

Dostaneme tedy stejný výsledek, jaký jsme dostali bez DISTINCT operátor.

Zahrnout duplikáty

Můžeme použít ALL klíčové slovo pro zahrnutí duplicitních hodnot do výsledků:

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Výsledek:

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

Tentokrát jsme dostali dvanáct řádků místo osmi, které jsme dostali v našem prvním příkladu.

Vidíme, že obě Cathy byly vráceny a všechny tři účty byly vráceny.


  1. Je bezpečné ukládat uživatelská jména a hesla do databáze?

  2. Začínáme s aplikací Oracle Application Express-APEX

  3. SQL Server dotaz k nalezení všech oprávnění/přístupu pro všechny uživatele v databázi

  4. Vložte Python Dictionary pomocí Psycopg2