![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Часто невозможно решить поставленную задачу путем использования единственного запроса. Например, в тех случаях, когда при использовании условия поиска в предложении WHERE параметр <значение, с которым сравнивать> заранее не определен и должен вычисляться в момент выполнения оператора SELECT.
В этом случае оператор SELECT с подзапросом имеет следующий вид:
SELECT …
FROM …
WHERE <сравниваемое_значение> <оператор> (SELECT …)
Пример:
SELECT KOLVO, DAT_RASH
FROM RASHOD
WHERE KOLVO = (SELECT MAX(KOLVO) FROM RASHOD)
Замечание.
Ошибкой для данного вида запроса является использование вложенного оператора SELECT, возвращающего вместо единичного список значений.
Пример1 (ошибочный):
SELECT R.DAT_RASH, R.TOVAR, R.KOLVO, R.POKUP
FROM RASHOD R
WHERE R.POKUP = (SELECT POK.POKUP
FROM POKUPATELI POK
WHERE UPPER(POK.GOROD) = ‘МОСКВА’)
Пример 2 (исправленный):
SELECT R.DAT_RASH, R.TOVAR, R.KOLVO, R.POKUP
FROM RASHOD R
WHERE R.POKUP IN (SELECT POK.POKUP
FROM POKUPATELI POK
WHERE UPPER(POK.GOROD) = ‘МОСКВА’)
Пример 3
SELECT RRR.*
FROM RASHOD RRR
WHERE R.POKUP IN
(SELECT R.POKUP
FROM RASHOD R
WHERE KOLVO =
(SELECT MAX(RSH.KOLVO)
FROM RASHOD RSH))
Логический порядок выполнения запроса:
· Определяется самая крупная покупка – отыскивается максимальное значение в столбце KOLVO («самый вложенный» запрос).
· Определяется покупатель, осуществивший эту покупку (средний запрос)
· Основной запрос выбирает записи с заданным покупателем.
Дата публикования: 2014-12-28; Прочитано: 252 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!