Внешнее соединение
Внешние соединения бывают двух видов: левое (LEFT JOIN) и правое (RIGHT JOIN).
- Запрос с левым внешним соединением (LEFT JOIN) включает все записи из главной таблицы ("один"), даже если в подчинённой таблице ("многие") нет соответствующих записей.
- Запрос с правым внешним соединением (RIGHT JOIN) включает все записи из подчинённой таблицы ("многие"), даже если в главной таблице ("один") нет соответствующих записей.
Пример использования левого внешнего соединения
Рассмотрим создание запроса, который обнаруживает клиентов, не сделавших ни одного заказа, в базе данных "Борей" (Northwind).
- Создайте новый запрос и добавьте в него таблицы "Клиенты" (Customers) и "Заказы" (Orders). Так как эти таблицы связаны отношением "один-ко-многим", между ними автоматически появится соединительная линия.
- Добавьте в бланк запроса поле "Название" (CompanyName) из таблицы "Клиенты" и поле "КодЗаказа" (OrderID) из таблицы "Заказы".
- Выполните запрос и посмотрите, сколько записей возвращается — 830.
- Переключитесь в режим Конструктора. Щёлкните правой кнопкой на линии соединения таблиц и выберите Параметры объединения (Join Properties). Откроется диалоговое окно (рис. 4.26).
Рис. 4.26. Диалоговое окно Параметры объединения
Настройка типа соединения
В окне Параметры объединения можно выбрать тип соединения:
- 1 — внутреннее соединение (INNER JOIN).
- 2 — левое внешнее соединение (LEFT JOIN).
- 3 — правое внешнее соединение (RIGHT JOIN).
Замечание
Термин JOIN в SQL традиционно переводился как "объединение", хотя на самом деле операция объединения таблиц — это UNION. Однако в русскоязычной версии Microsoft Access термин "объединение" продолжает использоваться в отношении операции JOIN.
Применение левого внешнего соединения
- Выберите значение "2", чтобы установить левое внешнее соединение, и нажмите ОК. В окне Конструктора запроса появится стрелка на линии соединения, указывающая на таблицу "многие", что означает LEFT JOIN (рис. 4.27).
Рис. 4.27. Отображение левого внешнего соединения в Конструкторе
Выполнение запроса и просмотр результата
Теперь необходимо выполнить запрос и просмотреть его результат:
- Установите сортировку по возрастанию для поля "КодЗаказа" (OrderID) во втором столбце бланка запроса.
- Нажмите кнопку Запуск (Run) на панели инструментов, чтобы вывести результирующее множество запроса.
После выполнения запроса Microsoft Access отобразит таблицу с результатами (рис. 4.28). Обратите внимание, что количество записей увеличилось до 832, и первые две записи содержат пустые значения в поле "КодЗаказа", что означает, что эти клиенты не сделали ни одного заказа.
Рис. 4.28. Результат выполнения запроса с левым внешним соединением
Сохранение запроса
- Сохраните запрос под именем "Холодные клиенты" (Inactive Customers). Он пригодится в дальнейшем.
Использование правого внешнего соединения
Запросы с правым внешним соединением (RIGHT JOIN) применяются гораздо реже. Это связано с тем, что при включённой ссылочной целостности (см. раздел "Обеспечение целостности данных" в главе 2) в подчинённой таблице не может быть записей, которые не связаны с главной таблицей.