В PostgreSQL, UNION
оператор комбинира резултатите от множество заявки в един набор от резултати.
Синтаксис
Официалният синтаксис е така:
query1 UNION [ALL] query2
UNION
оператор добавя резултата от query2
до резултата от query1
(въпреки че няма гаранция, че това е редът, в който действително се връщат редовете).
Дублиращи се редове се елиминират, освен ако UNION ALL
се използва.
Пример
Да предположим, че имаме следните таблици:
SELECT * FROM Teachers;
SELECT * FROM Students;
Резултат:
<пред> учителски | име на учител -----------+------------ 1 | Уорън 2 | Бен 3 | Кати 4 | Кати 5 | Законопроект 6 | Бил студент | име на студент -----------+------------ 1 | Фей 2 | Jet 3 | Спайк 4 | Ein 5 | Уорън 6 | Бил
Можем да използваме UNION
оператор за връщане на всички учители и ученици:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Резултат:
име на учителя ------------- Спайк Бен Ейн Кати Джет Фей Бил Уорън (8 реда)
По подразбиране UNION
оператор имплицитно прилага DISTINCT
операция. С други думи, той връща само различни стойности по подразбиране. Така че горните резултати съдържат само по един от Уорън, Кати и Бил. Това е въпреки факта, че комбинираните таблици всъщност съдържат двама Уорън, две Кати и три Била (има двама учители, наречени Кати, учител и клиент, наречен Уорън, и двама, наречени Бил, както и един ученик, наречен Бил).
Ето пример, който изрично използва DISTINCT
оператор:
SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;
Резултат:
име на учителя ------------- Спайк Бен Ейн Кати Джет Фей Бил Уорън (8 реда)
Същият резултат.
Включване на дубликати
Можем да използваме ALL
ключова дума, за да включите дублиращи се стойности в резултатите:
SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;
Резултат:
име на учителя ------------- Уорън Бен Кати Кати Бил Бил Фей Джет Спайк Ейн Уорън Бил (12 реда)
Този път получихме дванадесет реда вместо осемте, които получихме в първия ни пример.
Можем да видим, че и двете Кати бяха върнати и трите законопроекта бяха върнати.