Диаграмма Венна для естественного соединения - PullRequest
1 голос
/ 11 апреля 2019

Я пытался полностью понять концепцию соединений SQL, диаграммы Венна мне очень помогли в этом. Я нашел их для всех видов соединений, но не для естественных.

Как будет выглядеть диаграмма Венна для естественного соединения?

1 Ответ

3 голосов
/ 12 апреля 2019

Диаграммы Венна не очень полезны для понимания естественного соединения или внутреннего соединения.Большинство диаграмм Венна, связанных с объединениями при переполнении стека, представляют собой бесполезные искажения - даже в тех случаях, когда диаграмма Венна может быть полезна.

Вот некоторые допустимые варианты использования диаграмм Венна для естественного объединения SQL:

Если вы игнорируете порядок столбцов, мы можем иметь область, представляющую собой набор, элементами которого являются имена столбцов ассоциированной таблицы.Тогда элементы левого и правого кругов - это имена столбцов левой и правой таблиц, а объединенные элементы - имена столбцов результата.

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

Но ни диаграмма, ни пара не сообщают нам, каковы выходные строки.

Из моего ответа на CROSS JOIN vs INNER JOIN в SQL Server 2008 :

Диаграммы Венна Диаграмма Венна с двумя пересекающимися кругамиможет проиллюстрировать разницу между выходными строками для INNER, LEFT, RIGHT & FULL JOIN для одного и того же входа.И когда ВКЛЮЧЕНО, безусловно, ИСТИНА, результат ВНУТРЕННЕГО СОЕДИНЕНИЯ такой же, как ВРЕМЕННОЕ СОЕДИНЕНИЕ.Также он может иллюстрировать строки ввода и вывода для INTERSECT, UNION и EXCEPT.И когда оба входа имеют одинаковые столбцы, результат INTERSECT такой же, как для стандартного SQL NATURAL JOIN, а результат EXCEPT такой же, как для некоторых идиом, включающих LEFT & RIGHT JOIN.Но это не иллюстрирует, как (INNER) JOIN работает в целом.Это просто кажется правдоподобным на первый взгляд .Он может идентифицировать части ввода и / или вывода для особых случаев ON, PK (первичные ключи), FK (внешние ключи) и / или SELECT.Все, что вам нужно сделать, чтобы увидеть это, это определить , что именно являются элементами наборов, представленных кружками .(Какие запутанные представления никогда не проясняются.) (Помните, что обычно для объединений выходные строки имеют разные заголовки от входных строк .)

Я повторяю с акцентом:

Но это не иллюстрирует, как (INNER) JOIN работает в целом.

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

Из моих комментариевв ответе о его расширенной диаграмме Эйлера «Рисунок 2» для перекрестного соединения (которую я ошибочно называю Венном) и его диаграмме Венна «Рисунок 1» для внутреннего соединения (используя «ключ» в смысле «легенды»):

Ключ рисунка 2 является сложным: он окружает (нерелевантные по цвету) элементы аргумента CROSS JOIN & число (значение не имеет значения) является его строкой, а строка (не имеет значения цвет) являетсястрока результатов.Для таблиц в виде сумок это , а не диаграмма Венна: для строк в качестве значений это неправильно;для строк как элементов они не могут быть общими.Для таблиц в виде наборов вам не нужна диаграмма Венна.Рисунок 1 - это обычная ужасная попытка объяснить JOIN.Его ключ также сложен: он предназначен только для таблиц в виде наборов и только для сравнения и только для одного [столбца];он также представляет входные данные иначе, чем выходные данные.Напишите it ['s legend ] для JOIN в целом.

Из моих комментариев к В чем разница между «INNER JOIN» и«НАРУЖНОЕ СОЕДИНЕНИЕ»? :

Диаграммы Венна показывают элементы в наборах. Просто попробуйте точно определить, что это за наборы и каковы элементы этих диаграмм. Наборы не являются таблицами, а элементы не являются их строками. Также можно объединить любые две таблицы, поэтому PK и FK не имеют значения. Все фальшивая . Ты делаешь то же, что и тысячи других - у тебя смутное впечатление ты (ошибочно) предполагаешь имеет смысл.

Из ответов и комментариев и их ссылок ниже только одна фактически объясняет, как диаграммы Венна представляют операторы: Область пересечения окружности представляет собой набор строк в A JOIN B. Область, уникальная для каждой окружности, представляет набор строк, который вы получите, взяв строки его таблицы, которые не участвуют в A JOIN B, и добавив столбцы, уникальные для другой таблицы, которые все имеют значение NULL. (И большинство дают смутное поддельное соответствие кругов А и В.)

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

Перечень внутренних и внешних объединений с помощью диаграмм Венна:

С мой комментарий о левом соединении и левом внешнем соединении в SQL Server

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

Из моего комментария к моему ответу в чем разница между «INNER JOIN» и «OUTER JOIN»?

Я должен признать, что, несмотря на мою быструю формулировку в комментариях, поскольку в SQL используются мешки и нули, а культура SQL не имеет общей терминологии для обозначения и различия между соответствующими понятиями, нетривиально даже ясно объяснить, как элементы диаграмма Венна - 1: 1 с выходными «строками», не говоря уже о «строках». Или то, что делают внутренние или внешние соединения, не говоря уже об их разнице. «value» может включать или не включать NULL, «row» может быть списком значений против слота в табличном значении или переменной, а «=» может быть SQL »=« vs равенство.

PS Часто диаграммы называются диаграммами Венна , когда они действительно диаграммы Эйлера .

...