Oracle
 sql >> база данни >  >> RDS >> Oracle

Обяснение на оператора Oracle UNION

В 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Добавяне на име на схема към обект в Spring данни?

  2. Деклариране на променлива и задаване на нейната стойност от заявка SELECT в Oracle

  3. verify_queryable_inventory върнат ORA-20008:Времето за изчакване изтече

  4. не може да получи параметър от процедурата на oracle, изпълнявана от mybatis

  5. Oracle Insert Select с поръчка по