MySQL: быстрое разбиение типов объединений
Мне бы хотелось быстро разбить типы соединений 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
изменение вещей.
Я уже знаю, как работают соединения, я просто хочу знать, есть ли другие типы объединений или просто разные способы получить тот же результат.
Ответы
Ответ 1
![Found on G+]()
(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
Ответ 2
Основываясь на вашем комментарии, простые определения каждого из них лучше всего найти на W3Schools
Первая строка каждого типа дает краткое описание типа соединения
- JOIN: Возвращает строки, если в обеих таблицах имеется хотя бы одно совпадение.
- LEFT JOIN: возвращает все строки из левой таблицы, даже если в правой таблице нет совпадений
- RIGHT JOIN: вернуть все строки из правой таблицы, даже если в левой таблице нет совпадений
- FULL JOIN: вернуть строки, когда есть совпадение в одной из таблиц
END EDIT
Вкратце, представленный запятой пример, который вы указали из
SELECT * FROM a, b WHERE b.id = a.beeId AND ...
выбирает каждую запись из таблиц a и b с запятыми, разделяющими таблицы, это может использоваться также в столбцах типа
SELECT a.beeName,b.* FROM a, b WHERE b.id = a.beeId AND ...
Затем он получает проинструктированную информацию в строке, где столбец b.id и столбец a.beeId имеют совпадение в вашем примере.
Таким образом, в вашем примере он получит всю информацию из таблиц a и b, где b.id равно a.beeId.
В моем примере он получит всю информацию из таблицы b и только информацию из столбца a.beeName, когда b.id равно a.beeId.
Обратите внимание, что есть также предложение AND, это поможет уточнить ваши результаты.
В некоторых простых руководствах и пояснениях к соединениям mySQL и левым соединениям обращайтесь к учебникам Tizag mySQL. Вы также можете проверить веб-сайт Keith J. Brown для получения дополнительной информации о присоединениях, что тоже неплохо.
Надеюсь, это поможет вам.
Ответ 3
Полное Outer-соединение не существует в mysql, вам может потребоваться комбинация левого и правого соединений.