Подзапрос — форма команды SELECT, которая появляется внутри другого утверждения SQL. Подзапрос иногда называется вложенным запросом. Утверждение, содержащее подзапрос называется родительским выражением. Строки, возвращенные подзапросом, используются родительским выражением.
Подзапросы SELECT
Подзапросы могут использоваться для следующих целей:
- Для определения множества строк, вставляемых в целевую таблицу выражениями INSERT или CREATE TABLE
- Для определения одного или более значений, назначаемых существующим строкам в утверждении UPDATE
- Для обеспечения необходимых условий в выражениях WHERE, HAVING утверждений SELECT, UPDATE, и DELETE
Чтобы определить таблицу, обрабатываемую запросом, подзапрос располагается после оператора FROM запроса вместо имени таблицы. Можно использовать подзапросы вместо таблиц таким же образом и в утверждениях INSERT, UDPATE и DELETE. Подзапросы, используемые таким образом, могут применять переменные корреляции, но только если эти переменные определены внутри самого запроса и не содержат внешних ссылок.
1. Например, чтобы определить, кто работает в отделе Тейлора, можно сначала использовать подзапрос, чтобы определить, в каком отделе этот Тейлор работает:
SELECT ename, deptno FROM emp WHERE deptno = (SELECT deptno FROM emp WHERE ename = ‘Taylor’);
Подзапрос выполняется один раз для всего родительского утверждения, в отличие от соотнесенного подзапроса, который выполняется для каждой строки, обрабатываемой родительским утверждением.
Подзапрос может и сам содержать подзапрос, уровень вложенности не ограничивается.
Подзапрос может и сам содержать подзапрос, уровень вложенности не ограничивается.
2. Подзапрос можно использовать для создания копий таблиц. Например, создадим копию таблицы DEPT с именем NEWDEPT:
CREATE TABLE newdept (deptno, dname, loc) AS SELECT deptno, dname, loc FROM dept;