Визуальное представление, как соединяются таблицы в запросе
При работе с запросами в первое время трудно сообразить как нужно соединять таблицы, чтобы получился желаемый результат. Нашел статью где в визуальной форме приведен пример соединения таблиц
Оригинал статьи (на англйиском)
Оглавление
Левое соединение без пересечений с правой таблицей
Исходные данные
Для лучшего понимания дополнил примерами запроса который можно посмотреть в консоли запросов. Чтобы не отвлекали данные в примере использую 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)
Результат полного соединения
Теперь если Вам понадобится получить данные из двух таблиц соединением, то достаточно представить таблицы как окружности и определить данные из каких секторов окружностей нужна и сразу станет ясно какое соединение использовать.