У чому різниця між 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 отримує всі записи з ЛІВОЇ зв'язаної таблиці, але якщо ви вибрали деякі стовпці з ПРАВОЇ таблиці, то якщо в них немає пов'язаних записів, то ці стовпці будуть містити NULL.
RIGHT JOIN подібний до попереднього, але отримує всі записи з ПРАВОЇ таблиці.
FULL JOIN отримує всі записи з обох таблиць і ставить NULL в стовпці, де немає пов'язаних записів в протилежній таблиці.
Речення SQL JOIN використовується для об'єднання рядків з двох або більше таблиць, на основі спільного поля між ними.
У мові SQL існують різні типи об'єднань:
INNER JOIN: повертає рядки при наявності збігу в обох таблицях.
LEFT JOIN: повертає всі рядки з лівої таблиці, навіть якщо в правій таблиці немає збігів.
RIGHT JOIN: повертає всі рядки з правої таблиці, навіть якщо в лівій таблиці немає збігів.
ПОВНЕ ОБ'ЄДНАННЯ: Об'єднує результати як лівого, так і правого зовнішнього об'єднання.
Об'єднана таблиця буде містити всі записи з обох таблиць і заповнюватиметься NULL для відсутніх збігів з обох сторін.
SELF JOIN: використовується для приєднання таблиці до самої себе, як якщо б таблиця складалася з двох таблиць, тимчасово перейменовуючи принаймні одну таблицю в SQL-запиті.
CARTESIAN JOIN: повертає декартовий добуток наборів записів з двох або більше таблиць, що об'єднуються.
Ми можемо взяти кожні перші чотири об'єднання в Деталі:
У нас є дві таблиці з наступними значеннями.
Таблиця A
id firstName lastName
.......................................
1 arun prasanth
2 ann antony
3 sruthy abc
6 new abc
Таблиця B
id2 age Place
................
1 24 kerala
2 24 usa
3 25 ekm
5 24 chennai
....................................................................
ВНУТРІШНЄ ПРИЄДНАННЯ
Примітка: вказує на перетин двох таблиць, тобто на рядки, які є спільними в таблиціA та таблиціB
Синтаксис
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
ЛІВОРУЧ ПРИЄДНАТИСЯ
Примітка : виведе всі виділені рядки в ТаблиціA, а також будь-які спільні виділені рядки в ТаблиціB.
Синтаксис
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
ПРАВОРУЧ ПРИЄДНАТИСЯ
Примітка : виведе всі виділені рядки в ТаблиціB плюс будь-які спільні виділені рядки в ТаблиціA.
Синтаксис
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 не має значення порядок
Для (LEFT, RIGHT або FULL) OUTER з'єднань порядок має значення
Краще перевірте це Посилання, воно дасть вам цікаві подробиці про порядок об'єднання