Как стать автором
Обновить

Комментарии 29

Серые прямоугольники - это отфильтрованные join'ами данные, которые не включены в результат. Польза от них большая.

Посмотрел. Нет. Не читал их.

У вас на прямоугольниках соединение один к одному.
А один ко многим? А многие ко многим?

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

Долго думал над этими вариантами. Пока не увидел решение. Думаю картинка не сможет раскрыть эти варианты. Тут нужна какая нибудь анимация.

Вообще на картинке прямоугольники джойнятся на плоскости по координате Y. А если добавить 3-е измерение может и получится

Там под капотом ещё несколько операций Selection, Projection. Их проще изучать по-отдельности. На мой взгляд таблицы лучше всего подходят для иллюстрации. Хотя вместо конкретных значений можно попробовать цветовую раскраску как у вас, но различая для разных таблиц и колонок. А вообще Relational Algebra.

Я слабо понимаю, зачем это нужно. Все эти схемы не дают понимания, что такое декартово произведение, что число строк может перемножаться. Связь в join может быть по не уникальным столбцам или там может быть какое-то другое условие кроме равенства.

при изучении джоинов как раз таки начинать надо не с декартова произведения, а с джоина по FK->PK. оно гораздо более и распространено и интуитивно понятно. Потом учатся различия между inner и outer - потом full, left, right. Потом джоины не по PK, потом не по эквисоединению.... и только потом cross join - как самый вырожденный случай

У меня первой книжкой по базам была "Введение в системы баз данных" Дейта. Он сначала даёт реляционную алгебру, а потом на этой основе рассказывает про SQL. С пониманием джоинов вообще не было проблем. Cross join это вообще самое простое - тупо берём все возможные комбинации. Он не вырожденный, а наиболее общий. Вот для всех остальных частных случаев уже приходится включать воображение.

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

А как на вашей схеме будет тогда выглядеть FULL JOIN?

это задачка со звездочкой, на собесе джунов.

Как наложенные друг на друга лефт и райт без серых частей же

не понял что даёт замена кругов на прямоугольники

Круги пересекали, а прямоугольники приставляют друг к другу)

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

точнее для иллюстрации появляющихся null'ов.


да, мой вопрос был неуместен

и не только нулов, при inner joine никаких нулов не добавиться,а столбцы будут новые

Предлагаю простую схему для понимания join' ов:)

Inner join - стопка водки только с закуской

Left - закуска есть или нет все равно пьем

Right - я пока ем, а вы наливайте что есть

Full - пьем жрем все до чего дотянулся

Full exclusive - пьем жрем не закусываем

Left exclusive - кто взял закуску не пьет

Right exclusive - кому налили не жрет)

я бы уточнил, это CROSS - "пьем жрем все до чего дотянулся "

а FULL - если и закусываем, то только подходящими закусками под каждый алкоголь

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации