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

Рис. 1.19. Діалогове вікно Область уведення

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

Види з'єднань

Залежно від розв'язуваних завдань з'єднання між таблицями в запитах може бути декількох видів.

Найпоширенішим є внутрішнє з'єднання (эквисоедшение). Якщо таблиці зв'язані відношенням " один-до-багатьох", з'єднання ґрунтуються на унікальному значенні поля первинного ключа в одній таблиці й значеннях поля зовнішнього ключа в іншій таблиці. У результуючу безліч запиту попадають всі записи з головної таблиці (таблиці на стороні "один"), для яких є відповідні записи в підлеглій таблиці (таблиці на стороні "багато хто"). Якщо в підлеглій таблиці запису із заданою величиною відсутні, то відповідні записи в головній таблиці в результуючу безліч не включаються. Подібного роду з'єднання між таблицями Access створює автоматично, якщо:

  • у таблицях є поля з однаковими іменами й погодженими типами, причому одне з полів є ключовим;
  • з'єднання було явно задане у вікні Схема даних (Relationships).

Зауваження

"Погоджені типи" у більшості випадків означають однакові типи. Виключенням є поле типу Лічильник, що може мати розмір Довге ціле або Код реплікації й може зв'язуватися із числовими полями відповідного розміру.

Результатом такого запиту є всі записи, значення зв'язаних полів яких в обох таблицях збігаються. Інакше кажучи, эквисоединение зв'язує запису в таблицях відношенням рівності значень єднальних полів.

Для створення запиту, що поєднує всі записи з однієї таблиці, і тільки ті записи із другий, у яких зв'язані поля збігаються, використовують зовнішнє з'єднання. У цьому випадку незалежно від того, чи є відповідні записи в другій таблиці, всі записи першої попадають у результуючу безліч запиту.

Якщо необхідно зв'язати дані будь-яким відношенням, крім відношення рівності, використовують з'єднання по відношенню або тэта-з'єднання). З'єднання по відношенню не відображається у вікні Схема даних (Relationships) і не виводиться у вікні Конструктора запитів.

Для позначення внутрішніх з'єднань в Access використовуються зарезервовані слова ANSI SQL INNER JOIN, а для вказівки зовнішніх з'єднань - слова LEFT JOIN або RIGHT JOIN. Вираження WHERE <поле1>=<поле2> відповідає внутрішньому з'єднанню, a WHERE поле1>поле2 - з'єднанню по відношенню (одному з таких з'єднань).

Для зв'язування даних в одній таблиці застосовують рекурсивне з'єднання. Воно створюється шляхом додавання в запит копії таблиці (у результаті чого Access призначає псевдонім для копії) і зв'язування полів ідентичних таблиць.

Внутрішнє з'єднання

Внутрішнє з'єднання двох таблиць по одному полю в реляционной базі даних будується на основі відносини " один-до-багатьох". Прикладом може служити демонстраційна база даних "Борею" (Northwind), у якій всі з'єднання є внутрішніми з'єднаннями по одному полю на основі зазначеного відношення. У ході розробки баз даних, у яких передбачається використання запитів на основі внутрішніх з'єднань, дотримуйтеся наступних правил.

  • Кожна таблиця "один" повинна мати первинний ключ із унікальними.значеннями. Відсутність повторень значень поля або полів первинного ключа в таблиці Access установлює автоматично.
  • Відношення " багато -до- багатьох " реалізуйте на основі проміжної таблиці, що пов'язана з кожної із двох таблиць відношенням " багато хто-до-одному". Для обох зв'язків проміжна таблиця буде перебувати з боку "багато хто".
  • Необхідно витягти повторювані дані в нову таблицю й зв'язати її з таблицею, з якої ці дані були отримані, відношенням " багато хто-до-одному". Основна мета — однозначно визначити витягнуті дані. Часто для цього доводиться використовувати первинний ключ, що складається з декількох полів. Для автоматизації роботи зі знаходження й витягу повторюваної інформації можна використовувати Майстер по аналізі таблиць Microsoft Access. Цей майстер запускається при виборі команди меню Сервіс, Аналіз, Таблиця (Tools, Analysis, Table).