Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб. раб_4.doc
Скачиваний:
5
Добавлен:
19.11.2018
Размер:
83.46 Кб
Скачать

Подчиненные запросы в предложении where

Чаще всего подчиненные запросы указываются в предложении WHERE инструкции SQL. Когда подчиненный запрос содержится в данном предложении, он участвует в процессе отбора строк. В простейшем случае подчиненный запрос является частью условия отбора и возвращает значение, позволяющее проверить истинность или ложность условия.

Пример 4.2. Вывести информацию о наименовании поставщика, коде проекта и объемах поставки, для которых объем поставки меньше, чем 50% среднего объема поставок по всем поставкам.

select Sname,KID, Quantity

from Delivery join Supplier on (Delivery.SID = Supplier.SID)

where Quantity < (0.5 * (select avg(Quantity)

from Delivery))

Результат:

Sname KID Quantity

-------------------- ----------- -----------

Информатика 1 100

Информатика 4 200

Вист-Дон 3 200

Вист-Дон 5 100

Вист-Дон 7 200

Sunrise 2 100

Формоза 5 100

В данном случае подчиненный запрос вычисляет средний объем поставки по всем поставкам, который затем умножается на 0,5 (50 %). Полученное значение используется в условии отбора при сканировании объединенных таблиц Delivery и Supplier на предмет поиска нужных строк. В примере 4.2 подчиненный запрос возвращает для каждой строки одно и то же значение.

Условия отбора в подчиненном запросе

Подчиненный запрос всегда является частью условия отбора в предложении и WHERE или HAVING. В SQL используются следующие условия отбора в подчиненном запросе:

  • сравнение с результатом подчиненного запроса. Значение выражения сравнивается с одним значением, которое возвращается подчиненным запрос. Эта проверка напоминает простое сравнение;

  • проверка на принадлежность результатам подчиненного запроса. Значение выражения проверяется на равенство одному из множества значений, которые возвращаются подчиненным запросом. Эта проверка напоминает простую проверку на членство в множестве;

  • проверка на существование. Проверяется наличие строк в таблице результатов подчиненного запроса;

  • многократное сравнение. Значение выражения сравнивается с каждым из множества значений, которые возвращаются подчиненным запросом.

Сравнение с результатом подчиненного запроса

Сравнение с результатом подчиненного запроса является модифицированной формой простого сравнения. Значение выражения сравнивается со значением, которое возвращается подчиненным запросом, и если условие сравнения выполняется, то проверка дает результат TRUE. Эта проверка используется для сравнения значения из проверяемой строки с одним значением, полученным от подчиненного запроса. Примеры SQL – запросов, использующих сравнение с результатом подчиненного запроса были рассмотрены в примерах 4.1 и 4.2.

Проверка на принадлежность результатам подчиненного запроса

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

Пример 4.4. Вывести информацию о наименовании поставщиков, которые участвуют в поставках для проекта с кодом 1.

select Sname

from Supplier

where SID in (select SID

from Delivery

where KID=1)

Результат:

Sname

------------

Информатика

Вист-Дон

Формоза

Подчиненный запрос возвращает список кодов поставщиков, клоторые участвуют в поставках для проекта с кодом, равным 1 . Главный запрос затем проверяет каждую строку таблицы Supplier чтобы определить наименование поставщика, соответствующее выбранному коду.

Во всех приведенных примерах подчиненный запрос возвращает в качестве результата столбец данных, а предложение WHERE главного запроса проверяет, равно ли значение из строки таблицы главного запроса одному из значений в получен ном столбце. Таким образом, проверка IN с подчиненным запросом выполняете аналогично простой проверке IN, за исключением того, что множество значений задается подчиненным запросом, а не указывается явно в инструкции SELECT.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]