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

Подзапросы могут использоваться с операторами SELECT, INSERT, UPDATE и DELETE вместе с операторами, такими как =, <,>,> =, <=, IN, BETWEEN и т. д.

Существует несколько правил, которым должны следовать подзапросы:

  • Подзапросы должны быть заключены в круглые скобки.
  • Подзапрос может иметь только один столбец в предложении SELECT, если только несколько столбцов не находятся в основном запросе для подзапроса для сравнения его выбранных столбцов.
  • ORDER BY нельзя использовать в подзапросе, хотя основной запрос может использовать ORDER BY. GROUP BY может использоваться для выполнения той же функции, что и ORDER BY в подзапросе.
  • Подзапросы, возвращающие более одной строки, могут использоваться только с несколькими операторами значений, такими как оператор IN.
  • Оператор BETWEEN не может использоваться с подзапросом; однако BETWEEN можно использовать в подзапросе.

Подзапросы с инструкцией SELECT

Подзапросы чаще всего используются с оператором SELECT. Основной синтаксис выглядит следующим образом:

SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
   (SELECT column_name [, column_name ]
      FROM table1 [, table2 ]
      [WHERE])

Подзапросы с инструкцией INSERT

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

INSERT INTO table_name [ (column1 [, column2 ]) ]
   SELECT [ *|column1 [, column2 ]
   FROM table1 [, table2 ]
   [ WHERE VALUE OPERATOR ]

Подзапросы с инструкцией UPDATE

Подзапрос может использоваться в сочетании с оператором UPDATE. Либо один или несколько столбцов в таблице могут быть обновлены при использовании подзапроса с помощью инструкции UPDATE.

UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
      FROM TABLE_NAME)
   [ WHERE) ]

Подзапросы с инструкцией DELETE

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

DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
      FROM TABLE_NAME)
   [ WHERE) ]