Можем ли мы использовать диаграммы Венна, чтобы охарактеризовать взаимосвязь между INNER, OUTER, LEFT и RIGHT JOINs?

Связанный вопрос и ответ (Уместно ли использовать диаграммы Венна для изображения соединений SQL, в которых таблицы являются наборами?) демонстрируют, что характеризовать соединения в целом с помощью следующей диаграммы Венна неуместно:

введите здесь описание изображения

Однако моя интуиция по-прежнему говорит, что диаграммы Венна могут быть полезны для изображения некоторых отношений между внутренними / внешними / левыми / правыми соединениями. Можно ли формализовать эту интуицию?


person Colm Bhandal    schedule 09.05.2020    source источник
comment
У вас есть не менее трех многословных вопросов по этой теме. Наверняка это уже где-то обсуждали до забвения.   -  person Nick.McDermaid    schedule 09.05.2020
comment
blog.jooq.org / 2016/07/05 /   -  person a_horse_with_no_name    schedule 09.05.2020
comment
@ Nick.McDermaid У меня действительно много вопросов по этой теме. Все они спрашивают разные вещи. Действительно, в сети есть и другие места, такие как блоги, где можно подробно обсуждать объединения, и есть учебники, в которых они подробно объясняются, но я хочу, чтобы люди, посещающие этот сайт, могли получить точную информацию о объединениях. И, к сожалению, существующие объяснения объединений, получившие наибольшее количество голосов, неадекватны, и хорошие объяснения похоронены под неадекватными.   -  person Colm Bhandal    schedule 10.05.2020


Ответы (2)


Я согласен с ответами на другой вопрос, в котором указано, что диаграммы Венна не подходят для объяснения JOINs.

Основная причина в том, что диаграммы Венна DO представляют что-то полезное и важное для понимания множеств - и, следовательно, SQL, который основан на множествах. То, что обозначено как «ВНУТРЕННЕЕ СОЕДИНЕНИЕ», на самом деле INTERSECT. То, что обозначено как «ПОЛНОЕ СОЕДИНЕНИЕ», на самом деле UNION.

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

Если вы хотите визуализировать соединения, вам действительно понадобятся дополнительные измерения.

person Gordon Linoff    schedule 09.05.2020
comment
Спасибо за комментарий. Однако я не уверен, является ли это ответом, комментарием к моему ответу на этот вопрос, комментарием к моему ответу на связанный вопрос или просто общим комментарием? Просьба уточнить... - person Colm Bhandal; 09.05.2020
comment
Вы не объясняете, что именно и как изображено на такой диаграмме. Изображение чего именно? действительно пересекаются / объединяются непонятно. - person philipxy; 09.05.2020
comment
@ColmBhandal. . . Ваш вопрос связан с ответом на другой вопрос. Это ответ, к которому это относится. - person Gordon Linoff; 10.05.2020
comment
@philipxy: Я думаю, понятно, что имеет в виду Гордон: диаграммы показывают результат ПЕРЕСЕЧЕНИЯ, не результат ВНУТРЕННЕГО СОЕДИНЕНИЯ - person a_horse_with_no_name; 10.05.2020
comment
@a_horse_with_no_name Вы так же расплывчаты. Каковы элементы наборов и что представляет собой каждый набор (или, если не установлен, кружок)? Я тоже догадываюсь. Это не проясняет. Более того, тела таблиц - это не наборы, а пакеты, поэтому нетривиально объяснить, как элементы оказываются в одном месте, а не в другом. Одна и та же бесцеремонная неряшливость снова и снова. - person philipxy; 10.05.2020
comment
@philipxy. . . Таблицы - это наборы, в которых каждая строка является отношением. Это хорошо определено. Диаграмма Венна изображает множества. Нетрудно предположить, что диаграмма Венна показывает строки. Это в определении диаграмм и таблиц Венна. Если вы понимаете, что это такое, нет никакой неопределенности. - person Gordon Linoff; 10.05.2020
comment
Я хорошо понимаю. Таблицы SQL не являются наборами. Пожалуйста, не делайте этого ad hominem. Я задолбался. - person philipxy; 10.05.2020
comment
@philipxy: если таблицы не являются наборами, вы не можете использовать диаграммы Венна для начала, потому что диаграммы Венна описывают наборы - person a_horse_with_no_name; 10.05.2020
comment
@philipxy Вы уже упоминали аргумент "наборы против сумок". Однако в WLOG мы можем просто присвоить уникальный идентификатор каждой строке и охарактеризовать всю таблицу как набор. Эта характеристика работает для определения соединений. Однако я думаю, что весь этот аргумент упускает из виду суть вопроса. - person Colm Bhandal; 10.05.2020
comment
@GordonLinoff Я не отрицал этот ответ. Однако я тоже не поддержал его, потому что не думаю, что вы полностью понимаете вопрос. Вопрос говорит о том, что точная интерпретация приведенных диаграмм Венна неверна, мы это знаем. Но есть ли еще какие-нибудь диаграммы Венна, которые можно использовать для описания объединений? Ответ положительный. И вы на самом деле ссылаетесь на это в своем ответе, что еще больше сбивает с толку. - person Colm Bhandal; 10.05.2020
comment
@GordonLinoff Полностью согласен. Я вообще не согласен с анонимными отрицательными голосами. Я уверен, что мета-тема обсуждалась. Я заметил, что вы отредактировали свой ответ ... но я думаю, вам не хватает тонкости вопроса. Я спрашиваю, как охарактеризовать отношения между объединениями, а не определять соединения в первую очередь. Для характеристики взаимосвязи полезно использовать диаграммы Венна, но вы, конечно, все равно должны определить их в первую очередь. Вот почему я разместил эту пару вопросов и ответов вместе. - person Colm Bhandal; 10.05.2020

