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

Как работи UNION в PostgreSQL

В 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 реда)

Този път получихме дванадесет реда вместо осемте, които получихме в първия ни пример.

Можем да видим, че и двете Кати бяха върнати и трите законопроекта бяха върнати.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Обединяване на конкатениращи JSON(B) колони в заявка

  2. Как да броим дните с изключение на неделята между две дати в Postgres?

  3. Съвети за най-добри практики за PostgreSQL VACUUM and ANALYZE

  4. разлика между localhost и postgres за хост в docker

  5. Как да получите текущата дата в PostgreSQL