Виды соединений
В зависимости от решаемых задач соединение между таблицами в запросах может быть нескольких видов.
Наиболее распространенным является внутреннее соединение (эквисоедшение). Если таблицы связаны отношением "один-ко-многим", соединения основываются на уникальном значении поля первичного ключа в одной таблице и значениях поля внешнего ключа в другой таблице. В результирующее множество запроса попадают все записи из главной таблицы (таблицы на стороне "один"), для которых имеются соответствующие записи в подчиненной таблице (таблице на стороне "многие"). Если в подчиненной таблице записи с заданной величиной отсутствуют, то соответствующие записи в главной таблице в результирующее множество не включаются. Подобного рода соединения между таблицами Access создает автоматически, если:
- в таблицах имеются поля с одинаковыми именами и согласованными типами, причем одно из полей является ключевым;
- соединение было явно задано в окне Схема данных (Relationships).
"Согласованные типы" в большинстве случаев означают одинаковые типы. Исключением является поле типа Счетчик, которое может иметь размер Длинное целое или Код репликации и может связываться с числовыми полями соответствующего размера.
Результатом такого запроса являются все записи, значения связанных полей которых в обеих таблицах совпадают. Другими словами, эквисоединение связывает записи в таблицах отношением равенства значений связывающих полей.
Для создания запроса, объединяющего все записи из одной таблицы, и только те записи из второй, в которых связанные поля совпадают, используют внешнее соединение. В этом случае независимо от того, имеются ли соответствующие записи во второй таблице, все записи первой попадают в результирующее множество запроса.
Если необходимо связать данные любым отношением, кроме отношения равенства, используют соединение по отношению или тэта-соединение). Соединение по отношению не отображается в окне Схема данных (Relationships) и не выводится в окне Конструктора запросов.
Для обозначения внутренних соединений в Access используются зарезервированные слова ANSI SQL INNER JOIN, а для указания внешних соединений — слова LEFT JOIN или RIGHT JOIN. Выражение WHERE <поле1>=<поле2> соответствует внутреннему соединению, a WHERE поле1>поле2 — соединению по отношению (одному из таких соединений).
Для связывания данных в одной таблице применяют рекурсивное соединение. Оно создается путем добавления в запрос копии таблицы (в результате чего Access назначает псевдоним для копии) и связывания полей идентичных таблиц.