левое внешнее соединение означает что в результат соединения войдут

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

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

Перекрестное соединение таблиц

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

Например, в базе есть 2 таблицы: ЛеваяТаблица и ПраваяТаблица. Состав таблиц следующий:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

В результате выполнения следующего запроса:

Будет получен такой результат:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

Каждая запись из левой таблицы была связана с каждой записью из правой таблицы.

Виды соединений в запросе

Соединения нужны для того, чтобы соединить строки разных таблиц по какому-либо условию. Условия указываются после ключевого слова ПО. Может быть несколько условий при одном соединении.

Язык запросов 1С поддерживает следующие виды соединений:

В запросах позволяется не указывать слова внутреннее и внешнее.

Внутреннее соединение

В результате внутреннего соединения таблиц в выборку попадут только те записи, которые удовлетворяют условию соединения:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

В результат запроса не попала четвертая запись из левой таблицы, потому что для нее не нашлось записи в правой таблице, которая бы удовлетворяла условию ЛеваяТаблица.Код = ПраваяТаблица.Код.

Левое соединение

В результате левого соединения таблиц в выборку попадут все записи из левой таблицы, и только те записи из правой таблицы, которые удовлетворяют условию соединения:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

В четвертой строке в полях ПравоеНаименование и ПравыйКод будет NULL.

Правое соединение

Это то же самое, что и левое соединение, только таблицы меняются местами. В результате правого соединения таблиц в выборку попадут все записи из правой таблицы, и только те записи из левой таблицы, которые удовлетворяют условию соединения. Очень редко используется на практике:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

В четвертой строке в полях ЛевоеНаименование и ЛевыйКод будет NULL.

Полное соединение

В результате полного соединения таблиц в выборку попадут все записи из левой таблицы и все записи из правой таблицы. Где условие соединения будет выполнено — записи будут объединены. Где не будет выполнено будет NULL.

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

В четвертой строке в полях ЛевоеНаименование и ЛевыйКод будет NULL. В пятой строке в полях ПравоеНаименование и ПравыйКод будет NULL.

Два левых соединения в запросе

Допустим, что есть еще одна таблица со следующим содержимым:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

И нужно связать и ее и правую таблицу с левой. Для этого можно использовать два левых соединения:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

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

Левое соединение с условием

Если при левом соединении наложить условие на поле правой таблицы, то соединение будет автоматически преобразовано во внутреннее соединение:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

Казалось бы при левом соединении в результат запроса должны были попасть все записи из левой таблицы, но в результате только одна запись. Так происходит, потому что в строках с кодами «000000001», «000000003» и «000000004» в колонке ПравыйКод был получен NULL. После чего было выполнено сравнение значений данной колонки со значением «000000002». Сравнение с NULL всегда возвращает Ложь, поэтому такие записи не попали в результат запроса. На уровне СУБД оптимизатор запроса сразу отлавливает такие моменты и просто преобразует соединение во внутреннее.

Чтобы получить правильный результат нужно условие перенести из предложения ГДЕ в условие соединения:

Источник

левое внешнее соединение.

Одним из видов объединения, доступных в диалоговом окне Слияние в Power Query, является левое внешнее соединение, которое сохраняет все строки из левой таблицы и перемещает все совпадающие строки из правой таблицы. Дополнительные сведения: Общие сведения об операциях слияния

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

На рисунке показана таблица слева с столбцами Date, Каунтрид и Units. Выделенный столбец Каунтрид содержит значения 1 в строках 1 и 2, 3 в строке 3 и 4 в строке 4. Таблица справа содержит столбцы Идентификатор и страна. Столбец «яркий идентификатор» содержит значения 1 в строке 1 (США), 2 в строке 2 (отметив Канада) и 3 в строке 3 (обозначает Панама). Таблица под первыми двумя таблицами содержит столбцы Date, Каунтрид, Units и Country. Таблица содержит четыре строки с двумя верхними строками, содержащими данные для Каунтрид 1, одну строку для Каунтрид 3 и одну строку для идентификатора страны 4. Так как правая таблица не содержит идентификатор 4, значение четвертой строки в столбце Country содержит значение null.

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

Sales: Эта таблица содержит поля Date, каунтрид и Units. Каунтрид — целое числовое значение, представляющее уникальный идентификатор из таблицы « страны ».

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

Страны: Эта таблица является ссылочной таблицей с идентификатором и страной. Поле идентификатора представляет уникальный идентификатор для каждой записи.

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

В этом примере вы объедините обе таблицы с таблицей Sales в качестве левой таблицы, а таблицу страны — как правую. Соединение будет выполнено между следующими столбцами.

