С точки зрения СУБД эти три варианта эквивалентны, они отличаются лишь синтак-
сисом. Для них PostgreSQL выберет один и тот же план (порядок) выполнения запро-
са.
Теперь обратимся к так называемым
внешним соединениям
. Предположим, что
мы задались вопросом: сколько маршрутов обслуживают самолеты каждого типа? Ес-
ли не требовать вывода наименований моделей самолетов, тогда всю необходимую
информацию можно получить из материализованного представления «Маршруты»
(routes). Но мы все же будем выводить и наименования моделей, поэтому обратим-
ся также к таблице «Самолеты» (aircrafts). Соединим эти таблицы на основе атрибута
aircraft_code, сгруппируем строки и просто воспользуемся функцией count. В этом за-
просе внешнее соединение еще не используется.
SELECT r.aircraft_code, a.model, count( * ) AS num_routes
FROM routes r
JOIN aircrafts a ON r.aircraft_code = a.aircraft_code
GROUP BY 1, 2
ORDER BY 3 DESC;
aircraft_code |
model
| num_routes
---------------+---------------------+------------
CR2
| Bombardier CRJ-200 |
232
CN1
| Cessna 208 Caravan |
170
SU9
| Sukhoi SuperJet-100 |
158
319
| Airbus A319-100
|
46
733
| Boeing 737-300
|
36
321
| Airbus A321-200
|
32
763
| Boeing 767-300
|
26
773
| Boeing 777-300
|
10
(8 строк)
Обратите внимание, что в таблице «Самолеты» (aircrafts) представлено 9 моделей, а в
этой выборке лишь 8 строк. Значит, какая-то модель самолета не участвует в выпол-
нении рейсов. Как ее выявить? С помощью такого запроса:
Достарыңызбен бөлісу: