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.