Поле из таблицы «продажи»Поле из таблицы «страны»
каунтридидентификатор

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

Чтобы выполнить левое внешнее соединение

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

После выполнения этой операции вы создадите таблицу, которая выглядит как на следующем рисунке.

Источник

Предложение ИЗ (FROM) в языке запросов 1С:Предприятия 8

В данной статье рассмотрено предложение ИЗ, его место и роль в языке запросов 1С:Предприятия 8.

Предложение ИЗ присутствует почти в каждом запросе 1С:Предприятия 8, так как в большинстве случаев именно в нем указываются таблицы-источники данных для запроса. Кроме того, предложение ИЗ позволяет выполнить соединение нескольких таблиц, а также указать параметры при получении виртуальной таблицы.

Ниже рассмотрены следующие темы:

Место предложения ИЗ в структуре запроса

Структуру запроса 1С:Предприятия 8 можно представить в виде следующей схемы:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

Из приведенной схемы можно сделать следующие выводы:

Таблицы-источники

Все таблицы-источники можно поделить на три класса:

На следующих схемах применяются следующие условные обозначения:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

1. Таблицы-источники, связанные со ссылочными объектами конфигурации:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

2. Таблицы-источники, связанные с регистрами:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

3. Таблицы-источники, связанные с другими объектами конфигурации:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

Примеры запросов с предложением ИЗ


Выборка данных из различных таблиц-источников

Выборка элементов справочника:

ВЫБРАТЬ *, Представление ИЗ Справочник.Номенклатура

Выборка документов определенного вида:

ВЫБРАТЬ Ссылка, Номер, Дата, Представление
ИЗ Документ.АвансовыйОтчет

Выборка проведенных документов, входящих в журнал СкладскиеДокументы:

ВЫБРАТЬ Ссылка, Номер, Дата
ИЗ ЖурналДокументов.СкладскиеДокументы
ГДЕ Проведен = Истина

Выборка активных записей регистра накопления:

ВЫБРАТЬ Номенклатура, ПодразделениеКомпании, СуммаПродажи
ИЗ РегистрНакопления.ПродажиКомпании
ГДЕ Активность = Истина

Выборка данных из табличной части документа:

//обращение к табличной части документа
ВЫБРАТЬ Номенклатура, Количество
ИЗ Документ.АвансовыйОтчет.Товары

При обращении к табличной части документа как источнику данных обычные реквизиты документа доступны через поле табличной части Ссылка, например:

ВЫБРАТЬ Ссылка.Номер, Ссылка.Дата, Номенклатура, Количество
ИЗ Документ.АвансовыйОтчет.Товары

Виртуальные таблицы

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

//обращение к виртуальной таблице регистра накопления (вызов без параметров)
ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании.Обороты

//выборка оборотов за период
ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании.Обороты(&Нач, &Кон,,)

//выборка оборотов по конкретному товару
ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании.Обороты(. Номенклатура = &ВыбТовар)

//остатки товаров на определенную дату
ВЫБРАТЬ * ИЗ РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&ВыбДата,)

Замечание. Виртуальная таблица «Остатки», а также «ОстаткиИОбороты» существуют только у регистра накопления типа «Остатки». Виртуальная таблица «Обороты» существует у регистра оборотов и регистра остатков.Виртуальная таблица «ОборотыДтКт» существует только у регистра бухгалтерии с поддержкой корреспонденции.

Псевдонимы источников

Для источников можно задавать псевдонимы с помощью ключевого слова КАК (AS). Тогда при обращении к полям в списке полей выборки, условии и т.д. можно использовать псевдоним (а иногда без этого не обойтись).

ВЫБРАТЬ Продажи.Номенклатура,
Продажи.ПодразделениеКомпании,
Продажи.СуммаПродажи
ИЗ РегистрНакопления.ПродажиКомпании КАК Продажи
ГДЕ Активность = Истина

Вложенный запрос как источник

В системе 1С:Предприятие 8 можно указать в качестве источника другой запрос, т.е. запрос может выбирать данные из вложенного запроса. Для вложенного запроса обязательно указывается псевдоним источника, как показано в следующем примере:

ВЫБРАТЬ
Товары.Номенклатура КАК Товар,
Товары.Номенклатура.Артикул
ИЗ
(
ВЫБРАТЬ Номенклатура ИЗ Документ.ВнутреннийЗаказ.Товары
ОБЪЕДИНИТЬ
ВЫБРАТЬ Номенклатура ИЗ Документ.ЗаказПокупателя.Товары
) КАК Товары

Соединение таблиц

