ВГОРУ

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

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


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

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

Run SQLSELECT *
FROM Sumproduct 
LEFT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City
UNION
SELECT * 
FROM Sumproduct 
RIGHT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City

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

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

Також необхідно дотримуватись певних правил при написанні комбінованих запитів:

  • запит UNION повинен включати два і більше операторів SELECT, відділених між собою ключовим словом UNION (тобто якщо в запиті використовується чотири оператора SELECT, то повинно бути три ключових слова UNION);
  • кожен запит в операторі UNION повинен мати одні й ті ж стовпці, вирази чи статистичні функції, які, до того ж, мають бути перераховані в однаковому порядку;
  • типи даних стовпців мають бути сумісними. Вони не обов'язково мають бути одного типу, проте мають мати подібний тип, щоби СУБД могла їх однозначно перетворити (наприклад, це можуть бути різні числові типи даних або різні типи дати).
  • 2. Включення або виключення повторюваних рядків

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

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

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