В MariaDB, UNION
оператор комбинира резултатите от множество SELECT
изрази в един набор от резултати.
Синтаксис
Официалният синтаксис е така:
SELECT ...
UNION [ALL | DISTINCT] SELECT ...
[UNION [ALL | DISTINCT] SELECT ...]
[ORDER BY [column [, column ...]]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
От MariaDB 10.4.0, скоби могат да се използват за определяне на приоритет.
Пример
Да предположим, че имаме следните таблици:
SELECT * FROM Teachers;
SELECT * FROM Students;
Резултат:
+-----------+-------------+ | 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 | +-----------+-------------+
Можем да използваме UNION
оператор за връщане на всички учители и ученици:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Резултат:
+-------------+ | TeacherName | +-------------+ | Warren | | Ben | | Cathy | | Bill | | Faye | | Jet | | Spike | | Ein | +-------------+ 8 rows in set (0.003 sec)
По подразбиране UNION
оператор имплицитно прилага DISTINCT
операция. С други думи, той връща само различни стойности по подразбиране. Така че горните резултати съдържат само по един от Уорън, Кати и Бил. Това е въпреки факта, че комбинираните таблици всъщност съдържат двама Уорън, две Кати и три Била (има двама учители, наречени Кати, учител и клиент, наречен Уорън, и двама, наречени Бил, както и един ученик, наречен Бил).
Ето пример, който изрично използва DISTINCT
оператор:
SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;
Резултат:
+-------------+ | TeacherName | +-------------+ | Warren | | Ben | | Cathy | | Bill | | Faye | | Jet | | Spike | | Ein | +-------------+ 8 rows in set (0.004 sec)
Така получаваме същия резултат, който получихме без DISTINCT
оператор.
Включване на дубликати
Можем да използваме ALL
ключова дума, за да включите дублиращи се стойности в резултатите:
SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;
Резултат:
+-------------+ | TeacherName | +-------------+ | Warren | | Ben | | Cathy | | Cathy | | Bill | | Bill | | Faye | | Jet | | Spike | | Ein | | Warren | | Bill | +-------------+ 12 rows in set (0.002 sec)
Този път получихме дванадесет реда вместо осемте, които получихме в първия ни пример.
Можем да видим, че и двете Кати бяха върнати и трите законопроекта бяха върнати.