Соединения в запросах 1С


Соединения в запросах 1С, пожалуй, наиважнейшая операция с таблицами базы данных. Именно от корректности применения нужного соединения, в каждом конкретном случае, зависят получаемые итоговые данные из базы.

При помощи соединений, мы сопоставляем записи одной таблицы, с записями другой. Прежде чем приступить к рассмотрению соединений, подготовим небольшую базу данных. емонстрационную базу данных можно скачать внизу страницы.)

Итак, мы имеем несколько справочников, а именно:

Справочник «Люди».

1-Справочник-Люди Соединения в запросах 1С

Справочник «Цвета».

2-Справочник-Цвета Соединения в запросах 1С

Справочник «Ассоциации».

3-Справочник-Ассоциации Соединения в запросах 1С

Мы будем получать данные об ассоциациях людей, беря за основу цвет.

К примеру, для Ольги ассоциацией будет трава, так как она предпочитает зелёный цвет. Для Александра и Василия, подходящих им ассоциаций, нет, по причине того, что они предпочитают синий и красный цвета. А вот ассоциаций для этих цветов, в базе не указано. Нужно ещё обратить внимание, что белый цвет никто не предпочитает, хотя в базе он указан и ассоциация ему — мел. Запомните это, дальше эти сведения нам пригодятся.


Давайте получим имена людей, с предпочитаемыми ими, цветами.

4-Отчёт-Предпочитаемые-цвета Соединения в запросах 1С

Теперь получим ассоциации с их цветами.

5-Отчёт-Ассоциации Соединения в запросах 1С


Перекрёстное соединение в запросах 1С.

Выполним перекрёстное соединение. Здесь мы получим получим все записи из всех таблиц.

Как видите, никакой информативности.

6-Перекрёстное-соединение Соединения в запросах 1С


Внутреннее соединение в запросах 1С.

Всё же, давайте получим интересующие нас результаты, где значение предпочитаемого цвета, равно значению цвета ассоциации. Для этого, нам нужно добавить к запросу, конструкцию ГДЕ.

7-Внутреннее-соединение-с-ГДЕ Соединения в запросах 1С

Ещё один вариант внутреннего соединения, в котором конструкция ГДЕ не применяется. Вместо неё, мы укажем в запросе, само выражение ВНУТРЕННЕЕ СОЕДИНЕНИЕ.

8-Внутреннее-соединение Соединения в запросах 1С

Как видите, в том и другом случае, полученные нами данные, абсолютно идентичны.

Схематично:

9-Внутреннее-соединение-схема-e1496665542210 Соединения в запросах 1С


Левое соединение в запросах 1С.

Как видно из предыдущего запроса, в результирующие данные не попали Василий и Александр, по причине того, что они предпочитают синий и красный цвета. А ассоциаций для этих цветов, в нашей базе данных нет.

Нам необходимо переписать запрос так, чтобы эти люди, всё же, были представлены в результатах, не смотря на то, что для их любимых цветов, ассоциации не сопоставлены.

10-Левое-соединение Соединения в запросах 1С

Левое соединение представляет из себя:

11-Левое-соединение-картинка Соединения в запросах 1С

Схематично:

12-Левое-соединение-схема Соединения в запросах 1С


Правое соединение в запросах 1С.

Давайте ещё раз взглянем на внутреннее соединение:

8-Внутреннее-соединение Соединения в запросах 1С

Как видно, здесь отсутствует ассоциация Мел с белым цветом, так как этот цвет никто из наших людей не предпочитает.

Нам необходимо переписать запрос так, чтобы мы получили записи из второй таблицы, которые не имеют пар (не сопоставлены) с первой.

13-Правое-соединение Соединения в запросах 1С

Правое соединение представляет из себя:

14-Правое-соединение-картинка Соединения в запросах 1С

Схематично:

15-Правое-соединение-схема Соединения в запросах 1С


Полное соединение в запросах 1С.

А теперь представим, что возникла необходимость получить все записи из двух таблиц. Независимо от того, есть ли у них сопоставленные пары или нет. Для этой цели, нам нужно будет совместить результаты левого и правого соединений. Как раз для таких случаев существует полное соединение.

16-Полное-соединение Соединения в запросах 1С

Полное соединение представляет из себя:

17-Полное-соединение-картинка Соединения в запросах 1С

Схематично:

18-Полное-соединение-схема Соединения в запросах 1С

Как видно выше, некоторые поля у нас пустые. На самом деле эти данные являются очень коварными значениями NULL. NULL означает отсутствие значения, любая операция с ним приведёт к ошибке. Даже, если сравнить NULL с NULL, результатом этого сравнения будет Ложь. Не даром, во всех конфигурациях, в обязательном порядке, требуется проводить обработку такого значения, в местах возможного его возникновения.

Мы так же, не оставим это без внимания и в запросе с полным соединением, применим функцию ЕСТЬNULL. Эта функция проверяет результаты запроса на NULL и если, она получает такое значение, то возвращает другое значение, указанное нами в параметрах этой функции.

19-Полное-соединение-c-проверкой-на-NULL Соединения в запросах 1С


Демонстрационная база данных Обзор Видов Соединений