Внутреннее соединение

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

Основные правила при проектировании соединений

Если в вашей базе данных предполагается использование внутренних соединений, следуйте следующим рекомендациям:

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

Рассмотрим создание запроса, который выводит информацию о товарах, их поставщиках, единицах измерения и ценах в базе данных "Борей" (Northwind).

  1. Закройте все окна, кроме окна База данных (Database). Если база данных не загружена, откройте её.
  2. Щёлкните по вкладке Запросы (Queries) и нажмите кнопку Создать (New).
  3. В появившемся диалоговом окне Новый запрос (New Query) выберите Конструктор (Design View) и нажмите ОК. Откроется окно Добавление таблицы (Show Table).
  4. Добавьте таблицу "Поставщики" (Suppliers). Access покажет список её полей в верхней панели окна запроса.
  5. Добавьте таблицу "Товары" (Products) и закройте окно Добавление таблицы.

Access автоматически создаст соединение по полю "КодПоставщика" (SupplierID) (рис. 4.20). Это соединение является внутренним и основано на том, что в таблице "Поставщики" это поле является первичным ключом, а в таблице "Товары" — внешним ключом.

Окно Конструктора запроса с соединением таблиц

Рис. 4.20. Окно Конструктора запроса с соединением таблиц

Заполнение бланка запроса

После добавления таблиц в запрос выберите нужные поля:

  1. Выберите поле "Марка" (ProductName) из таблицы "Товары" (Products) и перетащите его в строку Поле (Field) первого столбца бланка запроса.
  2. Выберите поле "Название" (CompanyName) из таблицы "Поставщики" (Suppliers) и перетащите его во второй столбец.
  3. Перетащите поле "ЕдиницаИзмерения" (QuantityPerUnit) из таблицы "Товары" в третий столбец.
  4. Перетащите поле "Цена" (UnitPrice) из таблицы "Товары" в четвёртый столбец бланка запроса (рис. 4.21).

Бланк запроса с заполненными полями

Рис. 4.21. Бланк запроса с заполненными полями

Запуск запроса и просмотр результатов

Чтобы выполнить запрос, нажмите кнопку Запуск (Run) или выберите Режим таблицы (Datasheet View) на панели инструментов. В результате появится таблица с выбранными полями (рис. 4.22).

Результат выполнения запроса

Рис. 4.22. Результат выполнения запроса

Изменение порядка сортировки

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

  1. Переключитесь в Конструктор запросов.
  2. Установите курсор в поле Сортировка (Sort) столбца "Цена".
  3. Нажмите клавишу <F4> или щёлкните на стрелке справа, чтобы отобразить список.
  4. Выберите по убыванию (Descending).
  5. Нажмите кнопку Запуск (Run) для отображения результата запроса (рис. 4.23).

Запрос с сортировкой по убыванию цены

Рис. 4.23. Запрос с сортировкой по убывающей цене товара

Соединение косвенно связанных таблиц

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

В данном случае косвенно связанными оказываются таблицы:

А промежуточными являются:

Microsoft Access автоматически показывает связи, в том числе и промежуточные, между таблицами.

Соединение косвенно связанных таблиц

Рис. 4.24. Соединение косвенно связанных таблиц

Просмотр SQL-запроса

После добавления полей "Название" (CompanyName) из таблицы "Клиенты" и "Страна" (Country) из таблицы "Поставщики" выполните следующие шаги:

  1. Откройте меню Вид (View).
  2. Выберите пункт Режим SQL (SQL View).

Вы увидите инструкцию SQL, соответствующую данному запросу (рис. 4.25). Соединения таблиц задаются операцией:

INNER JOIN ... ON ... ON ...

Эквивалентная SQL-инструкция

Рис. 4.25. Эквивалентная SQL-инструкция

Такие запросы широко используются при анализе данных с применением статистических функций SQL или перекрёстных запросов Access.

Подробнее о языке SQL и создании сложных запросов см. в разделе "Создание запросов SQL" в главе 8.