Соединение в запросах в языке 1С 8.3, 8.2 (в примерах)

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

<<< Основы Группировка Условия Упорядочивание Функции
<<< Итоги Соединение Объединение Параметры

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

/// Как сделать внутреннее соединение таблиц в 1с 8.3, 8.2 
 
&НаСервере
Процедура ВнутреннееСоединениеТаблиц()
 
    // Соединения используются, чтобы сопоставить (соединить)
    // строки одной таблицы строкам другой таблицы
    // по определенному признаку.
 
    //  -------------   --------------------------------
    //  |Люди       |   |   Характеристики              |
    //  -------------   ---------------------------------
    //  |ИМЯ        |   |   ИМЯ             ВОЗРАСТ     |
    //  -------------   ---------------------------------
    //  |Алена      |   |   Алена           21          |
    //  |Алефтина   |   |   Алефтина        18          |
    //  |Владимир   |   |   Павел           25          |
    //  |Владислав  |   |   Петр            30          |
    //  |           |   |   Порфирий        50          |
    //  -------------   ---------------------------------
 
    //  Результат внутреннего соединения по имени:
 
    //  ИмяИзТаблицы1   ИмяИзТаблицы2   ВозрастИзТаблицы2
    //  Алена           Алена           21
    //  Алефтина        Алефтина        18
 
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |   Люди.Наименование КАК ИмяИзТаблицы1,
        |   Характеристики.Наименование КАК ИмяИзТаблицы2,
        |   Характеристики.Возраст КАК ВозрастИзТаблицы2
        |ИЗ
        |   Справочник.Люди КАК Люди
        |      ВНУТРЕННЕЕ СОЕДИНЕНИЕ
        |   Справочник.Характеристики КАК Характеристики
        |      ПО
        |   Люди.Наименование = Характеристики.Наименование"
    );
 
    ВыполнитьЗапросИВывестиНаФорму(Запрос);
 
КонецПроцедуры
 
/// Как сделать левое внешнее соединение таблиц в 1с 8.3, 8.2 
 
&НаСервере
Процедура ЛевоеСоединениеТаблиц()
 
    // Левое соединение - это внутреннее
    // соединение + строки  из левой таблицы, для которых не
    // найдены соответствия.
 
    //  -------------   --------------------------------
    //  |Люди       |   |   Характеристики              |
    //  -------------   ---------------------------------
    //  |ИМЯ        |   |   ИМЯ             ВОЗРАСТ     |
    //  -------------   ---------------------------------
    //  |Алена      |   |   Алена           21          |
    //  |Алефтина   |   |   Алефтина        18          |
    //  |Владимир   |   |   Павел           25          |
    //  |Владислав  |   |   Петр            30          |
    //  |           |   |   Порфирий        50          |
    //  -------------   ---------------------------------
 
    //  Результат левого внешнего соединения по имени:
 
    //  ИмяИзТаблицы1   ИмяИзТаблицы2   ВозрастИзТаблицы2
    //  Алена           Алена           21
    //  Алефтина        Алефтина        18
    //  Владимир        NULL            NULL
    //  Владислав       NULL            NULL    
 
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |   Люди.Наименование КАК ИмяИзТаблицы1,
        |   Характеристики.Наименование КАК ИмяИзТаблицы2,
        |   Характеристики.Возраст КАК ВозрастИзТаблицы2
        |ИЗ
        |   Справочник.Люди КАК Люди
        |      ЛЕВОЕ СОЕДИНЕНИЕ
        |   Справочник.Характеристики КАК Характеристики
        |      ПО
        |   Люди.Наименование = Характеристики.Наименование"
    );
 
    ВыполнитьЗапросИВывестиНаФорму(Запрос);
 
КонецПроцедуры
 
/// Как сделать правое внешнее соединение таблиц в 1с 8.3, 8.2 
 
&НаСервере
Процедура ПравоеСоединениеТаблиц()
 
    // Правое соединение - это внутреннее
    // соединение + строки из правой таблицы, для которых
    // не найдены соответствия.    
 
    //  -------------   --------------------------------
    //  |Люди       |   |   Характеристики              |
    //  -------------   ---------------------------------
    //  |ИМЯ        |   |   ИМЯ             ВОЗРАСТ     |
    //  -------------   ---------------------------------
    //  |Алена      |   |   Алена           21          |
    //  |Алефтина   |   |   Алефтина        18          |
    //  |Владимир   |   |   Павел           25          |
    //  |Владислав  |   |   Петр            30          |
    //  |           |   |   Порфирий        50          |
    //  -------------   ---------------------------------
 
    //  Результат правого внешнего соединения по имени:
 
    //  ИмяИзТаблицы1   ИмяИзТаблицы2   ВозрастИзТаблицы2
    //  Алена           Алена           21
    //  Алефтина        Алефтина        18
    //  NULL            Павел           25
    //  NULL            Петр            30
    //  NULL            Порфирий        50    
 
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |   Люди.Наименование КАК ИмяИзТаблицы1,
        |   Характеристики.Наименование КАК ИмяИзТаблицы2,
        |   Характеристики.Возраст КАК ВозрастИзТаблицы2
        |ИЗ
        |   Справочник.Люди КАК Люди
        |      ПРАВОЕ СОЕДИНЕНИЕ
        |   Справочник.Характеристики КАК Характеристики
        |      ПО
        |   Люди.Наименование = Характеристики.Наименование"
    );
 
    ВыполнитьЗапросИВывестиНаФорму(Запрос);
 
