В Oracle Database, UNION
оператор ни позволява да комбинираме резултатите от две заявки в един набор от резултати.
Пример
Да предположим, че имаме следните таблици:
SELECT * FROM Teachers;
SELECT * FROM Students;
Резултат:
TEACHERID | TEACHERNAME |
---|---|
1 | Уорън |
2 | Бен |
3 | Кати |
4 | Кати |
5 | Сметка |
6 | Сметка |
УЧЕНИК | STUDENTNAME |
---|---|
1 | Фей |
2 | Реактивен |
3 | Спайк |
4 | Ейн |
5 | Уорън |
6 | Сметка |
Ето пример за използване на UNION
оператор за връщане на имената на всички учители и ученици:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Резултат:
TEACHERNAME |
---|
Бен |
Сметка |
Кати |
Ейн |
Фей |
Реактивен |
Спайк |
Уорън |
По подразбиране UNION
оператор имплицитно прилага DISTINCT
операция. С други думи, той връща само различни стойности по подразбиране. Така че горните резултати съдържат само по един от Уорън, Кати и Бил. Това е въпреки факта, че комбинираните таблици всъщност съдържат двама Уорън, две Кати и три Била (има двама учители, наречени Кати, учител и клиент, наречен Уорън, и двама, наречени Бил, както и един ученик, наречен Бил).
Включване на дубликати
Можем да използваме ALL
ключова дума, за да включите дублиращи се стойности в резултатите:
SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;
Резултат:
TEACHERNAME |
---|
Уорън |
Бен |
Кати |
Кати |
Сметка |
Сметка |
Фей |
Реактивен |
Спайк |
Ейн |
Уорън |
Сметка |
Този път получихме дванадесет реда вместо осемте, които получихме в първия ни пример.
Можем да видим, че и двете Кати бяха върнати и трите законопроекта бяха върнати.
Някои неща, които трябва да запомните
Обърнете внимание, че изразите трябва да съвпадат по брой и трябва да са в една и съща група тип данни. Следователно не можем да направим следното:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;
Резултат:
ORA-01789: query block has incorrect number of result columns
Или това:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;
Резултат:
ORA-01790: expression must have same datatype as corresponding expression
Въпреки това можем да използваме функции като TO_CHAR()
за да преобразувате колона в подходяща група данни:
SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students;
Резултат:
TEACHERNAME 1 2 3 4 5 6 Ben Bill Cathy Warren