Вкладення запиту в інший запит або у вираз за допомогою підзапиту

Увага! : Цю статтю перекладено за допомогою служби машинного перекладу; див. застереження. Версію цієї статті англійською мовою див. тут для отримання довідки.

Інколи потрібно використати результати запиту як поле в іншому запиті або як умову для поля запиту. Наприклад, потрібно визначити інтервал між замовленнями для кожного з товарів. Щоб створити запит, який відображатиме цей інтервал, потрібно порівняти кожну дату замовлення з іншими датами замовлення цього товару. Для порівняння цих дат замовлень також потрібен запит. Цей запит можна вкласти в головний запит за допомогою підзапит.

Підзапит можна написати у вираз або в операторі мови структурованих запитів (SQL) у режим SQL.

У цій статті

Використання результатів запиту як поля в іншому запиті

Використання підзапиту як умови для поля запиту

Поширені ключові слова SQL, які можна використовувати з підзапитом

Використання результатів запиту як поля в іншому запиті

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

Примітка : Підзапит, який використовується як псевдонім поля, не може повертати більше одного поля.

Псевдонім поля підзапиту можна використовувати для відображення значень, які залежать від інших значень у поточному рядку, що неможливо без використання підзапиту. Наприклад, давайте повернутися до приклад якої ви хочете бачити інтервал між замовлення для кожного продукту. Визначення цей інтервал, вам потрібно порівняти кожного дата замовлення, щоб інші дати замовлення для цього продукту. Можна створити запит, який відображає цю інформацію за допомогою шаблону Northwind 2007.

Процедура настроювання Northwind 2007

  1. Натисніть кнопку Microsoft Office Зображення кнопки Office і виберіть пункт Створити.

  2. В області ліворуч у розділі Категорії шаблонів, виберіть пункт Локальні шаблони.

  3. У розділі Локальні шаблонинатисніть кнопку Northwind 2007і натисніть кнопку створити.

  4. Для відкривання бази даних виконайте вказівки на сторінці Northwind Traders (на вкладці об’єкта Початкова сторінка), а потім закрийте діалогове вікно входу.

  1. На вкладці Створення в групі Додатково натисніть кнопку Конструктор запитів.

  2. У діалоговому вікні Відображення таблиці виберіть вкладку Запити та двічі клацніть Замовлення товару.

  3. Закрийте діалогове вікно Відображення таблиці.

  4. Двічі клацніть поле Ідентифікатор товару та поле Дата замовлення, щоб додати їх до бланка запиту.

  5. У рядку Сортування у стовпці Ідентифікатор товару бланка виберіть пункт За зростанням.

  6. У рядку Сортування у стовпці Дата замовлення бланка виберіть пункт За спаданням.

  7. У третьому стовпці бланка клацніть правою кнопкою миші рядок Поле та виберіть у контекстному меню пункт Масштаб.

  8. У діалоговому вікні Масштаб введіть або вставте такий вираз:

    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 використовується для створення псевдоніма таблиці, щоб можна було порівняти значення в підзапиті зі значеннями в поточному рядку головного запиту.

  9. У четвертому стовпці бланка в рядку Поле введіть такий вираз:

Interval: [Order Date]-[Prior Date]

