SQL-Урок 12. Комбіновані запити (UNION)

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

1. Використання оператора UNION

Запити в мові SQL комбінуються за допомогою оператора UNION. Для цього необхідно вказати кожен запит SELECT та розмістити між ними ключове слово UNION. Обмежень щодо кількості використаннь оператора UNION в одному загальному запиті немає. В попередньому розділі ми зазначали, що Access не має можливості створювати повне зовнішнє об'єднання, тепер ми подивимось, як можна цього досягнути через оператор UNION.

SELECT *
FROM Sumproduct LEFT JOIN Sellers ON Sumproduct.City = Sellers.City
UNION
SELECT *

FROM Sumproduct RIGHT JOIN Sellers ON Sumproduct.City = Sellers.City


Бачимо, що запит відобразив як всі колонки з першої таблиці - так і з другої, незалежно від того, чи всі записи мають відповідники у іншій таблиці.

Також варто зазначити, що в багатьох випадках замість UNION ми можемо використовувати речення WHERE з багатьма умовами, та отримувати аналогічний результат. Проте через UNION записи виглядають більш лаконічними та зрозумілими. Також необхідно дотримуватись певних правил при написанні комбінованих запитів:

2. Включення або виключення повторюваних рядків

Запит з UNION автоматично видаляє усі повторювані рядки з набору результатів запиту (іншими словами, веде себе як речення WHERE з кількома умовами в одному операторі SELECT). Така поведінка оператора UNION по замовчуванню, але при бажанні ми можемо змінити це. Для цього нам варто використовувати оператор UNION ALL замість UNION.

3. Сортування результатів комбінованих запитів

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

Статті по темі:

  • SQL-Урок 11. Зовнішнє об'єднання (OUTER JOIN)
  • SQL-Урок 13. Додавання даних (INSERT INTO)