Понимание Соединений Нарушено. Продолжение. Попытка Альтернативной Визуализации

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

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

Готовимся к записи шестого выпуска подкаст «Цинковые изделия» (где мы договорились обсудить статью) кажется, нам удалось найти один интересный вариант визуализации.

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

Как мы выяснили в комментариях к предыдущей статье, соединение — это скорее декартово произведение, чем пересечение.

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

Таким образом, элементами таблицы будут все комбинации всего.

Абстрактно это нарисовать сложно, поэтому придется использовать пример.

Допустим, у нас есть две таблицы.

В одном из них

  
  
  
  
  
   

id -- 1 1 6 5

В другой:

id -- 1 1 2 3 5

Немедленный отказ от ответственности: я назвал поле «id» просто для краткости.

Многие в прошлой статье возмутились, как это так - id повторяются, это безобразие.

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

В общем, дело не в этом.

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

Начнем с CROSS JOIN:

ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ



SELECT t1.id, t2.id FROM t1 CROSS JOIN t2

CROSS JOIN — это все возможные комбинации, которые можно получить из двух таблиц.

Визуализировать это можно так: по оси X — одна таблица, по оси Y — другая, все ячейки внутри (выделены оранжевым цветом) — результат

Понимание соединений нарушено.
</p><p>
 Продолжение.
</p><p>
 Попытка альтернативной визуализации



ВНУТРЕННЕЕ СОЕДИНЕНИЕ

INNER JOIN (или просто JOIN) — это тот же CROSS JOIN, который сохраняет только те элементы, которые удовлетворяют условию, записанному в конструкции «ON».

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



SELECT t1.id, t2.id FROM t1 INNER JOIN t2 ON t1.id = t2.id



Понимание соединений нарушено.
</p><p>
 Продолжение.
</p><p>
 Попытка альтернативной визуализации



ЛЕВОЕ ПРИСОЕДИНЕНИЕ

LEFT OUTER JOIN (или просто LEFT JOIN) — то же самое, что INNER JOIN, но дополнительно мы добавляем null для строк из первой таблицы, для которых во второй ничего не найдено

SELECT t1.id, t2.id FROM t1 LEFT JOIN t2 ON t1.id = t2.id



Понимание соединений нарушено.
</p><p>
 Продолжение.
</p><p>
 Попытка альтернативной визуализации



ПРАВОЕ ПРИСОЕДИНЕНИЕ

RIGHT OUTER JOIN (или RIGHT JOIN) аналогичен LEFT JOIN, только в обратном порядке.

Те.

это INNER JOIN + null для строк из второй таблицы, для которых в первой ничего не найдено

SELECT t1.id, t2.id FROM t1 RIGHT JOIN t2 ON t1.id = t2.id



Понимание соединений нарушено.
</p><p>
 Продолжение.
</p><p>
 Попытка альтернативной визуализации

→ Вы можете поиграть с запросами Здесь

выводы

Кажется, это простая визуализация.

Хотя и имеет ограничения: показывает случай, когда в ON записано равенство, а не что-то мудреное (любое логическое выражение).

Кроме того, не рассматривается случай, когда среди значений таблицы имеется null. Те.

Это все еще некоторое упрощение, но, похоже, оно получилось лучше и точнее, чем круги Венна.

Подпишитесь на наш подкаст «Цинк Прод» , там мы обсуждаем базы данных, разработку программного обеспечения и другие интересные вещи.

Теги: #программирование #Разработка сайтов #postgresql #sql #join #Внутреннее соединение #Правое соединение #Левое соединение #Круги Венна
Вместе с данным постом часто просматривают: