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