В чем разница между INNER JOIN
, LEFT JOIN
, RIGHT JOIN
и FULL JOIN
?
в MySQL?
Чтение этой оригинальной статьи на The Code Project очень поможет вам: Visual Representation of SQL Joins.
Также ознакомьтесь с этим постом: SQL SERVER - Лучшая производительность - LEFT JOIN или NOT IN?.
Найти оригинал можно по адресу: Разница между JOIN и OUTER JOIN в MySQL.
INNER JOIN получает все записи, которые являются общими для обеих таблиц, на основе предоставленного предложения ON.
LEFT JOIN получает все записи из таблицы, связанной с LEFT, но если вы выбрали некоторые столбцы из таблицы RIGHT, если нет связанных записей, эти столбцы будут содержать NULL.
RIGHT JOIN подобен вышеописанному, но получает все записи в таблице RIGHT.
Полное объединение получает все записи из обеих таблиц и помещает NULL в столбцы, где нет связанных записей в противоположной таблице.
Предложение SQL JOIN используется для объединения строк из двух или более таблиц, на основе общего поля между ними.
В SQL существуют различные типы объединений:
INNER JOIN: возвращает строки, если в обеих таблицах есть совпадение.
LEFT JOIN: возвращает все строки из левой таблицы, даже если в правой таблице нет совпадений.
ПРАВОЕ СОЕДИНЕНИЕ: возвращает все строки из правой таблицы, даже если в левой таблице нет совпадений.
ПОЛНОЕ СОЕДИНЕНИЕ: Объединяет результаты как левого, так и правого внешних объединений.
Объединенная таблица будет содержать все записи из обеих таблиц и заполнять NULL для отсутствующих совпадений с обеих сторон.
SELF JOIN: используется для присоединения таблицы к самой себе, как если бы таблица была двумя таблицами, временно переименовывая хотя бы одну таблицу в SQL-операторе.
CARTESIAN JOIN: возвращает декартово произведение наборов записей из двух или более объединенных таблиц.
Мы можем взять каждое из первых четырех объединений в деталях:
У нас есть две таблицы со следующими значениями.
ТаблицаА
id firstName lastName
.......................................
1 arun prasanth
2 ann antony
3 sruthy abc
6 new abc
ТаблицаВ
id2 age Place
................
1 24 kerala
2 24 usa
3 25 ekm
5 24 chennai
....................................................................
INNER JOIN
Примечание :оно дает пересечение двух таблиц, т.е. строки, которые являются общими в таблицеА и таблицеВ
Синтаксис
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
LEFT JOIN
Примечание : даст все выбранные строки в таблицеА, плюс все общие выбранные строки в таблицеВ.
Синтаксис
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
ПРАВОЕ СОЕДИНЕНИЕ
Примечание : даст все выбранные строки в таблицеВ, плюс все общие выбранные строки в таблицеА.
Синтаксис
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-соединений порядок не имеет значения
Для (ЛЕВЫХ, ПРАВЫХ или ПОЛНЫХ) ВНЕШНИХ соединений порядок имеет значение
Лучше посмотрите вот это Ссылка, это даст вам интересные подробности о порядке присоединения