В этом запросе мы использовали внешнее соединение. Сделано это для того, чтобы
в случаях, когда в каком-то диапазоне не окажется ни одного бронирования, резуль-
тирующая строка выборки все же была бы сформирована. А правое соединение было
выбрано только потому, что в качестве первой, базовой, таблицы мы выбрали табли-
цу «Бронирования» (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).
Начнем с операции
Достарыңызбен бөлісу: