В чем разница между INNER JOIN, LEFT JOIN, RIGHT JOIN и FULL JOIN?
В чем разница между INNER JOIN
, LEFT JOIN
, RIGHT JOIN
а также FULL JOIN
в MySQL?
3 ответа
Чтение этой оригинальной статьи о проекте Code очень поможет вам: визуальное представление соединений SQL.
Also check this post: SQL SERVER – Better Performance – LEFT JOIN or NOT IN?,
Find original one at: Difference between JOIN and OUTER JOIN in MySQL.
Предложение SQL JOIN используется для объединения строк из двух или более таблиц на основе общего поля между ними.
В SQL доступны разные типы объединений:
INNER JOIN: возвращает строки, если в обеих таблицах есть совпадение.
LEFT JOIN: возвращает все строки из левой таблицы, даже если в правой таблице нет совпадений.
RIGHT JOIN: возвращает все строки из правой таблицы, даже если в левой таблице нет совпадений.
ПОЛНОЕ СОЕДИНЕНИЕ: объединяет результаты как левого, так и правого внешнего соединения.
Объединенная таблица будет содержать все записи из обеих таблиц и заполнять NULL для пропущенных совпадений с обеих сторон.
SELF JOIN: используется для соединения таблицы с самим собой, как если бы эта таблица была двумя таблицами, временно переименовывая хотя бы одну таблицу в операторе SQL.
CARTESIAN JOIN: возвращает декартово произведение наборов записей из двух или более соединенных таблиц.
Мы можем взять каждые первые четыре соединения в деталях:
У нас есть две таблицы со следующими значениями.
TableA
id firstName lastName
.......................................
1 arun prasanth
2 ann antony
3 sruthy abc
6 new abc
TableB
id2 age Place
................
1 24 kerala
2 24 usa
3 25 ekm
5 24 chennai
....................................................................
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Примечание: он дает пересечение двух таблиц, то есть строк, которые они имеют общие в TableA и TableB
Синтаксис
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;
Примените это в нашей таблице образцов:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
INNER JOIN TableB
ON TableA.id = TableB.id2;
Результат будет
firstName lastName age Place
..............................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
ЛЕВЫЙ РЕЙТИНГ
Примечание: выдаст все выбранные строки в TableA, а также все общие выбранные строки в TableB.
Синтаксис
SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
Примените это в нашей таблице образцов:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
LEFT JOIN TableB
ON TableA.id = TableB.id2;
Результат
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
ПРАВИЛЬНОЕ СОЕДИНЕНИЕ
Примечание: выдаст все выбранные строки в TableB, а также все общие выбранные строки в TableA.
Синтаксис
SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;
Примените это в нашей таблице образцов:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
RIGHT JOIN TableB
ON TableA.id = TableB.id2;
Результат
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
NULL NULL 24 chennai
ПОЛНОЕ СОЕДИНЕНИЕ
Примечание: он вернет все выбранные значения из обеих таблиц.
Синтаксис
SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;
Примените это в нашей таблице образцов:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
FULL JOIN TableB
ON TableA.id = TableB.id2;
Результат
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
NULL NULL 24 chennai
Интересный факт
Для ВНУТРЕННИХ присоединений порядок не имеет значения
Для (ЛЕВЫХ, ПРАВИЛЬНЫХ или ПОЛНЫХ) НАРУЖНЫХ объединений порядок имеет значение
Лучше пойти проверить эту ссылку, она даст вам интересные детали о порядке присоединения
INNER JOIN получает все записи, которые являются общими для обеих таблиц, на основе внешнего ключа
LEFT JOIN получает все записи из связанной таблицы LEFT, но если вы выбрали несколько столбцов из таблицы RIGHT, если нет связанных записей, эти столбцы будут содержать NULL
RIGHT JOIN аналогичен приведенному выше, но получает все записи в RIGHT таблице
FULL JOIN получает все записи из обеих таблиц и помещает NULL в столбцы, где связанные записи не существуют в противоположной таблице