КонецПроцедуры
 
/// Как сделать полное внешнее соединение таблиц в 1с 8.3, 8.2
 
&НаСервере
Процедура ПолноеСоединениеТаблиц()
 
    //  Полное соединение - это внутреннее соединение + 
    //  строки из левой таблицы, для которых не найдены
    //  соответствия +
    //  строки из правой таблицы, для которых не найдены
    //  соответствия.
 
    //  -------------   --------------------------------
    //  |Люди       |   |   Характеристики              |
    //  -------------   ---------------------------------
    //  |ИМЯ        |   |   ИМЯ             ВОЗРАСТ     |
    //  -------------   ---------------------------------
    //  |Алена      |   |   Алена           21          |
    //  |Алефтина   |   |   Алефтина        18          |
    //  |Владимир   |   |   Павел           25          |
    //  |Владислав  |   |   Петр            30          |
    //  |           |   |   Порфирий        50          |
    //  -------------   ---------------------------------
 
    // Результат полного внешнего соединения по имени:
 
    //  ИмяИзТаблицы1   ИмяИзТаблицы2   ВозрастИзТаблицы2
    //  Алена           Алена           21
    //  Алефтина        Алефтина        18
    //  Владимир        NULL            NULL
    //  Владислав       NULL            NULL
    //  NULL            Павел           25
    //  NULL            Петр            30
    //  NULL            Порфирий        50    
 
    Запрос = Новый Запрос(
        " ВЫБРАТЬ
        |   Люди.Наименование КАК ИмяИзТаблицы1,
        |   Характеристики.Наименование КАК ИмяИзТаблицы2,
        |   Характеристики.Возраст КАК ВозрастИзТаблицы2
        |ИЗ
        |   Справочник.Люди КАК Люди
        |      ПОЛНОЕ СОЕДИНЕНИЕ
        |   Справочник.Характеристики КАК Характеристики
        |      ПО
        |Люди.Наименование = Характеристики.Наименование"
    );
 
    ВыполнитьЗапросИВывестиНаФорму(Запрос); 
 
КонецПроцедуры
 
/// Как сделать перекрестное соединение таблиц в 1с 8.3, 8.2 
 
&НаСервере
Процедура ПерекрестноеСоединениеТаблиц()
 
    //  -------------   --------------------------------
    //  |Люди       |   |   Характеристики              |
    //  -------------   ---------------------------------
    //  |ИМЯ        |   |   ИМЯ             ВОЗРАСТ     |
    //  -------------   ---------------------------------
    //  |Алена      |   |   Алена           21          |
    //  |Алефтина   |   |   Алефтина        18          |
    //  |Владимир   |   |   Павел           25          |
    //  |Владислав  |   |   Петр            30          |
    //  |           |   |   Порфирий        50          |
    //  -------------   ---------------------------------
 
    // Результат перекрестного соединения:
 
    //  ИмяИзТаблицы1   ИмяИзТаблицы2   ВозрастИзТаблицы2
    //  Алена           Алена           21
    //  Алена           Алефтина        18
    //  Алена           Павел           25
    //  Алена           Петр            30
    //  Алена           Порфирий        50
    //  Алефтина        Алена           21
    //  Алефтина        Алефтина        18
    //  Алефтина        Павел           25
    //  Алефтина        Петр            30
    //  Алефтина        Порфирий        50
    //  Владимир        Алена           21
    //  Владимир        Алефтина        18
    //  Владимир        Павел           25
    //  Владимир        Петр            30
    //  Владимир        Порфирий        50
    //  Владислав       Алена           21
    //  Владислав       Алефтина        18
    //  Владислав       Павел           25
    //  Владислав       Петр            30
    //  Владислав       Порфирий        50    
 
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |   Люди.Наименование КАК ИмяИзТаблицы1,
        |   Характеристики.Наименование КАК ИмяИзТаблицы2,
        |   Характеристики.Возраст КАК ВозрастИзТаблицы2
        |ИЗ
        |   Справочник.Люди КАК Люди,
        |   Справочник.Характеристики КАК Характеристики"
    );
 
    ВыполнитьЗапросИВывестиНаФорму(Запрос);
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)

Соединение в запросах в языке 1С 8.3, 8.2 (в примерах)

<<< Основы Группировка Условия Упорядочивание Функции
<<< Итоги Соединение Объединение Параметры

С уважением, (преподаватель школы 1С программистов и разработчик обновлятора).



Владимир Милькин
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться: