Полное соединение
Перекрестное соединение (SQL-аналог: CROSS JOIN
)
При полном соединении ( CROSS JOIN
) производится перекрестное соединение (или декартово произведение) — каждая строка одной таблицы соединяется с каждой строкой второй таблицы, давая тем самым в результате все возможные сочетания строк двух таблиц.
При таком соединении порядок таблиц (левая, правая) неважен и отсутствует необходимость в сопоставлении ключевых полей.
Пример:
Для примера возьмем две таблицы. Главная таблица — Персона, присоединяемая — Город.
Главная таблица:
Имя | Id города |
---|---|
Андрей | 1 |
Леонид | 2 |
Сергей | 1 |
Григорий | 4 |
Присоединяемая таблица:
Id | Город |
---|---|
1 | Москва |
2 | Санкт-Петербург |
3 | Казань |
Результирующая таблица:
Имя | Id города | id | Город |
---|---|---|---|
Андрей | 1 | 1 | Москва |
Андрей | 1 | 2 | Санкт-Петербург |
Андрей | 1 | 3 | Казань |
Леонид | 2 | 1 | Москва |
Леонид | 2 | 2 | Санкт-Петербург |
Леонид | 2 | 3 | Казань |
Сергей | 1 | 1 | Москва |
Сергей | 1 | 2 | Санкт-Петербург |
Сергей | 1 | 3 | Казань |
Григорий | 4 | 1 | Москва |
Григорий | 4 | 2 | Санкт-Петербург |
Григорий | 4 | 3 | Казань |
Полное соединение (SQL-аналог: FULL JOIN
)
При полном соединении (FULL JOIN
) производится полное внешнее соединение двух наборов. В результирующий набор добавляются следующие записи:
- Внутреннее соединение (
INNER JOIN
) первой и второй таблиц; - Записи первой таблицы, которые не вошли во внутреннее соединение на шаге 1. Для таких записей поля, соответствующие второй таблице, заполняются значениями
NULL
; - Записи второй таблицы, которые не вошли во внутреннее соединение на шаге 1. Для таких записей поля, соответствующие первой таблице, заполняются значениями
NULL
.
При таком соединении необходимо сопоставление ключевых полей.
Пример:
Для примера возьмем две таблицы. Главная таблица — Персона, присоединяемая — Город.
Главная таблица:
Имя | Id города |
---|---|
Андрей | 1 |
Леонид | 2 |
Сергей | 1 |
Григорий | 4 |
Присоединяемая таблица:
Id | Город |
---|---|
1 | Москва |
2 | Санкт-Петербург |
3 | Казань |
Результирующая таблица:
Имя | Id города | Город |
---|---|---|
Андрей | 1 | Москва |
Леонид | 2 | Санкт-Петербург |
Сергей | 1 | Москва |
Григорий | 4 | <null> |
<null> | Казань |
Важно: Для того, чтобы при способе слияния Полное соединение использовать
FULL JOIN
соединение, необходимо в мастере настройки сопоставить ключевые поля соединяемых наборов. Если сопоставление отсутствует, то задействуется алгоритмCROSS JOIN
соединения. При данном способе слияния объем результирующей выборки может очень быстро расти.
При любом соединении (JOIN
) в результирующий набор данных включаются ключевые поля только главной таблицы. Чтобы включить ключевые поля присоединяемой таблицы в результирующий набор данных, необходимо установить флаг Добавлять присоединяемые ключевые поля. Если флаг установлен, то результирующая таблица из предыдущего примера будет выглядеть следующим образом:
Имя | Id города | Город | Id |
---|---|---|---|
Андрей | 1 | Москва | 1 |
Леонид | 2 | Санкт-Петербург | 2 |
Сергей | 1 | Москва | 1 |
Григорий | 4 | <null> | |
<null> | Казань | 3 |