7.9 При соединении таблиц-источников данных в конструкторе запросов можно
Опубликовано: Обновлено:
❓ 7.9 При соединении таблиц-источников данных в конструкторе запросов можно:
📚 Документация
Заголовок раздела «📚 Документация»-
ИТС: Руководство разработчика — Спецификация соединения.
🧠 Краткая теория
Заголовок раздела «🧠 Краткая теория»Где описывается соединение таблиц
Заголовок раздела «Где описывается соединение таблиц»Источники данных и их соединения описываются в секции ИЗ запроса:
ВЫБРАТЬ [РАЗРЕШЕННЫЕ] [РАЗЛИЧНЫЕ] [ПЕРВЫЕ <Количество>] <Список полей выборки>[ПОМЕСТИТЬ|ДОБАВИТЬ <Имя таблицы>][ИЗ <Список источников>][ИНДЕКСИРОВАТЬ ПО [НАБОРАМ] <Список полей>][ГДЕ <Условие отбора>][СГРУППИРОВАТЬ ПО <Поля группировки>][ИМЕЮЩИЕ <Условие отбора>][ДЛЯ ИЗМЕНЕНИЯ [<Список таблиц верхнего уровня>]]При явном соединении двух источников указывается тип соединения и условие соединения после ключевого слова ПО:
ИЗ Справочник.Номенклатура КАК Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены ПО Номенклатура.Ссылка = Цены.НоменклатураВиды соединений
Заголовок раздела «Виды соединений»Язык запросов позволяет использовать четыре явно задаваемых типа соединения.
| Тип | Ключевые слова | Что попадает в результат |
|---|---|---|
| Внутреннее | СОЕДИНЕНИЕ или ВНУТРЕННЕЕ СОЕДИНЕНИЕ | Только строки обеих таблиц, которые соответствуют условию соединения |
| Левое | ЛЕВОЕ СОЕДИНЕНИЕ или ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ | Все строки левого источника и соответствующие им строки правого |
| Правое | ПРАВОЕ СОЕДИНЕНИЕ или ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ | Все строки правого источника и соответствующие им строки левого |
| Полное | ПОЛНОЕ СОЕДИНЕНИЕ или ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ | Все строки обоих источников |
Ключевое слово ВНЕШНЕЕ для левого, правого и полного соединений можно не указывать.
Если при внешнем соединении соответствующая строка другой таблицы не найдена, в получаемых из неё полях результата будет NULL.
Рассмотрим виды соединений на одинаковых исходных данных.
Внутреннее соединение
Заголовок раздела «Внутреннее соединение»Левая таблица Правая таблица
Товар А Товар А — Цена 100
Товар Б Товар А — Цена 120
Товар В Товар Г — Цена 200
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
по товару
↓
Товар А — Цена 100
Товар А — Цена 120
В результат попадают только строки, для которых выполнено условие соединения.
При этом одной строке левого источника могут соответствовать несколько строк правого. Поэтому количество строк результата не обязательно совпадает с количеством строк исходных таблиц.
Левое соединение
Заголовок раздела «Левое соединение»Левая таблица Правая таблица
Товар А Товар А — Цена 100
Товар Б Товар А — Цена 120
Товар В Товар Г — Цена 200
ЛЕВОЕ СОЕДИНЕНИЕ
по товару
↓
Товар А — Цена 100
Товар А — Цена 120
Товар Б — NULL
Товар В — NULL
Все строки левой таблицы сохраняются. Если соответствующей строки справа нет, в получаемых из правой таблицы полях будет NULL.
Правое соединение
Заголовок раздела «Правое соединение»Левая таблица Правая таблица
Товар А Товар А — Цена 100
Товар Б Товар А — Цена 120
Товар В Товар Г — Цена 200
ПРАВОЕ СОЕДИНЕНИЕ
по товару
↓
Товар А — Цена 100
Товар А — Цена 120
NULL — Цена 200
Все строки правой таблицы сохраняются. Если соответствующей строки слева нет, в получаемых из левой таблицы полях будет NULL.
Полное соединение
Заголовок раздела «Полное соединение»Левая таблица Правая таблица
Товар А Товар А — Цена 100
Товар Б Товар А — Цена 120
Товар В Товар Г — Цена 200
ПОЛНОЕ СОЕДИНЕНИЕ
по товару
↓
Товар А — Цена 100
Товар А — Цена 120
Товар Б — NULL
Товар В — NULL
NULL — Цена 200
В результате сохраняются строки обеих таблиц. Если для строки одной стороны нет соответствующей строки другой стороны, в полях этой стороны результата будет NULL.
Несвязанные источники
Заголовок раздела «Несвязанные источники»Источники в секции ИЗ могут быть перечислены без явного соединения:
ИЗ Справочник.Номенклатура КАК Номенклатура, Справочник.Склады КАК СкладыВ этом случае формируется декартово произведение: каждая строка одного источника сочетается с каждой строкой другого.
Левая таблица Правая таблица
Товар А Склад 1
Товар Б Склад 2
БЕЗ УСЛОВИЯ СВЯЗИ
↓
Товар А — Склад 1
Товар А — Склад 2
Товар Б — Склад 1
Товар Б — Склад 2
Например, если один источник содержит 3 строки, а второй — 4, результат такого сочетания будет содержать 3 × 4 = 12 строк.
Это не отдельный тип соединения с собственным ключевым словом СОЕДИНЕНИЕ, а результат использования нескольких источников без условия их связи.
Закладка «Связи» конструктора запросов
Заголовок раздела «Закладка «Связи» конструктора запросов»Если в запросе участвуют несколько таблиц, в конструкторе становится доступна закладка «Связи».
На ней задаются:
- соединяемые таблицы;
- поля или выражения, участвующие в условии связи;
- тип соединения.
Флажки «Все»
Заголовок раздела «Флажки «Все»»Тип соединения в конструкторе определяется состоянием двух флажков «Все»:
| Левая таблица | Правая таблица | Тип соединения |
|---|---|---|
| ☐ | ☐ | Внутреннее |
| ☑ | ☐ | Левое |
| ☐ | ☑ | Правое |
| ☑ | ☑ | Полное |
Смысл флажка «Все» — включить в результат все строки соответствующей стороны, даже если для них не найдено соответствия в другой таблице.
Условие соединения
Заголовок раздела «Условие соединения»Условие после ПО не ограничено сравнением одного реквизита. Оно может содержать несколько условий и выражения языка запросов.
Например:
ПО Цены.Номенклатура = Номенклатура.Ссылка И Цены.ВидЦены = &ВидЦеныВажно отличать условие соединения ПО от условия отбора в секции ГДЕ.
ИЗ Источник1 ЛЕВОЕ СОЕДИНЕНИЕ Источник2 ПО <условие соединения>
ГДЕ <условие отбора результата>ПО определяет, какие строки источников соответствуют друг другу при соединении, а ГДЕ отбирает строки уже формируемого результата запроса.
🧠 Ключевая мысль
Заголовок раздела «🧠 Ключевая мысль»Соединение источников описывается в секции ИЗ, а соответствие строк задается условием ПО. В конструкторе запросов тип соединения определяется флажками «Все» для левой и правой таблиц; если несколько источников используются без связи между ними, формируется их декартово произведение.