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

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

Вложенный запрос — инструкции SELECT вложены инструкцию SELECT, SELECT... В ВСТАВЬТЕ... Инструкция INTO, удалить или обновить или в другой вложенный запрос.

Синтаксис

Три вида синтаксиса можно использовать для создания вложенного запроса:

Сравнение [ЛЮБОЙ | ВСЕ | НЕКОТОРЫЕ] (sqlstatement)

выражение [NOT] В (sqlstatement)

[NOT] EXISTS (sqlstatement)

Вложенный запрос состоит из следующих элементов:

Часть

Описание

Сравнение

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

выражение

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

инструкция_SQL

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


Замечания

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

Используйте все или НЕКОТОРЫЕ предикат, которые являются синонимами, извлекаются записи в главном запросе, которые удовлетворяют сравнению со всех записей, полученные во вложенном. В следующем примере возвращается все товаров, цена за единицу которых больше любого продукта, проданных со скидкой от 25% и многое другое:

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

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

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

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

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

Предикат EXISTS (с НЕОБЯЗАТЕЛЬНЫМ зарезервированное слово) при сравнении true или false, чтобы определить, является ли вложенный запрос возвращает все записи.

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

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.

×