Учебное пособие Санкт-Петербург «бхв-петербург»



Pdf көрінісі
бет130/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   126   127   128   129   130   131   132   133   ...   256
sql osnovi yazika

FROM bookings b
RIGHT OUTER JOIN
( VALUES (
0, 100000 ), ( 100000, 200000 ),
( 200000, 300000 ), ( 300000, 400000 ),
( 400000, 500000 ), ( 500000, 600000 ),
( 600000, 700000 ), ( 700000, 800000 ),
( 800000, 900000 ), ( 900000, 1000000 ),
( 1000000, 1100000 ), ( 1100000, 1200000 ),
( 1200000, 1300000 )
) AS r ( min_sum, max_sum )
ON b.total_amount >= r.min_sum AND b.total_amount < r.max_sum
GROUP BY r.min_sum, r.max_sum
ORDER BY r.min_sum;
В этом запросе мы использовали внешнее соединение. Сделано это для того, чтобы
в случаях, когда в каком-то диапазоне не окажется ни одного бронирования, резуль-
тирующая строка выборки все же была бы сформирована. А правое соединение было
выбрано только потому, что в качестве первой, базовой, таблицы мы выбрали таб-
лицу «Бронирования» (bookings), но именно в ней может не оказаться ни одной
строки для соединения с какой-либо строкой виртуальной таблицы. А все строки вир-
туальной таблицы, стоящей справа от предложения RIGHT OUTER JOIN, должны быть
обязательно представлены в выборке: это позволит сразу увидеть «пустые» диапазо-
ны, если они будут.
Можно было использовать и левое внешнее соединение, поменяв таблицы местами.
min_sum | max_sum | count
---------+---------+--------
0 | 100000 | 198314
100000 | 200000 | 46943
200000 | 300000 | 11916
300000 | 400000 |
3260
400000 | 500000 |
1357
500000 | 600000 |
681
600000 | 700000 |
222
700000 | 800000 |
55
800000 | 900000 |
24
900000 | 1000000 |
11
1000000 | 1100000 |
4
1100000 | 1200000 |
0
1200000 | 1300000 |
1
(13 строк)
165


Глава 6. Запросы
Обратите внимание, что для диапазона от 1 100 до 1 200 тысяч рублей значение счет-
чика бронирований равно нулю. Если бы мы не использовали внешнее соединение,
то эта строка вообще не попала бы в выборку. Конечно, информация была бы полу-
чена та же самая, но воспринимать ее было бы сложнее.
В команде SELECT предусмотрены средства для выполнения операций с выборками,
как с множествами, а именно:
– UNION для вычисления объединения множеств строк из двух выборок;
– INTERSECT для вычисления пересечения множеств строк из двух выборок;
– EXCEPT для вычисления разности множеств строк из двух выборок.
Запросы должны возвращать одинаковое число столбцов, типы данных у столбцов
также должны совпадать.
Рассмотрим эти операции, используя материализованное представление «Маршру-
ты» (routes).
Начнем с операции объединения множеств строк — UNION. Строка включается
в итоговое множество (выборку), если она присутствует хотя бы в одном из них.
Строки-дубликаты в результирующее множество не включаются. Для их включения
нужно использовать UNION ALL.
Вопрос: в какие города можно улететь либо из Москвы, либо из Санкт-Петербурга?


Достарыңызбен бөлісу:
1   ...   126   127   128   129   130   131   132   133   ...   256




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет