Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Для Белаш / Лекции / 5 - Языки манипулирования реляционными данными.doc
Скачиваний:
4
Добавлен:
07.08.2024
Размер:
273.41 Кб
Скачать

4). Подчиненные запросы.

Подчиненный запрос (вложенный запрос, подзапрос) создается путем включения одного запроса в другой. При этом внутренний запрос выполняется только один раз, а внешний (главный) запрос, проходя по всем своим записям, обращается только к итогу, полученному подчиненным запросом.

А). Операторы In и Not In.

выражение [Not] In (инструкция SQL) – отбор в главном запросе только тех записей, которые содержат значения, совпадающие (несовпадающие) с одним из значений, отобранных подчиненным запросом.

Пример: Вывести информацию о вылетах в Москву.

SELECT *

FROM Вылет

WHERE [Номер рейса] In

(SELECT [Номер рейса]

FROM Рейс

WHERE [Пункт назначения] = ‘Москва’)

Замечание:

1). Такой же результат можно было получить, используя соединение таблиц с помощью INNER JOIN.

Пример: Определить рейсы, на которые не планировалось ни одного вылета.

SELECT [Номер рейса]

FROM Рейс

WHERE [Номер рейса] Not In

(SELECT [Номер рейса]

FROM Вылет)

Б). Операторы Exists и Not Exists.

[Not] Exists (инструкция SQL) – определение того, должен ли подчиненный запрос возвращать какие-либо записи.

Пример: Вывести список пассажиров, которые когда-либо летали в Москву.

SELECT DISTINCT [Паспортные данные]

FROM Пассажир

WHERE Exists

(SELECT *

FROM Рейс

WHERE Рейс.[Номер рейса] = Пассажир.[Номер рейса]

AND [Пункт назначения] = ‘Москва’)

В). Операторы Any, Some и All.

знак сравнения [Any | Some | All] (инструкция SQL) – отбор в главном запросе записей, которые удовлетворяют сравнению с какими-нибудь (Any и Some) или со всеми (All) записями, отобранными подчиненным запросом.

Пример: В какие города были проданы билеты по цене менее 120? (Но были билеты и более 120).

SELECT [Пункт назначения]

FROM Рейс

WHERE [Номер рейса] = Any

(SELECT [Номер рейса]

FROM Пассажир

WHERE [Цена билета] <= 120)

Замечания:

1). Операторы Any и Some являются синонимами.

2). Если с Any и Some используется знак равенства, то это эквивалентно использованию оператора In. Но в отличие от оператора In, операторы Any и Some можно использовать со знаками > и <.

Пример: Какие рейсы в Москву имеют число мест, меньшее по сравнению с рейсами в другие города?

SELECT [Номер рейса]

FROM Рейс

WHERE [Пункт назначения] = ‘Москва’ AND [Число мест] < All

(SELECT [Число мест]

FROM Рейс

WHERE [Пункт назначения] <> ‘Москва’)

Подчиненному запросу может предшествовать только знак сравнения. В этом случае подчиненный запрос должен возвращать только одну запись.

Пример: Вывести информацию о рейсах, в которых число мест такое же, как на рейс в Киев.

SELECT *

FROM Рейс

WHERE [Пункт назначения] <> ‘Киев’ AND [Число мест] =

(SELECT [Число мест]

FROM Рейс

WHERE [Пункт назначения] = ‘Киев)

Замечание:

1). Подчиненные запросы являются еще одним способом создания многотабличных запросов.

Запросы с параметрами.

  • Условие отбора формируется пользователем в процессе выполнения запроса путем ввода значения параметра.

  • Пользователю выводится текст приглашения на ввод параметра.

  • В запросе текст приглашения заключается в квадратные скобки.

Пример: Вывести информацию о выполнении вылетов определенным рейсом (номер рейса задается пользователем)..

SELECT *

FROM Вылет

WHERE [Номер рейса] = [Введите номер рейса]

Пример: Вывести информацию о рейсах, расположенных в городах, начинающихся на определенную букву (буква задается пользователем).

SELECT *

FROM Рейс

WHERE [Пункт назначения] Like [Города с буквы] & “*”

Пример: Вывести информацию о вылетах, плановая дата которых находится в определенном диапазоне, задаваемом пользователем.

SELECT *

FROM Вылет

WHERE [Плановая дата] Between [Начальная дата] And [Конечная дата]