Описание тега subquery

"подзапрос" - это расплывчатая терминология SQL, используемая для описания, когда в запросе используется более одного оператора SELECT или когда используется в операторах языка манипулирования данными (DML) (IE: DELETE, UPDATE, INSERT, MERGE). Оператор SELECT подзапроса всегда находится в скобках / круглых скобках.

Подзапрос является запрос, который вложен в 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)

Вывод

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

Благодаря более рациональному использованию терминологии становится легче сообщать о проблемах при их возникновении.