Многие из вас читали предыдущая статья о том, как неправильная визуализация, объясняющая принцип работы JOIN, может в некоторых случаях сбивать с толку.Теги: #программирование #Разработка сайтов #postgresql #sql #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 — другая, все ячейки внутри (выделены оранжевым цветом) — результат
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
INNER JOIN (или просто JOIN) — это тот же CROSS JOIN, который сохраняет только те элементы, которые удовлетворяют условию, записанному в конструкции «ON».Обратите внимание на ситуацию, когда записи дублируются — с единицами будет четыре результата.
SELECT t1.id, t2.id FROM t1 INNER JOIN t2 ON t1.id = t2.id
ЛЕВОЕ ПРИСОЕДИНЕНИЕ
LEFT OUTER JOIN (или просто LEFT JOIN) — то же самое, что INNER JOIN, но дополнительно мы добавляем null для строк из первой таблицы, для которых во второй ничего не найденоSELECT t1.id, t2.id FROM t1 LEFT JOIN t2 ON t1.id = t2.id
ПРАВОЕ ПРИСОЕДИНЕНИЕ
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
→ Вы можете поиграть с запросами Здесьвыводы
Кажется, это простая визуализация.Хотя и имеет ограничения: показывает случай, когда в ON записано равенство, а не что-то мудреное (любое логическое выражение).
Кроме того, не рассматривается случай, когда среди значений таблицы имеется null. Те.
Это все еще некоторое упрощение, но, похоже, оно получилось лучше и точнее, чем круги Венна.
Подпишитесь на наш подкаст «Цинк Прод» , там мы обсуждаем базы данных, разработку программного обеспечения и другие интересные вещи.
-
Jpeg И Gif: Различия
19 Oct, 24 -
Как Увеличить Arpu Местному Оператору Связи
19 Oct, 24 -
Freebsd 7.0 Rc2
19 Oct, 24 -
Точная Финансовая Информация
19 Oct, 24