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