Комментарии 29
Серые прямоугольники - это отфильтрованные join'ами данные, которые не включены в результат. Польза от них большая.
Хорошая схема есть в блоге jooq https://blog.jooq.org/say-no-to-venn-diagrams-when-explaining-joins/
Вы продолжаете тему?
https://habr.com/ru/post/448072/
https://habr.com/ru/post/450528/
Посмотрел. Нет. Не читал их.
Нашел в вашей второй статье в комментах идею своих прямоугольников. Получается в моей только больше красок) https://habr.com/ru/post/450528/comments/#comment_20256152
У вас на прямоугольниках соединение один к одному.
А один ко многим? А многие ко многим?
ну это база, на ее основе уже нарисовать другие случаи не сложно, если есть понимание. Джоин не по уникальному ключу даст дубликацию данных, соответсвенно столбец резульатат подрастет
Долго думал над этими вариантами. Пока не увидел решение. Думаю картинка не сможет раскрыть эти варианты. Тут нужна какая нибудь анимация.
Вообще на картинке прямоугольники джойнятся на плоскости по координате Y. А если добавить 3-е измерение может и получится
Там под капотом ещё несколько операций Selection, Projection. Их проще изучать по-отдельности. На мой взгляд таблицы лучше всего подходят для иллюстрации. Хотя вместо конкретных значений можно попробовать цветовую раскраску как у вас, но различая для разных таблиц и колонок. А вообще Relational Algebra.
Я слабо понимаю, зачем это нужно. Все эти схемы не дают понимания, что такое декартово произведение, что число строк может перемножаться. Связь в join может быть по не уникальным столбцам или там может быть какое-то другое условие кроме равенства.
при изучении джоинов как раз таки начинать надо не с декартова произведения, а с джоина по FK->PK. оно гораздо более и распространено и интуитивно понятно. Потом учатся различия между inner и outer - потом full, left, right. Потом джоины не по PK, потом не по эквисоединению.... и только потом cross join - как самый вырожденный случай
У меня первой книжкой по базам была "Введение в системы баз данных" Дейта. Он сначала даёт реляционную алгебру, а потом на этой основе рассказывает про SQL. С пониманием джоинов вообще не было проблем. Cross join это вообще самое простое - тупо берём все возможные комбинации. Он не вырожденный, а наиболее общий. Вот для всех остальных частных случаев уже приходится включать воображение.
А как на вашей схеме будет тогда выглядеть FULL JOIN?
не понял что даёт замена кругов на прямоугольники
Предлагаю простую схему для понимания join' ов:)

Inner join - стопка водки только с закуской
Left - закуска есть или нет все равно пьем
Right - я пока ем, а вы наливайте что есть
Full - пьем жрем все до чего дотянулся
Full exclusive - пьем жрем не закусываем
Left exclusive - кто взял закуску не пьет
Right exclusive - кому налили не жрет)
SELECT *
FROM vendors
INNER JOIN products ON vendors.vend_id = products.vend_id
Выполнение данной команды наглядно покажет, что иннер джойн приклеивает справа к строкам первой таблицы vendors, строки второй таблицы products, если в обеих строках одинаковое значение в полях vend_id. В итоге получается одна широкая таблица. Объяснять надо с этого простого примера.
Великий Хедли Викхам помимо своего влияния на развитие языка R еще и в визуализацию сложных вещей просто и наглядно умеет.
https://r4ds.hadley.nz/joins.html





https://r4ds.had.co.nz/relational-data.html#join-matches
One table has duplicate keys.

Both tables have duplicate keys

Новая схема SQL Join-ов