Поделитесь в соцсетях

Запрос 1С. Визуализация соединений таблиц

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

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

Оригинал статьи (на англйиском)

Оглавление

Исходные данные

Null

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

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

Левое соединение без пересечений с правой таблицей

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

 

 

Исходные данные

Для лучшего понимания дополнил примерами запроса который можно посмотреть в консоли запросов. Чтобы не отвлекали данные в примере использую 3 значения это цифры, они же явлются полями по которым таблицы соединяются.

Число 1 есть только в первой таблице, 2 - в обоих, 3 - только во второй таблице Сразу отмечу, что правое соединение это зеркальное отображение левого соединения, поэтому его не публиковал.

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

Исходные таблицы

 

Null

В результатах соединений можно увидеть Null, если Вы не знаете что это такое прочтите статью Здесь.

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

При таком соединении мы получаем только данные которые есть и в таблице 1 и в таблице 2 (одновременно в 2-х таблицах)

Код запроса

 
ВЫБРАТЬ 1 КАК Таблица1 ПОМЕСТИТЬ Таб1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ 2 КАК Таблица2 ПОМЕСТИТЬ Таб2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ЕстьNull(Таб1.Таблица1, "Null") КАК Таблица1,
	ЕстьNull(Таб2.Таблица2, "Null") КАК Таблица2
ИЗ
	Таб1 КАК Таб1
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таб2 КАК Таб2
		ПО (Таб1.Таблица1 = Таб2.Таблица2)

Результат внутреннего соединения

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

При левом соединении мы получаем только левую таблицу

Код запроса

 
ВЫБРАТЬ 1 КАК Таблица1 ПОМЕСТИТЬ Таб1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ 2 КАК Таблица2 ПОМЕСТИТЬ Таб2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ЕстьNull(Таб1.Таблица1, "Null") КАК Таблица1,
	ЕстьNull(Таб2.Таблица2, "Null") КАК Таблица2
ИЗ
	Таб1 КАК Таб1
		Левое СОЕДИНЕНИЕ Таб2 КАК Таб2
		ПО (Таб1.Таблица1 = Таб2.Таблица2)

Результат левого соединения

 

Левое соединение без пересечений с правой таблицей(уникальные значения левой таблицы)

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

 

Код запроса

 
ВЫБРАТЬ 1 КАК Таблица1 ПОМЕСТИТЬ Таб1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ 2 КАК Таблица2 ПОМЕСТИТЬ Таб2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ЕстьNull(Таб1.Таблица1, "Null") КАК Таблица1,
	ЕстьNull(Таб2.Таблица2, "Null") КАК Таблица2
ИЗ
	Таб1 КАК Таб1
		Левое СОЕДИНЕНИЕ Таб2 КАК Таб2
		ПО (Таб1.Таблица1 = Таб2.Таблица2)
ГДЕ
	Таб2.Таблица2 ЕСТЬ NULL 

Результат левого соединения без пересечений с правой таблицей

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

При таком соединении мы получаем все данные, которые есть в обоих таблицах

Код запроса

 
ВЫБРАТЬ 1 КАК Таблица1 ПОМЕСТИТЬ Таб1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ 2 КАК Таблица2 ПОМЕСТИТЬ Таб2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ЕстьNull(Таб1.Таблица1, "Null") КАК Таблица1,
	ЕстьNull(Таб2.Таблица2, "Null") КАК Таблица2
ИЗ
	Таб1 КАК Таб1
		Полное СОЕДИНЕНИЕ Таб2 КАК Таб2
		ПО (Таб1.Таблица1 = Таб2.Таблица2)

Результат полного соединения

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

Недостаточно прав для комментирования