it-roy-ru.com

В чем разница между INNER JOIN, LEFT JOIN, RIGHT JOIN и FULL JOIN?

В чем разница между INNER JOIN, LEFT JOIN, RIGHT JOIN и FULL JOIN в MySQL ?

1477
Lion King

Чтение этой оригинальной статьи о проекте кода вам очень поможет: Визуальное представление соединений SQL .

alt text

Также проверьте этот пост: SQL SERVER - Лучшая производительность - СЛЕДУЮЩИЙ или НЕ ВХОД? .

Найти оригинал можно по адресу: Разница между JOIN и OUTER JOIN в MySQL .

2940
Pranay Rana

INNER JOIN получает все записи, которые являются общими для обеих таблиц, на основе внешнего ключа.

LEFT JOIN получает все записи из таблицы LEFT, но если вы выбрали несколько столбцов из таблицы RIGHT, если нет связанных записей, эти столбцы будут содержать NULL.

RIGHT JOIN аналогично приведенному выше, но получает все записи в правой таблице.

FULL JOIN получает все записи из обеих таблиц и помещает NULL в столбцы, где связанные записи не существуют в противоположной таблице.

627
Brian Leeming

Предложение SQL JOIN используется для объединения строк из двух или более таблиц на основе общего поля между ними.

В SQL доступны разные типы объединений:

INNER JOIN : возвращает строки, если в обеих таблицах есть совпадение.

LEFT JOIN : возвращает все строки из левой таблицы, даже если в правой таблице нет совпадений.

RIGHT JOIN : возвращает все строки из правой таблицы, даже если в левой таблице нет совпадений.

FULL 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

Интересный факт

Для ВНУТРЕННИХ присоединений порядок не имеет значения

Для (ЛЕВЫХ, ПРАВИЛЬНЫХ или ПОЛНЫХ) НАРУЖНЫХ объединений порядок имеет значение

Лучше пойти проверить это Ссылка, он даст вам интересные детали о порядке присоединения

601
Arunprasanth K V