Перейти до основного
Підтримка
Вхід
Вхід за допомогою облікового запису Microsoft
Увійдіть або створіть обліковий запис.
Вітаємо,
Виберіть інший обліковий запис.
У вас є кілька облікових записів
Виберіть обліковий запис, за допомогою якого потрібно ввійти.

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

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

У цій статті

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

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

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

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

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

  1. На вкладці Файл виберіть пункт Створити.

  2. У розділі Наявні шаблони натисніть кнопку Зразки шаблонів.

  3. Виберіть елемент Борей і натисніть кнопку Створити.

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

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

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

    Interval: [Order Date]-[Prior Date]

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

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

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

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

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

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

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

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

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

  1. Відкрийте Northwind.accdb та ввімкніть її вміст.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • <c0>ANY</c0>.    Використовуйте слово 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.

  • <c0>EXISTS</c0>.    Використовуйте слово 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]);
  • <c0>IN</c0>.    Використовуйте слово 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. Ваш ІТ-адміністратор зможе збирати ці дані. Декларація про конфіденційність.

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

×