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

Иногда результаты запроса могут использоваться в качестве поля в другом запросе или в качестве критерия для поля запроса. Например, предположим, что вы хотите увидеть интервал между заказами для каждого из ваших продуктов. Чтобы создать запрос, отображающий этот интервал, необходимо сравнить каждую дату заказа с другими датами заказа для этого продукта. Для сравнения этих дат заказа также требуется запрос. Этот запрос можно вложить в main запрос с помощью вложенный запрос.

Вложенный запрос можно написать в выражение или в инструкции язык SQL (SQL) в режим SQL.

В этой статье

Использование результатов запроса в качестве поля в другом запросе

Вложенный запрос можно использовать в качестве псевдонима поля. Используйте вложенный запрос в качестве псевдонима поля, если вы хотите использовать результаты вложенного запроса в качестве поля в запросе main.

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

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

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

  1. На вкладке Файл нажмите кнопку Создать.

  2. В разделе Доступные шаблоны щелкните Примеры шаблонов.

  3. Щелкните Northwind и нажмите кнопку Создать.

  4. Следуйте инструкциям на странице Борей (на вкладке объектов Заставка), чтобы открыть базу данных, а затем закройте окно входа.

  5. На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.

  6. Перейдите на вкладку Запросы , а затем дважды щелкните Заказы на продукты.

  7. Дважды щелкните поля Идентификатор продукта и Поле Дата заказа , чтобы добавить их в сетку конструктора запроса.

  8. В строке Сортировка столбца Идентификатор продукта сетки выберите По возрастанию.

  9. В строке Сортировка столбца Дата заказа сетки выберите По убыванию.

  10. В третьем столбце сетки щелкните правой кнопкой мыши строку Поле и выберите в контекстном меню команду Масштаб .

  11. В диалоговом окне Масштаб введите или вставьте следующее выражение:

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date] < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID] = [Product Orders].[Product ID])

    Это выражение является вложенным запросом. Для каждой строки вложенный запрос выбирает самую последнюю дату заказа, которая меньше даты заказа, которая уже связана со строкой. Обратите внимание на использование ключевое слово AS для создания псевдонима таблицы, чтобы можно было сравнить значения во вложенном запросе со значениями в текущей строке запроса main.

  12. В четвертом столбце сетки в строке Поле введите следующее выражение:

    Interval: [Order Date]-[Prior Date]

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

  13. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

    1. Запрос выполняется и отображает список названий продуктов, дат заказа, предыдущих дат заказа и интервала между датами заказа. Результаты сначала сортируются по идентификатору продукта (по возрастанию), а затем по дате заказа (в порядке убывания).

    2. Примечание: Так как идентификатор продукта является полем подстановки, по умолчанию Access отображает значения подстановки (в данном случае название продукта), а не фактические идентификаторы продукта. Хотя при этом изменяются отображаемые значения, порядок сортировки не изменяется.

  14. Закройте базу данных Northwind.

К началу страницы

Использование вложенного запроса в качестве критерия для поля запроса

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

Например, предположим, что вы хотите просмотреть список заказов, обработанных сотрудниками, которые не являются торговыми представителями. Чтобы создать этот список, необходимо сравнить идентификатор сотрудника для каждого заказа со списком идентификаторов сотрудников, не являющихся торговыми представителями. Чтобы создать этот список и использовать его в качестве условия поля, используйте вложенный запрос, как показано в следующей процедуре:

  1. Откройте Northwind.accdb и включите его содержимое.

  2. Закройте форму входа.

  3. На вкладке Создать в группе Другое нажмите кнопку Конструктор запросов.

  4. На вкладке Таблицы дважды щелкните Заказы и сотрудники.

  5. В таблице Заказы дважды щелкните поля Идентификатор сотрудника , поле Идентификатор заказа и Поле Дата заказа , чтобы добавить их в сетку конструктора запроса. В таблице Сотрудники дважды щелкните поле Название задания , чтобы добавить его в сетку конструктора.

  6. Щелкните правой кнопкой мыши строку Критерии столбца Идентификатор сотрудника и выберите пункт Масштаб в контекстном меню.

  7. В поле Масштаб введите или вставьте следующее выражение:

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

    Это вложенный запрос. Он выбирает все идентификаторы сотрудников, где у сотрудника нет должности торгового представителя, и передает результирующий набор в запрос main. Затем запрос main проверяет, находятся ли идентификаторы сотрудников из таблицы Orders в результирующем наборе.

  8. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

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

К началу страницы

Распространенные ключевые слова SQL, которые можно использовать со вложенным запросом

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

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

  • ВСЕ    Используйте ALL в предложении WHERE для получения строк, удовлетворяющих условию по сравнению с каждой строкой, возвращаемой вложенным запросом.

    Например, предположим, что вы анализируете данные учащихся в колледже. Учащиеся должны поддерживать минимальный GPA, который зависит от основного. Основные и их минимальные объекты групповой политики хранятся в таблице с именем Majors, а соответствующие сведения об учащихся хранятся в таблице с именем Student_Records.

    Чтобы просмотреть список специальностей (и их минимальных GPA), для которых каждый учащийся с этой специализацией превышает минимальный GPA, можно использовать следующий запрос:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ЛЮБОЙ    Используйте ANY в предложении WHERE для получения строк, удовлетворяющих условию по сравнению по крайней мере с одной из строк, возвращаемых вложенным запросом.

    Например, предположим, что вы анализируете данные учащихся в колледже. Учащиеся должны поддерживать минимальный GPA, который зависит от основного. Основные и их минимальные объекты групповой политики хранятся в таблице с именем Majors, а соответствующие сведения об учащихся хранятся в таблице с именем Student_Records.

    Чтобы просмотреть список специальностей (и их минимальных GPA), для которых любой учащийся с этой специализацией не соответствует минимальному GPA, можно использовать следующий запрос:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    Примечание: Для этой же цели можно использовать ключевое слово SOME; ключевое слово SOME является синонимом ANY.

  • EXISTS    Используйте EXISTS в предложении WHERE, чтобы указать, что вложенный запрос должен возвращать по крайней мере одну строку. Кроме того, можно указать, что вложенный запрос не должен возвращать строки.

    Например, следующий запрос возвращает список продуктов, которые находятся по крайней мере в одном существующем порядке:

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    Используя параметр NOT EXISTS, запрос возвращает список продуктов, которые не найдены по крайней мере в одном существующем порядке:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • В    Используйте IN в предложении WHERE, чтобы убедиться, что значение в текущей строке запроса main является частью набора, возвращаемого вложенным запросом. Вы также можете предварить IN с параметром NOT, чтобы убедиться, что значение в текущей строке запроса main не является частью набора, возвращаемого вложенным запросом.

    Например, следующий запрос возвращает список заказов (с датами заказов), которые были обработаны сотрудниками, которые не являются торговыми представителями:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

    Используя NOT IN, вы можете написать тот же запрос следующим образом:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

К началу страницы

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

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

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?
После нажатия кнопки "Отправить" ваш отзыв будет использован для улучшения продуктов и служб Майкрософт. Эти данные будут доступны для сбора ИТ-администратору. Заявление о конфиденциальности.

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

×