Читайте также:
|
|
_> WHERE avail_balance BETWEEN 500 AND 2500;
+_________+ | cust_id | +_________+
| 1 |
| 2 |
| 3 |
| 4 |
| 8 |
| 9 |
| 7 |
| 11 |
| 1 |
| 1 |
| 2 |
| 3 |
| 3 |
| 4 |
| 4 |
| 5 |
| | 9 | |
+_________+
17 rows in set (0.00 sec)
При виде результатов становится очевидным, что порядок разных опе_ раторов работы с множествами в составном запросе действительно имеет значение. В общем, составные запросы из трех или больше за_ просов оцениваются в порядке сверху вниз, но с учетом следующих по_ яснений:
• По спецификации SQL ANSI из всех операторов работы с множест_ вами первым выполняется оператор intersect.
• Порядок сочетания запросов можно задавать с помощью скобок.
Но поскольку в MySQL еще не реализованы ни оператор intersect, ни скобки в составных запросах, для получения нужного результата при_ дется аккуратно расставлять запросы, образующие составной запрос. При использовании другого сервера БД, для переопределения порядка
Упражнения | |
обработки составных запросов по умолчанию (сверху вниз) запросы, расположенные рядом, можно заключить в скобки:
(SELECT cust_id FROM account
WHERE product_cd IN ('SAV', 'MM') UNION ALL
SELECT a.cust_id
FROM account a INNER JOIN branch b ON a.open_branch_id = b.branch_id
WHERE b.name = 'Woburn Branch') INTERSECT
(SELECT cust_id FROM account
WHERE avail_balance BETWEEN 500 AND 2500 EXCEPT
SELECT cust_id FROM account
WHERE product_cd = 'CD' AND avail_balance < 1000);
Для этого составного запроса первый и второй запросы комбинируют_ ся оператором union all, затем третий и четвертый запросы – операто_ ром except, и, наконец, для формирования окончательного результи_ рующего набора результаты этих двух операций комбинируются с по_ мощью оператора intersect.
Дата добавления: 2015-08-17; просмотров: 59 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Старшинство операций с множествами | | | Упражнения |