Комбинированные запросы
Можно назвать два основных сценария, при выполнении которых вам понадобятся сложные запросы:
- для возвращения одинаковым образом структурированных данных из различных таблиц посредством одного запроса;
- для выполнения многократных запросов к одной таблице и возвращения данных в виде результата одного запроса.
Запросы в языке SQL комбинируются с помощью оператора UNION. Оператор UNION позволяет многократно указывать оператор SELECT, и по завершении их работы может быть выведен один набор результатов.
Использовать оператор UNION довольно просто. Все, что вы должны сделать, — это указать каждый необходимый вам оператор SELECT и разместить оператор UNION между ними.
Упрощенный синтаксис оператора UNION имеет следующий вид:
onepaтop_select
UNION
onepaтop_select
Несмотря на простоту использования оператора UNION, существует несколько правил создания комбинированных запросов:
- каждый запрос в операторе UNION должен содержать одни и те же столбцы, выражения или статистические функции (кроме того, столбцы должны быть перечислены в одном и том же порядке);
- типы данных столбцов должны быть совместимыми;
- для сортировки результата комбинированного запроса используется предложение ORDER BY, которое появится после заключительного оператора SELECT.
Без оператора UNION вам потребовалось бы выполнить три отдельных запроса и поместить результаты в новую таблицу.
Оператор UNION выполняет все это за один проход:
SQL:
SELECT '10% off ' AS sale, price AS old_price, price*0.90 AS new_price
FROM tbl_service
WHERE price<100
UNION
SELECT '20% off ' AS sale, price AS old_price, price*0.80 AS new_price
FROM tbl_service
WHERE price BETWEEN 100 AND 200
UNION
SELECT '30% off ' AS sale, price AS new_price , price*0.70 AS new_price
FROM tbl_service
WHERE price >200
Результат:
sale | old_price | new_price |
10% off | 50 | 45 |
10% off | 20 | 18 |
20% off | 200 | 160 |
20% off | 100 | 80 |
20% off | 150 | 120 |
30% off | 320 | 224 |
30% off | 250 | 175 |