23. Предположим, что департамент развития нашей авиакомпании задался вопро-
сом: каким будет общее число различных маршрутов, которые теоретически
можно проложить между всеми городами?
Если в каком-то городе имеется более одного аэропорта, то это учитывать не
будем, т. е. маршрутом будем считать путь между
городами
, а не между
аэро-
портами
. Здесь мы используем соединение таблицы с самой собой на основе
неравенства значений атрибутов.
SELECT count( * )
FROM ( SELECT DISTINCT city FROM airports ) AS a1
JOIN ( SELECT DISTINCT city FROM airports ) AS a2
ON a1.city <> a2.city;
count
-------
10100
(1 строка)
Задание.
Перепишите этот запрос с использованием общего табличного выра-
жения.
24. В тексте главы мы рассмотрели использование подзапросов в предикатах
EXISTS и IN. Существуют также предикаты многократного сравнения ANY и ALL.
Они представлены в документации в разделе 9.22 «Выражения подзапросов».
Самостоятельно ознакомьтесь с этими предикатами и напишите несколько за-
просов с их применением.
Предикаты ANY и ALL имеют некоторую связь с предикатом IN. В частности,
использование IN эквивалентно использованию конструкции = ANY, а исполь-
зование NOT IN эквивалентно использованию конструкции <> ALL.
Пример двух эквивалентных запросов, выбирающих аэропорты в часовых поя-
сах «Asia/Novokuznetsk» и «Asia/Krasnoyarsk»:
Достарыңызбен бөлісу: