Рекурсивные запросы
Где можно использовать запрос
Во многих трудных ситуациях рекурсивные запросы помогают сэкономить и время, и нервы. Предположим, например, что у вас есть пропуск, который дает право бесплатно летать любым авиарейсом воображаемой компании 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 могут вас доставить из любого выбранного вами города просто, что называется, "в лоб". Но если вы будете искать города, выполняя один запрос за другим, то тогда вами выбран…