Я хотел бы быстро разбить типы соединений MySQL. Я знаю об этом, остальные я не уверен, что они имеют в виду.
- разделенная запятая (что именно это короткий для?):
SELECT * FROM a, b WHERE b.id = a.beeId AND ...
- показать информацию из a, даже если в b нет совпадений:
SELECT * FROM a LEFT OUTER JOIN b ON b.id = a.beeId WHERE ...
Я видел другие объединения, но хочу знать, что отличает их, что INNER
/ OUTER
делает добавление LEFT
изменений.
Я уже знаю, как работают объединения, я просто хочу знать, существуют ли другие типы объединений или это просто разные способы получить тот же результат.
Ответы:
(c) Найдено в G + "Визуализация данных"
или посмотрите следующие ссылки для хорошего обзора:
http://www.khankennels.com/blog/index.php/archives/2007/04/20/getting-joins/
http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html
источник
cross join
, что делает декартово произведение.There's also a cartesian product or cross join, which as far as I can tell, can't be expressed as a Venn diagram:
Исходя из вашего комментария, простые определения каждого лучше всего найти в W3Schools . Первая строка каждого типа дает краткое объяснение типа соединения.
КОНЕЦ РЕДАКТИРОВАНИЯ
В двух словах, разделенный запятыми пример
выбирает каждую запись из таблиц a и b с запятыми, разделяющими таблицы, это можно использовать также в столбцах, таких как
Затем он получает указанную информацию в строке, в которой столбцы b.id и a.beeId имеют совпадение в вашем примере. Так что в вашем примере он получит всю информацию из таблиц a и b, где b.id равен a.beeId. В моем примере он получит всю информацию из таблицы b и только информацию из столбца a.beeName, когда b.id равен a.beeId. Обратите внимание, что есть также предложение AND, это поможет уточнить ваши результаты.
Для некоторых простых руководств и объяснений по соединениям mySQL и оставленным соединениям посмотрите учебники Tizag по MySQL. Вы также можете проверить веб-сайт Кита Дж. Брауна для получения дополнительной информации о соединениях, что также весьма неплохо.
Я надеюсь, это поможет вам
источник
У меня есть 2 таблицы, как это:
INNER JOIN заботится об обеих таблицах
INNER JOIN заботится об обеих таблицах, поэтому вы получите строку, только если в обеих таблицах есть одна. Если существует более одной подходящей пары, вы получите несколько строк.
INNER JOIN не имеет значения, если вы измените порядок в обратном, потому что он заботится об обеих таблицах:
Вы получаете те же строки, но столбцы в другом порядке, потому что мы упоминали таблицы в другом порядке.
LEFT JOIN заботится только о первом столе
LEFT JOIN заботится о первой таблице, которую вы ей предоставляете, и мало заботится о второй, поэтому вы всегда получаете строки из первой таблицы, даже если во второй нет соответствующей строки:
Выше вы можете видеть все строки таблицы table_a, хотя некоторые из них не совпадают ни с чем в таблице b, но не все строки таблицы table_b - только те, которые соответствуют чему-то в table_a.
Если мы изменим порядок таблиц, LEFT JOIN будет вести себя по-другому:
Теперь мы получаем все строки таблицы table_b, но только совпадающие строки таблицы table_a.
RIGHT JOIN заботится только о втором столе
a RIGHT JOIN b
получает вас точно так же, как строкиb LEFT JOIN a
. Единственным отличием является порядок столбцов по умолчанию.Это те же строки
table_b LEFT JOIN table_a
, что и мы видели в разделе LEFT JOIN.Так же:
Это те же строки, что и
table_a LEFT JOIN table_b
.Нет присоединения вообще дает вам копии всего
Нет предложения Join: если вы пишете свои таблицы вообще без предложения JOIN, просто разделяя их запятыми, вы получаете каждую строку первой таблицы, записанную рядом с каждой строкой второй таблицы, в каждой возможной комбинации:
(Это из моего блога Примеры типов соединений SQL )
источник
Полное внешнее соединение не существует в MySQL, вам может понадобиться комбинация левого и правого соединения.
источник