Відбір і сортування записів за допомогою запитів, страница 9

Аналогічно створюються запити, у яких бере участь кілька зв'язаних таблиць, що утворять ланцюжок. При цьому в результат запиту можуть бути включені поля із всіх таблиць, що беруть участь у запиті, або тільки поля з таблиць, що перебувають на кінцях такого ланцюжка (мал. 1.24). У другому випадку таблиці на кінцях ланцюжка виявляються зв'язаними побічно, і щоб правильно побудувати запит, що з'єднує поля цих таблиць, необхідно включити в запит кожну таблицю, що бере участь у з'єднанні. Наприклад, можна вивести назви країн, товари з яких купуються клієнтами. У цьому випадку побічно виявляються зв'язаними таблиці "Клієнти" (Customers) і "Постачальники" (Suppliers), а проміжними таблицями виявляються таблиці "Замовлення" (Orders), "Замовленеі" (Order Details), "Товари" (Products). Microsoft Access автоматично показує зв'язку, у тому числі й проміжні, між таблицями.

Після додавання в бланк запиту полів "Назва" (CompanyName) з таблиці "Клієнти" (Customers) і "Країна" (Country) з таблиці "Постачальники" (Suppliers) виберіть команду Вид, Режим SQL (View, SQL View) для того, щоб переглянути інструкцію SQL, що відповідає даному запиту (мал. 1.25). З'єднання таблиць задаються операцією INNER JOIN. . .ON. . . При такому положенні непрямі з'єднання ґрунтуються на вираженні INNER JOIN ... ON... ON...

Рис. 1.24. З'єднання побічно зв'язаних записів

Рис. 1.25. Еквівалентна запиту інструкція SQL

Запити, що з'єднують побічно зв'язані записи, часто використовуються при аналізі даних за допомогою статистичних функцій SQL або перехресних запитів Access.

Зовнішнє з'єднання

Зовнішні з'єднання бувають лівими або правими. Запит, у якому беруть участь таблиці з лівим зовнішнім з'єднанням (LEFT JOIN або *= в SQL), виводить всі записи таблиці "один", у незалежності від того, чи є відповідні їм запису в таблиці "багато хто". І навпаки, запит, у якому беруть участь таблиці із правим зовнішнім з'єднанням (RIGHT JOIN або =* в SQL), виводить всі записи таблиці "багато хто", у незалежності від того, чи є відповідні їм запису в таблиці "один".

Розглянемо як приклад, як за допомогою лівого зовнішнього з'єднання створити запит у базі даних "Борею" (Northwind), що виявляє клієнтів, що не зробили жодного замовлення:

  1. Створіть новий запит і додайте в нього таблиці "Клієнти" (Customers) і "Замовлення" (Orders). Оскільки ці таблиці зв'язані відношенням " один-до- багатьох ", між ними відразу з'являється з'єднуюча лінія.
  2. Виділите й перетягнете в бланк запиту поле "Назва" (CompanyName) таблиці "Клієнти" і поле "Кодзаказа" (Orderld) таблиці "Замовлення".
  3. Виконаєте запит і подивитеся, скільки записів буде повертати запит: 830.
  4. Поверніться в режим Конструктора. Клацніть правою кнопкою миші на лінії, що з'єднує таблиці, і виберіть із контекстного меню команду Параметри об'єднання (Join Properties). З'явиться діалогове вікно, представлене на мал. 1.26. У даному вікні показані імена зв'язаних полів у таблицях. При цьому таблиця на стороні "один" уважається лівою (незалежно від того, як вона розташована у вікні Конструктора), а таблиця на стороні "багато хто" - правої. Нижче розташовані три перемикачі:
    • "1" задає внутрішнє з'єднання;
    • "2" - ліве зовнішнє з'єднання;
    • "3" - праве зовнішнє з'єднання.

Рис. 1.26. Діалогове вікно Параметри об'єднання

Зауваження

Традиційно термін JOIN, що застосовується до операції з'єднання таблиць, переводилося як "об'єднання", хоча насправді операція об'єднання таблиць - це UNION, що дозволяє об'єднати всі записи з однієї таблиці й всі записи з інший, а потім видалити записи, що дублюються. Проте, при локалізації діалогових вікон Access як і раніше, як ми бачимо, використовується термін "об'єднання" стосовно операції JOIN.