7.12 Флажок «Все», устанавливаемый у таблицы, выбранной на закладке «Связи» конструктора запросов, означает
Опубликовано: Обновлено:
❓ 7.12 Флажок «Все», устанавливаемый у таблицы, выбранной на закладке «Связи» конструктора запросов, означает:
📚 Документация
Заголовок раздела «📚 Документация»-
ИТС: Руководство разработчика — Спецификация соединения.
🧠 Краткая теория
Заголовок раздела «🧠 Краткая теория»В вопросах 7.9–7.11 уже разобрано, что на закладке «Связи» конструктора запросов задаются соединения таблиц-источников и условия связи между ними.
Здесь рассмотрим назначение флажка «Все».
Что означает флажок «Все»
Заголовок раздела «Что означает флажок «Все»»Флажок «Все» относится не к полям таблицы, а к ее записям при соединении.
Если флажок установлен у таблицы, в результат должны попасть все ее записи, в том числе те, для которых в другой таблице не найдено соответствующей записи по условию соединения.
Например:
Товары Цены ------ ---- Стол ───────────────────────── 1000 Стул ───────────────────────── 2000 Шкаф ──────────────── нет соответствующей записи
Если флажок «Все» установлен для таблицы Товары, запись Шкаф также должна попасть в результат. Если соответствующая запись таблицы Цены отсутствует, поля этой стороны соединения в результате будут содержать NULL.
Как работают флажки
Заголовок раздела «Как работают флажки»Для двух связанных таблиц смысл можно представить так:
| Таблица 1 | Таблица 2 | Смысл |
|---|---|---|
Все снят | Все снят | В результат попадают записи, имеющие соответствие по условию соединения |
Все установлен | Все снят | Сохраняются все записи первой таблицы |
Все снят | Все установлен | Сохраняются все записи второй таблицы |
Все установлен | Все установлен | Сохраняются все записи обеих таблиц |
Флажки и текст запроса
Заголовок раздела «Флажки и текст запроса»Важно различать смысл флажка в конструкторе и конкретное представление соединения в тексте запроса.
Например, требуется сохранить все записи таблицы Товары:
Товары ЦеныВсе ☑ Все ☐Такое соединение может быть представлено как:
Справочник.Товары КАК Товары ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены ПО Товары.Ссылка = Цены.ТоварЕсли же сохранить нужно все записи другой таблицы, тот же результат можно получить, поменяв таблицы местами:
A ПРАВОЕ СОЕДИНЕНИЕ B ≡B ЛЕВОЕ СОЕДИНЕНИЕ AПри создании соединения средствами конструктора запроса соединение, при котором необходимо сохранить все записи второй таблицы, может быть представлено как левое соединение с переставленными таблицами.
Поэтому положение таблицы в строке связи не следует напрямую отождествлять с ключевыми словами ЛЕВОЕ СОЕДИНЕНИЕ и ПРАВОЕ СОЕДИНЕНИЕ в тексте запроса. В первую очередь нужно смотреть, у какой таблицы установлен флажок «Все» и записи какой таблицы должны сохраняться независимо от наличия соответствия.
От языка запросов 1С к SQL
Заголовок раздела «От языка запросов 1С к SQL»Язык запросов 1С — это не SQL конкретной СУБД. Это собственный язык платформы, основанный на SQL и дополненный возможностями 1С, например итогами по иерархии.
Разработчик пишет запрос на языке запросов 1С, а платформа при его выполнении формирует обращения к СУБД.
Упрощенно:
Язык запросов 1С
↓
Платформа 1С
↓
SQL-запросы к СУБД
↓
СУБД
Поэтому конструкции языка запросов 1С во многом похожи на SQL:
| Язык запросов 1С | SQL |
|---|---|
ВНУТРЕННЕЕ СОЕДИНЕНИЕ | INNER JOIN |
ЛЕВОЕ СОЕДИНЕНИЕ | LEFT JOIN / LEFT OUTER JOIN |
ПРАВОЕ СОЕДИНЕНИЕ | RIGHT JOIN / RIGHT OUTER JOIN |
ПОЛНОЕ СОЕДИНЕНИЕ | FULL JOIN / FULL OUTER JOIN |
При этом текст запроса 1С и SQL, выполняемый СУБД, не следует считать одним и тем же запросом.
Правое соединение в языке запросов
Заголовок раздела «Правое соединение в языке запросов»Правое соединение не дает принципиально нового результата по сравнению с левым: его можно выразить левым соединением, поменяв стороны местами.
A ПРАВОЕ СОЕДИНЕНИЕ B
↓
B ЛЕВОЕ СОЕДИНЕНИЕ A
Это полезно учитывать при работе с конструктором запроса: визуальное представление соединения и его текстовая запись — не одно и то же.
Флажок «Все» не выбирает поля
Заголовок раздела «Флажок «Все» не выбирает поля»Важно не смешивать две разные настройки конструктора:
- поля результата задаются на закладке «Таблицы и поля»;
- флажок «Все» на закладке «Связи» определяет, должны ли сохраняться записи таблицы, для которых отсутствует соответствие с другой стороны соединения.
Сам по себе установленный флажок «Все» не означает добавление всех полей таблицы в список выбираемых полей.
🧠 Ключевая мысль
Заголовок раздела «🧠 Ключевая мысль»Флажок «Все» означает сохранение в результате всех записей соответствующей таблицы, даже если для части из них отсутствуют соответствующие записи в другой таблице. При анализе конструктора важно отделять смысл флажка от конкретной текстовой формы соединения: эквивалентное соединение может быть представлено с другим порядком таблиц.