MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Objaśnienie operatora MariaDB UNION

W MariaDB UNION operator łączy wyniki z wielu SELECT zestawienia w jeden zestaw wyników.

Składnia

Oficjalna składnia wygląda następująco:

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

Od wersji MariaDB 10.4.0 do określenia pierwszeństwa można użyć nawiasów.

Przykład

Załóżmy, że mamy następujące tabele:

SELECT * FROM Teachers;
SELECT * FROM Students;

Wynik:

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

Możemy użyć UNION operator, aby zwrócić wszystkich nauczycieli i uczniów:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Wynik:

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

Domyślnie UNION operator domyślnie stosuje DISTINCT operacja. Innymi słowy, domyślnie zwraca tylko różne wartości. Tak więc powyższe wyniki zawierają tylko po jednym z Warrena, Cathy i Billa. Dzieje się tak pomimo faktu, że połączone tabele faktycznie zawierają dwa Warrens, dwie Cathys i trzech Billów (jest dwóch nauczycieli o imieniu Cathy, nauczyciel i klient o imieniu Warren i dwóch o imieniu Bill, a także jeden uczeń o imieniu Bill).

Oto przykład, który jawnie używa DISTINCT operator:

SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;

Wynik:

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

Więc otrzymujemy ten sam wynik, który otrzymaliśmy bez DISTINCT operatora.

Dołącz duplikaty

Możemy użyć ALL słowo kluczowe, aby uwzględnić zduplikowane wartości w wynikach:

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Wynik:

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

Tym razem otrzymaliśmy dwanaście wierszy zamiast ośmiu, które otrzymaliśmy w naszym pierwszym przykładzie.

Widzimy, że obie Cathys zostały zwrócone i wszystkie trzy rachunki zostały zwrócone.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ASCII() działa w MariaDB

  2. DBaaS, chmura i przejrzysty routing zapytań

  3. Jak działa operator Modulo w MariaDB

  4. ClusterControl — Zaawansowane zarządzanie kopiami zapasowymi — mariabackup Część I

  5. Jak naprawić błąd przekroczenia limitu czasu oczekiwania na blokadę w MySQL?