Иллюстрированный самоучитель по SQL для начинающих

Рекурсивные запросы

Где можно использовать запрос

Во многих трудных ситуациях рекурсивные запросы помогают сэкономить и время, и нервы. Предположим, например, что у вас есть пропуск, который дает право бесплатно летать любым авиарейсом воображаемой компании Vannevar Airlines. Неплохо, правда? И тут встает вопрос: Куда же можно бесплатно попасть? Все авиарейсы Vannevar Airlines перечислены в таблице FLIGHT (авиарейс), и для каждого из них указан его номер, начальный пункт и место назначения (табл. 12.1).

Таблица 12.1. Авиарейсы компании Vannevar Airlines.

Flight No. (номер авиарейса) Source (начальный пункт) Destination (место назначения)
3141 Portland (Портленд) Orange County (округ Ориндж)
2173 Portland Charlotte (Шарлотт)
623 Portland Daytona Beach (Дейтона-Бич)
5440 Orange County Montgomery (Монтгомери)
221 Charlotte Memphis (Мемфис)
32 Memphis Champaign (Шампейн)
981 Montgomery Memphis

Чтобы начать реализацию своего плана проведения отпуска, создайте с помощью SQL в базе данных таблицу FLIGHT:

CREATE TABLE FLIGHT (
FlightNo INTEGER NOT NULL,
Source CHARACTER (30),  
Destination CHARACTER (30)  
);

Как только таблица будет создана, ее можно заполнить данными из табл. 12.1.

Предположим, вы хотите лететь из Портленда к своему другу в Монтгомери. Естественно, что вы зададите себе вопросы: "В какие города я попаду самолетами Vannevar Airlines, если начинать с Портленда? А куда я смогу долететь самолетами этой же авиакомпании, если садиться на самолет в Монтгомери?" В некоторые города долететь без промежуточных посадок можно, а в другие – нельзя. По пути в некоторые города придется делать не менее одной такой посадки. Конечно, можно найти все города, куда самолеты Vannevar Airlines могут вас доставить из любого выбранного вами города просто, что называется, "в лоб". Но если вы будете искать города, выполняя один запрос за другим, то тогда вами выбран…

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.