Важной возможностью языка запросов системы 1С:Предприятие 8 является обращение сразу к нескольким таблицам. При этом их можно соединять определенным образом.

Рассмотрим сначала, что произойдет, если в предложении ИЗ будет несколько источников. В этом случае будет сформировано «декартово произведение» двух множеств. Каждой записи одной таблицы будут сопоставлены все записи из другой. Например,

ВЫБРАТЬ Спр.Ссылка, ДокТовары.Номенклатура
ИЗ Справочник.Номенклатура КАК Спр, Документ.АвансовыйОтчет.Товары КАК ДокТовары

Результат запроса содержит все комбинации записей из двух таблиц друг с другом:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

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

При внутреннем соединении в результат запроса попадают только записи удовлетворяющие заданному условию. В связанных таблицах обычно есть одно поле, значения в котором совпадают в двух таблицах, например, ссылка на элемент справочника Номенклатура. Допустим, необходимо выбрать все проданные товары и вывести их в отчет с указанием артикула. Это делает представленный ниже запрос:

ВЫБРАТЬ ДокТовары.Номенклатура, Спр.Артикул, ДокТовары.Количество, ДокТовары.Сумма
ИЗ Справочник.Номенклатура КАК Спр
СОЕДИНЕНИЕ Документ.АвансовыйОтчет.Товары КАК ДокТовары
ПО Спр.Ссылка = ДокТовары.Номенклатура

Результат этого запроса будет следующий:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

Если в таблице будет найдено несколько записей, удовлетворяющих условию соединения, то в результат запроса будут включены все эти записи (см. ниже две записи по номенклатуре «Женские сапоги коричневые»):

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

Замечание. При соединениях чаще всего применяется условие на «равно», но в языке запросов есть возможность использовать все операции сравнения и логические операции И, ИЛИ, НЕ.

Левое внешнее соединение

Конструкция ЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Но, в отличие от внутреннего соединения, в результат запроса надо включить еще и записи из первого источника (указанного слева от слова СОЕДИНЕНИЕ), для которых не найдено соответствующих условию записей из второго источника.

Правило. В случае левого внешнего соединения в результат запроса будут включены все записи из первого источника; они будут соединены с записями из второго источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из второго источника, будут содержать значение NULL в полях, формируемых на основании записей из этого источника.

Обратите внимание, что NULL-значения не являются нулем или пустой строкой. Это специальные маркеры, обозначающие неуказанные (отсутствующие) значения или значения, не имеющие смысла.

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

ВЫБРАТЬ Спр.Наименование КАК Валюта, Рег.Курс
ИЗ Справочник.Валюты КАК Спр
ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних КАК Рег
ПО Спр.Ссылка = Рег.Валюта

Результат запроса показан в следующей таблице:

левое внешнее соединение означает что в результат соединения войдут. Смотреть фото левое внешнее соединение означает что в результат соединения войдут. Смотреть картинку левое внешнее соединение означает что в результат соединения войдут. Картинка про левое внешнее соединение означает что в результат соединения войдут. Фото левое внешнее соединение означает что в результат соединения войдут

Для валюты «AUD» (Австралийский доллар) в таблице среза последних записей регистра сведений «КурсыВалют» не было найдено соответствующей записи, поэтому в поле «Курс» содержится значение NULL.

Правое внешнее соединение

Конструкция ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить еще и записи из второго источника (указанного справа от слова СОЕДИНЕНИЕ), для которых не найдено соответствующих условию записей из первого источника.

Правило. В случае правого внешнего соединения в результат запроса будут включены все записи из второго источника; они будут соединены с записями из первого источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из первого источника, будут содержать значение NULL в полях, формируемых на основании записей из этого источника.

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

ВЫБРАТЬ Спр.Наименование КАК Валюта, Рег.Курс
ИЗ РегистрСведений.КурсыВалют.СрезПоследних() КАК Рег
ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Справочник.Валюты КАК Спр
ПО Спр.Ссылка = Рег.Валюта

Полное внешнее соединение

Конструкция ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить также еще и те записи из обоих источников, для которых не найдено соответствий.

Правило. При полном внешнем соединении в результат запроса будут включены все записи из обоих источников; они будут соединены друг с другом при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из какого-либо источника, будут содержать NULL в полях, формируемых на основании записей из этого источника.

Таким образом, предложение ИЗ является одним из самых важных элементов языка запросов, поскольку позволяет указать таблицы-источники для запроса. Гибкие возможности предложения ИЗ позволяют использовать язык запросов для решения самых разнообразных задач.

Источник

1c8.pl.ua

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

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

