Подчиненные запросы SQL

Примечание:  Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке) .

Подчиненным запросом называется инструкция SELECT, помещенная в инструкцию SELECT, SELECT...INTO, INSERT...INTO, DELETE, UPDATE или в другой подчиненный запрос.

Синтаксис

Для создания подчиненного запроса используются три варианта синтаксиса:

сравнение [ANY | ALL | SOME] (инструкция_sql)

выражение [NOT] IN (инструкция_sql)

[NOT] EXISTS (инструкция_sql)

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

Элемент

Описание

сравнение

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

выражение

Выражение, для которого выполняется поиск результирующего набора запроса

инструкция_sql

Инструкция SELECT, составленная в том же формате и по тем же правилам, что и любая другая инструкция SELECT. Она всегда заключается в скобки.


Замечания

Подчиненный запрос может использоваться вместо выражения в списке полей инструкции SELECT или в предложениях WHERE и HAVING. В подчиненном запросе инструкция SELECT используется для получения набора одного или нескольких заданных значений, оценка которого производится в выражении WHERE или HAVING.

С помощью предикатов ANY или SOME, которые являются синонимами, извлекаются записи в главном запросе, удовлетворяющие сравнению с любыми записями, извлеченными в подчиненном запросе. В следующем примере выводятся все товары, цена которых больше цены любого товара, проданного со скидкой от 25% и выше.

SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);

С помощью предиката ALL извлекаются только те записи в главном запросе, которые удовлетворяют сравнению со всеми записями, извлеченными в подчиненном запросе. При замене оператора ANY оператором ALL в предыдущем примере выводятся только те товары, цена которых больше цены всех товаров, проданных со скидкой от 25% и выше. Этот оператор в большей степени ограничивает результаты запроса.

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

SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);

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

Использование предиката EXISTS (с необязательным зарезервированным словом NOT) в сравнениях истина/ложь позволяет определить, возвращаются ли какие-либо записи в подчиненном запросе.

В подчиненном запросе можно также использовать псевдонимы таблиц для обращения к таблицам, перечисленным в предложении FROM за пределами подчиненного запроса. В следующем примере выводятся имена сотрудников, заработная плата которых равна или больше средней заработной платы всех сотрудников, занимающих одну должность. Таблице «Сотрудники» присвоен псевдоним «Т1».

SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title;

В предыдущем примере зарезервированное слово AS является необязательным.

Некоторые подчиненные запросы разрешены в перекрестные запросы, в частности, как предикаты (для которых в предложении WHERE). Подчиненные запросы в качестве выходных данных (в списке SELECT), не разрешены в перекрестных запросов.



Совершенствование навыков работы с Office
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединиться к программе предварительной оценки Office

Были ли сведения полезными?

Спасибо за ваш отзыв!

Благодарим за отзыв! Возможно, будет полезно связать вас с одним из наших специалистов службы поддержки Office.

×