Цей вираз обчислює інтервал між кожною датою замовлення та попередньою датою замовлення для певного товару за допомогою значення для попередньої дати, визначеного з використанням підзапиту.

  1. На вкладці Конструктор у групі Результати натисніть кнопку Запуск.

    Після запуску запит відображає список імен, дат замовлень, попередніх дат замовлень та інтервал між датами замовлень. Результати сортуються спочатку за кодом товару (за зростанням), а потім за датою замовлення (за спаданням).

    Примітка : Оскільки "Ідентифікатор товару" – це поле підстановки, за промовчанням у програмі Access відображаються значення підстановки (у цьому випадку ім'я товару), а не фактичні ідентифікатори товарів. Хоча це змінює значення, які відображаються, порядок сортування не змінюється.

  2. Закрийте базу даних "Борей".

На початок сторінки

Використання підзапиту як умови для поля запиту

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

Наприклад, потрібно переглянути список замовлень, оброблених працівниками, крім торгових представників. Щоб створити цей список, потрібно порівняти ідентифікатор працівника в кожному замовленні зі списком ідентифікаторів працівників, які не виконують функцій торгових представників. Щоб створити цей список і використовувати його як умову поля, використовується підзапит, як це показано в наведеній нижче процедурі.

  1. Відкрийте базу даних Борей 2007.accdb і ввімкніть її вміст.

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

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

  4. У діалоговому вікні Відображення таблиці на вкладці Таблиці двічі клацніть пункти Замовлення та Працівники.

  5. Закрийте діалогове вікно Відображення таблиці.

  6. У таблиці "Замовлення" двічі клацніть поля Ідентифікатор працівника, Ідентифікатор замовлення та Дата замовлення, щоб додати їх до бланка запиту. У таблиці "Працівники" двічі клацніть поле Посада, щоб додати його до бланка.

  7. Клацніть правою кнопкою миші рядок Критерії стовпця "Ідентифікатор працівника" та виберіть у контекстному меню пункт Масштаб.

  8. У вікні Масштаб введіть або вставте такий вираз:

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

    Це і є підзапит. Він вибирає всі ідентифікатори працівників, для яких не вказано посаду "Торговий представник", і передає цей набір результатів до головного запиту. Головний запит перевіряє, чи є в наборі результатів ідентифікатори працівників із таблиці "Замовлення".

  9. На вкладці Конструктор у групі Результати натисніть кнопку Запуск.

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

На початок сторінки

Поширені ключові слова SQL, які можна використовувати з підзапитом

Є кілька ключових слів SQL, які можна використовувати з підзапитом.

Примітка : Цей список не вичерпний. У підзапиті можна використовувати будь-яке припустиме ключове слово SQL, за винятком ключових слів для визначення даних.

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

    Наприклад, потрібно проаналізувати дані про студентів у коледжі. Студенти повинні підтримувати середній академічний бал, який відрізняється залежно від спеціалізації. Спеціалізації та їхні мінімальні середні академічні бали зберігаються в таблиці "Спеціалізації", а відповідні відомості про студентів зберігаються в таблиці "Записи_студентів".

    Щоб переглянути список спеціалізацій (і їхні мінімальні середні академічні бали), для яких кожен студент із цією спеціалізацією перевищує мінімальний середній академічний бал, можна використати такий запит:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ANY   . Використовуйте слово ANY в реченні WHERE для отримання рядків, які відповідають умові під час порівняння із щонайменше одним рядком, повернутим підзапитом.

    Наприклад, потрібно проаналізувати дані про студентів у коледжі. Студенти повинні підтримувати середній академічний бал, який відрізняється залежно від спеціалізації. Спеціалізації та їхні мінімальні середні академічні бали зберігаються в таблиці "Спеціалізації", а відповідні відомості про студентів зберігаються в таблиці "Записи_студентів".

    Щоб переглянути список спеціалізацій (і їхні мінімальні середні академічні бали), для яких жоден студент із цією спеціалізацією не відповідає мінімальному середньому академічному балу, можна використати такий запит:

    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, щоб указати, що підзапит має повернути принаймні один рядок. Перед словом EXISTS можна вставити слово NOT, щоб указати, що підзапит не має повертати жодного рядка.

    Наприклад, наведений нижче запит повертає список товарів, знайдених принаймні в одному наявному замовленні:

    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   . Використовуйте слово IN у реченні WHERE для перевірки, чи значення в поточному рядку головного запиту входить до набору, який повертає підзапит. Перед словом IN можна вставити слово NOT, щоб перевірити, чи значення в поточному рядку головного запиту не входить до набору, який повертає підзапит.

    Наприклад, наведений нижче запит повертає список замовлень (із датами замовлення), оброблених працівниками, крім торгових представників:

    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');

На початок сторінки

Примітка : Застереження про машинний переклад: Цю статтю перекладено комп’ютерною системою без втручання людини. Корпорація Майкрософт пропонує таку послугу, щоб іншомовні користувачі могли дізнаватися про продукти, служби й технології Microsoft. Оскільки статтю перекладено за допомогою служби машинного перекладу, вона може містити смислові, синтаксичні або граматичні помилки.

Отримуйте нові функції раніше за інших
Приєднайтеся до оцінювачів Office

Ця інформація корисна?

Дякуємо за ваш відгук!

Дякуємо за відгук! Схоже, вам може стати в нагоді допомога одного з наших спеціалістів служби підтримки Office, з яким ми вас можемо з’єднати.

×