PostgreSQL Союз, Союз ВСЕ з прикладами

⚡ Розумний підсумок

PostgreSQL UNION об'єднує результати двох або більше операторів SELECT в один результуючий набір та видаляє дублікати рядків, тоді як UNION ALL зберігає кожен рядок, що забезпечує швидший варіант, коли дублікати не мають значення.

  • 🔗 Об'єднати: UNION об'єднує рядки з кількох операторів SELECT в один результуючий набір.
  • 🧹 Дублікати: UNION видаляє дублікати рядків, тоді як UNION ALL зберігає всі відповідні рядки.
  • 📐 Правила: Кожен SELECT має повертати однакову кількість стовпців із сумісними типами даних.
  • ↕️ СОРТУВАТИ ПО: Один оператор ORDER BY в кінці сортує об'єднаний набір результатів.
  • ⚡ Продуктивність: UNION ALL працює швидше, оскільки пропускає крок видалення дублікатів.
  • 🤖 Допомога зі штучним інтелектом: Помічники на основі штучного інтелекту вирівнюють стовпці та вибирають між UNION та UNION ALL.

PostgreSQL СОЮЗ і СОЮЗ ВСЕ

Що таке PostgreSQL союз?

Команда PostgreSQL Оператор UNION використовується для об’єднання наборів результатів із кількох інструкцій SELECT в один набір результатів. Будь-які повторювані рядки з результатів операторів SELECT усуваються. Оператор UNION працює за двох умов:

  • Запити SELECT повинні повертати однакову кількість стовпців.
  • Типи даних усіх відповідних стовпців мають бути сумісними.

Оператор UNION зазвичай використовується для об’єднання даних із пов’язаних таблиць, які не були ідеально нормалізовані.

синтаксис

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

Ось пояснення для наведених вище параметрів:

Вираз_1, вираз_2, … вираз_n — це обчислення або стовпці, які потрібно отримати.

Таблиці — це таблиці, з яких потрібно отримати записи.

Умова (умови) WHERE — це умови, які мають бути виконані для отримання записів.

Примітка: Оскільки оператор UNION не повертає дублікатів, використання UNION DISTINCT не вплине на результати.

PostgreSQL Union

Оператор UNION видаляє дублікати так само, як SELECT DISTINCT робить. Давайте продемонструємо це. У нас є база даних під назвою Demo з такими таблицями:

Книга:

PostgreSQL Union

Ціна:

PostgreSQL Union

Виконаємо таку команду:

SELECT id
FROM Book
UNION
SELECT id
FROM Price;

Команда поверне наступне:

PostgreSQL Union

Стовпець ідентифікатора відображається в таблицях «Книга» та «Ціна». Однак у результатах він з’являється лише один раз. Причина в тому, що PostgreSQL Оператор UNION не повертає дублікатів.

PostgreSQL Союз ус

Цей оператор об’єднує набори результатів із кількох інструкцій SELECT без видалення дублікатів. Оператор вимагає, щоб кожен оператор SELECT мав однакову кількість полів у наборах результатів подібних типів даних.

Синтаксис:

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION ALL
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

Ось пояснення для наведених вище параметрів:

Вираз_1, вираз_2, … вираз_n — це обчислення або стовпці, які потрібно отримати.

Таблиці — це таблиці, з яких потрібно отримати записи.

Умова (умови) WHERE — це умови, які мають бути виконані для отримання записів.

Примітка: Обидва оператори SELECT повинні мати однакову кількість виразів.

Ми будемо використовувати такі таблиці:

Книга:

PostgreSQL Союз ус

Ціна:

PostgreSQL Союз ус

Запустіть таку команду:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

Він повинен повернути наступне:

PostgreSQL Союз ус

Дублікати не видалено.

СОРТУВАТИ ЗА

Команда PostgreSQL Оператор UNION можна використовувати разом із пропозицією ORDER BY, щоб упорядкувати результати запиту. Щоб продемонструвати це, скористаємося наступними таблицями:

Ціна:

СОРТУВАТИ ЗА

Ціна 2:

СОРТУВАТИ ЗА

Ось команда, яка демонструє, як використовувати оператор UNION разом із пропозицією ORDER BY:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price;

Команда поверне наступне:

СОРТУВАТИ ЗА

Записи були впорядковані за стовпцем ціни. За замовчуванням пункт упорядковує записи в порядку зростання. Щоб упорядкувати їх у порядку спадання, додайте пропозицію DESC, як показано нижче:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

Команда поверне наступне:

СОРТУВАТИ ЗА