да. Существует диаграмма Венна, которая имеет смысл описать отношения между различными типами соединений. Однако в вопросе показана не диаграмма Венна. Это неуместно, как показано в связанном вопросе. Итак, какая диаграмма Венна подходит?

Что ж, допустим, мы уже определили наборы, представляющие результат левого и правого соединения. Назовем эти наборы Left и Right. Тогда у нас есть следующие отношения:

  • LeftRight = Полное внешнее соединение
  • LeftRight = Внутреннее соединение

В виде диаграммы Венна:

введите здесь описание изображения

Педагогическая записка

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

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

person Colm Bhandal    schedule 09.05.2020
comment
Голосование на SO / SE является анонимным и не требует комментариев, поэтому неуместно утверждать, что голосование без комментариев является каким-то грубым. Более того, на голоса против, сопровождаемые комментариями, часто отвечают отрицательные голоса мести. - person philipxy; 11.05.2020
comment
Диаграммы представлены нечетко. Они расположены в неправильном порядке. Непонятно, что делают внутреннее и внешнее или синий. Внешний должен быть полным. На самом деле вы не говорите, что это для случая, когда 4 выхода представляют собой наборы значений строк. Всегда указывайте легенду для всех аспектов диаграммы. Для дальнейшего объяснения - например, дать учебное пособие о том, как читать диаграмму - но в противном случае, поскольку легенда ясна, почему? - используйте слова, чтобы четко сказать, что происходит, например, «в левой паре кружков левый кружок представляет ... нижняя метка на синем - пересечение…» и т. д. ** - person philipxy; 11.05.2020
comment
@philipxy Хорошо, честно, теперь я вижу проблему с неанонимным голосованием против. Однако анонимное голосование против, на мой взгляд, является грубым. Потому что это не позволяет улучшить свой ответ. На самом деле, я начинаю думать, что голосование против - плохая идея. Должны быть просто более совершенные флаги, позволяющие убирать флажки по определенным причинам. Таким образом, у нас может быть анонимность, а также полезная критика. - person Colm Bhandal; 11.05.2020
comment
Что касается ваших конкретных критических замечаний, @philipxy, спасибо за них. Все они действительны и указывают на то, что этот ответ действительно заслуживает отрицательной оценки. Я отредактирую его, если найду для этого силы духа, зная, что мое редактирование может не побудить человека, проголосовавшего против, удалить свой голос против. - person Colm Bhandal; 11.05.2020
comment
Возможно, вам будет интересно поискать в Google или SE и прочитать некоторые из триллионов Meta Stack Exchange и Meta Stack Overflow Вопросы и ответы по поводу голосования против. Почему не является обязательным предоставление обратной связи при голосовании против и почему идеи, предполагающие такое отрицательное мнение, принимаются? - person philipxy; 11.05.2020
comment
@philipxy Я планирую разобраться в проблеме отрицательных голосов. Спасибо. - person Colm Bhandal; 12.05.2020