Описание тега subquery
Подзапрос является запрос, который вложен в SELECT, INSERT, UPDATE или DELETE заявление, или внутри другого подзапроса. Подзапрос может быть использован в любом месте выражение допускается. В этом примере подзапрос используется как выражение столбца с именем MaxUnitPrice в инструкции SELECT.
"Подзапрос" - это расплывчатая терминология SQL, используемая для описания, когда есть:
- либо более одного
SELECT
в запросе или при использовании в операторах языка манипулирования данными (DML) (IE: DELETE, UPDATE, INSERT, MERGE). - Оператор SELECT подзапроса всегда находится в скобках / круглых скобках.
Это расплывчато, потому что большинство относится к любому из следующих подзапросов:
Подвыделить
Следующее может возвращать только одно значение - более одного вызовет ошибку.
SELECT f.column,
(SELECT b.col
FROM BAR b) AS col2
FROM FOO f
Вот коррелированная версия подзапроса:
SELECT f.column,
(SELECT b.col
FROM BAR b
WHERE b.col2 = f.col2) AS col2
FROM FOO f
Производная таблица / встроенное представление
SELECT f.*
FROM (SELECT t.*
FROM FOOBAR t) AS f
В / НЕ В
SELECT f.*
FROM FOO f
WHERE f.column IN (SELECT b.col
FROM BAR b)
SELECT f.*
FROM FOO f
WHERE f.column NOT IN (SELECT b.col
FROM BAR b)
СУЩЕСТВУЕТ / НЕ СУЩЕСТВУЕТ
Большинство назвали бы следующий "коррелированный подзапрос", но только если они не знают, какEXISTS
Оператор работает в SQL.
SELECT f.*
FROM FOO f
WHERE EXISTS (SELECT NULL
FROM BAR b
WHERE b.col = f.column)
SELECT f.*
FROM FOO f
WHERE NOT EXISTS (SELECT NULL
FROM BAR b
WHERE b.col = f.column)
Вывод
Подзапросы (и коррелированные подзапросы) возвращают только одно значение, и база данных вернет ошибку, если подзапрос вернет более одного значения.
Благодаря более рациональному использованию терминологии становится легче сообщать о проблемах при их возникновении.