Записи впорядковано на основі стовпця ціни в порядку спадання.

Коли використовувати Union, а коли Union All?

Використовуйте оператор UNION, коли у вас є кілька таблиць зі схожою структурою, але розділених з певної причини. Він зручний, коли потрібно видалити або усунути дублікати записів.

Використовуйте оператор UNION ALL, коли вам не потрібно видаляти або усувати дублікати записів.

Використання pgAdmin

Тепер давайте розглянемо, як усі три дії виконуються за допомогою pgAdmin.

Як використовувати PostgreSQL Об’єднання за допомогою pgAdmin

Нижче наведено покрокову інструкцію щодо використання PostgreSQL ОБ'ЄДНАННЯ через pgAdmin:

Крок 1) Увійдіть у свій обліковий запис pgAdmin.

Крок 2) На панелі навігації ліворуч натисніть «Бази даних», а потім натисніть «Демонстрація».

Скористайтеся кнопкою PostgreSQL Об’єднання за допомогою pgAdmin

Крок 3) Введіть запит у редакторі запитів:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

Крок 4) Натисніть кнопку Виконати.

Скористайтеся кнопкою PostgreSQL Об’єднання за допомогою pgAdmin

Він повинен повернути наступне:

Скористайтеся кнопкою PostgreSQL Об’єднання за допомогою pgAdmin

Союз ус

Крок 1) Увійдіть у свій обліковий запис pgAdmin.

Крок 2) На панелі навігації ліворуч натисніть «Бази даних», а потім натисніть «Демонстрація».

Скористайтеся кнопкою PostgreSQL Об’єднати всі за допомогою pgAdmin

Крок 3) Введіть запит у редакторі запитів:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

Крок 4) Натисніть кнопку Виконати.

Скористайтеся кнопкою PostgreSQL Об’єднати всі за допомогою pgAdmin

Він повинен повернути наступне:

Скористайтеся кнопкою PostgreSQL Об’єднати всі за допомогою pgAdmin

СОРТУВАТИ ЗА

Оператор UNION ALL можна поєднати з пропозицією ORDER BY, щоб упорядкувати результати в наборі результатів. Наприклад:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price
ORDER BY id;

Команда поверне наступне:

Скористайтеся кнопкою PostgreSQL ЗАМОВИТИ ЗА допомогою pgAdmin

Результати замовлені.

Завантажте базу даних, яка використовується в цьому посібнику

Поширені запитання

UNION ALL працює швидше, оскільки він просто об'єднує рядки. UNION має сортувати або хешувати об'єднані рядки, щоб видалити дублікати, що додає накладних витрат. Коли дублікати не мають значення, UNION ALL є ефективнішим вибором.

Так. Кожен SELECT в UNION повинен повертати однакову кількість стовпців, а відповідні стовпці повинні мати сумісні типи даних в одному порядку. В іншому випадку PostgreSQL викликає помилку, і запит не виконується.

Так. Назви стовпців можуть відрізнятися, оскільки UNION зіставляє стовпці за позицією, а не за назвою. Типи даних все одно мають бути сумісними, а результуючий набір використовує назви стовпців з першого оператора SELECT.

UNION об'єднує рядки двох результуючих наборів вертикально в один список стовпців, видаляючи дублікати. JOIN об'єднує стовпці з різних таблиць горизонтально на основі пов'язаного ключа, таким чином розширюючи рядки, а не додаючи їх.

ORDER BY сортує кінцевий об'єднаний результат, таким чином PostgreSQL дозволяє розмістити лише один ORDER BY після останнього SELECT. Сортування окремих запитів спочатку буде безглуздим після об'єднання їхніх рядків.

Помічники штучного інтелекту, такі як GitHub Copilot, вирівнюють списки стовпців кожного запиту SELECT, позначають невідповідні типи даних та рекомендують UNION або UNION ALL залежно від того, чи слід зберігати дублікати, зменшуючи поширені помилки запитів.

Так. Перевіряючи ваші таблиці та ціль, помічник зі штучним інтелектом може визначити, чи є дублікати рядків можливими та чи мають вони значення, а потім запропонувати UNION ALL, коли дублікати прийнятні для пришвидшення, або UNION, коли їх потрібно видалити.

UNION повертає рядки, знайдені в будь-якому запиті. INTERSECT повертає лише рядки, присутні в обох запитах, а EXCEPT повертає рядки в першому запиті, але не в другому. Усі три функції видаляють дублікати за замовчуванням.

Підсумуйте цей пост за допомогою: