некоррелированными .
SELECT flight_no, departure_city, arrival_city FROM routes WHERE departure_city IN ( SELECT city FROM airports WHERE timezone ~ 'Krasnoyarsk' ) AND arrival_city IN ( SELECT city FROM airports WHERE timezone ~ 'Krasnoyarsk' ); flight_no | departure_city | arrival_city
-----------+----------------+--------------
PG0070
| Абакан
| Томск
PG0071
| Томск
| Абакан
PG0313
| Абакан
| Кызыл
PG0314
| Кызыл
| Абакан
PG0653
| Красноярск
| Барнаул
PG0654
| Барнаул
| Красноярск
(6 строк)
Можно сформировать множество значений для предиката IN с помощью скалярных
подзапросов. Если мы захотим найти самый западный и самый восточный аэропор-
ты и представить полученные сведения в наглядной форме, то запрос может быть
таким:
SELECT airport_name, city, longitude FROM airports WHERE longitude IN ( ( SELECT max( longitude ) FROM airports ), ( SELECT min( longitude ) FROM airports ) ) ORDER BY longitude; airport_name |
city
| longitude
--------------+-------------+------------
Храброво
| Калининград | 20.592633
Анадырь
| Анадырь
| 177.741483
(2 строки)
Конечно, в случае, когда необходимо, наоборот, исключить какие-либо значения из
рассмотрения, можно использовать конструкцию NOT IN.
Иногда возникают ситуации, когда от подзапроса требуется лишь установить сам
факт наличия или отсутствия строк в конкретной таблице, удовлетворяющих опре-
деленному условию, а непосредственные значения атрибутов в этих строках инте-
137
реса не представляют. В подобных случаях используют