Учебно-практическое пособие москва 2017 ббк


SELECT r.min_sum, r.max_sum, count( b.* )



Pdf көрінісі
бет124/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   120   121   122   123   124   125   126   127   ...   243
Байланысты:
Язык SQL. Базовый курс

SELECT r.min_sum, r.max_sum, count( b.* )
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;
125


В этом запросе мы использовали внешнее соединение. Сделано это для того, чтобы
в случаях, когда в каком-то диапазоне не окажется ни одного бронирования, резуль-
тирующая строка выборки все же была бы сформирована. А правое соединение было
выбрано только потому, что в качестве первой, базовой, таблицы мы выбрали табли-
цу «Бронирования» (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 строк)
Обратите внимание, что для диапазона от 1100 до 1200 тысяч рублей значение счет-
чика бронирований равно нулю. Если бы мы не использовали внешнее соединение,
то эта строка вообще не попала бы в выборку. Конечно, информация была бы полу-
чена та же самая, но воспринимать ее было бы сложнее.
В команде SELECT предусмотрены средства для выполнения операций с выборками,
как с множествами, а именно:
– предложение UNION предназначено для вычисления объединения множеств строк
из двух выборок;
– предложение INTERSECT предназначено для вычисления пересечения множеств
строк из двух выборок;
– предложение EXCEPT предназначено для вычисления разности множеств строк из
двух выборок.
Запросы должны возвращать одинаковое число столбцов, типы данных у столбцов
также должны совпадать.
Рассмотрим эти операции, используя материализованное представление «Маршру-
ты» (routes).
Начнем с операции


Достарыңызбен бөлісу:
1   ...   120   121   122   123   124   125   126   127   ...   243




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

    Басты бет