Яка різниця між внутрішнім з'єднанням, лівим з'єднанням, правим з'єднанням і повним з'єднанням?

У чому різниця між 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.

Коментарі (34)

INNER JOIN отримує всі записи, які є спільними для обох таблиць на основі поданого речення ON.

LEFT JOIN отримує всі записи з ЛІВОЇ зв'язаної таблиці, але якщо ви вибрали деякі стовпці з ПРАВОЇ таблиці, то якщо в них немає пов'язаних записів, то ці стовпці будуть містити NULL.

RIGHT JOIN подібний до попереднього, але отримує всі записи з ПРАВОЇ таблиці.

FULL JOIN отримує всі записи з обох таблиць і ставить NULL в стовпці, де немає пов'язаних записів в протилежній таблиці.

Коментарі (6)

Речення 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 з'єднань порядок має значення

Краще перевірте це Посилання, воно дасть вам цікаві подробиці про порядок об'єднання

Коментарі (10)