Существует четыре вида соединений таблиц, которые обрабатывает механизм запросов 1С:Прсдприятия: Внутреннее, Левое внешнее. Правое внешнее, Полное Внешнее (или. проще. Внутреннее, Левое, Правое, Полное).

Внутреннее соединение

[ВНУТРЕННЕЕ] СОЕДИНЕНИЕ означает, что из обеих исходных таблиц – источников данных в результат запроса необходимо включить только те комбинации записей, которые соответствуют указанному условию. Остальные записи в результат не попадают.Ключевое слова ВНУТРЕННЕЕ можно не указывать вообще, оно повышает наглядность и удобочитаемость текста запроса.

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

Контрагенты
КонтрагентПолное наименование
ИвановИванов И.И.
ПетровПетров П.П.
СидоровСидоров С.С.
Продажи
КонтрагентСумма
Иванов5000
Петров7500
Сидоров15000

Результирующая таблица:

Продажи контрагентам
КонтрагентПолное наименованиеСумма
ИвановИванов И.И.5000
ПетровПетров П.П.7500
СидоровСидоров С.С.15000

Левое (Правое) соединение

ЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Но, в отличие от внутреннего соединения, в результат запроса надо включить также еще и записи из первого (указанного слева от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответствующих условию записей из второго источника. Таким образом, в результат запроса будут включены все записи из первого источника; они будут соединены с записями из второго источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из второго источника, будут содержать NULL в полях, формируемых на основании записей из этого источника.

ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить также еще и записи из второго (указанного справа от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответствующих условию записей из первого источника.Таким образом, в результат запроса будут включены все записи из второго источника; они будут соединены с записями из первого источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из первого источника, будут содержать NULL в полях, формируемых на основании записей из этого источника.

Ситуация осложняется, когда источники совпадают не полностью. ‘Го есть, в одной таблице есть запись с некоторым значением ключа, а в другой такой записи нет. На схеме показана ситуация, когда запись есть в таблице контрагентов, но нет в таблице продаж. Это означает, что некий контрагент ничего у нас не покупал, хотя в справочнике контрагентов он у нас имеется (например, попросил человек выписать ему счёт на оплату, а покупать передумал; вполне жизненная ситуация). В этом случае в выборке на месте отсутствующей записи появится значение Null.

Контрагенты
КонтрагентПолное наименование
ИвановИванов И.И.
ПетровПетров П.П.
СидоровСидоров С.С.
СемёновСемёнов С.С.
Продажи
КонтрагентСумма
Иванов5000
Петров7500
Сидоров15000

Результирующая таблица:

Продажи контрагентам
КонтрагентПолное наименованиеСумма
ИвановИванов И.И.5000
ПетровПетров П.П.7500
СидоровСидоров С.С.15000
СемёновСемёнов С.С.Null

Полное соединение

ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить также еще и записи из второго (указанного справа от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответствующих условию записей из первого источника.Таким образом, в результат запроса будут включены все записи из второго источника; они будут соединены с записями из первого источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из первого источника, будут содержать NULL в полях, формируемых на основании записей из этого источника.

Полное внешнее соединение, это, как ясно уже из названия, дальнейшее развитие Левого (или Правого) соединений. При организации полного соединения важно учитывать такое обстоятельство: при соединении данного вида в запрос попадают все записи из обеих таблиц. Иначе говоря, значение ключевого ноля нам нужно будет получать и из левой, и из правой таблиц. Обратите внимание: обязательно из обеих таблиц! Один из вариантов решения такой: создать для этого дополнительное поле, в котором делать проверку на Null. Если ключ в одной из таблиц равен Null, тогда нужно брать его значение из другой таблицы.

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

Закупки
КонтрагентСумма
Иванов4000
Андреев3500
Продажи
КонтрагентСумма
Иванов5000
Петров7500
Сидоров15000

Таблица после полного соединения, со всеми полями исходных таблиц:

Действующие контрагенты
КонтрагентЗакупкиСуммаЗакупкиКонтрагентПродажиСуммаПродажи
Иванов4000Иванов5000
NullNullПетров7500
NullNullСидоров15000
Андреев3500NullNull

Окончательный вид таблицы, в которой контрагенты сведены в одно поле:

Действующие контрагенты
КонтрагентСуммаЗакупкиСуммаПродажи
Иванов40005000
Петров7500
Сидоров15000
Андреев3500

Ниже приводится вариант соответствующего запроса. Обратите внимание, что данные по контрагентам мы получаем не просто из документов, а из подзапросов. В них мы выполняем группировку по контрагентам таким образом, что бы каждый контрагент был представлен в выборке но одному разу. И, естественно, не забываем про Null:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *