В чем разница между внутренним соединением, левым соединением, правым соединением и полным соединением? [дубликат]

этот вопрос уже есть ответ здесь:

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

3 ответов


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

alt text

также проверьте этот пост:SQL SERVER-лучшая производительность - слева присоединиться или нет?.

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


ВНУТРЕННЕЕ СОЕДИНЕНИЕ получает все записи, которые являются общими для обеих таблиц на основе внешнего ключа

ЛЕВОЕ СОЕДИНЕНИЕ получает все записи из левой связанной таблицы, но если вы выбрали несколько столбцов из правой таблицы, если нет связанных записей, эти столбцы будут содержать NULL

ПРАВОЕ СОЕДИНЕНИЕ похоже на приведенное выше, но получает все записи в правой таблице

ПОЛНОЕ ПРИСОЕДИНЕНИЕ получает все записи из обоих таблицы и помещает NULL в столбцы, где связанные записи не существуют в противоположной таблице


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

в SQL доступны различные типы соединений:

ВНУТРЕННЕЕ СОЕДИНЕНИЕ: возвращает строки, когда есть совпадение в обеих таблицах.

ЛЕВОЕ СОЕДИНЕНИЕ: возвращает все строки из левой таблицы, даже если нет совпадений в таблице справа.

ПРАВОЕ ПРИСОЕДИНЕНИЕ: возвращает все строки из правой таблицы, даже если в левой таблице нет совпадений.

ПОЛНОЕ ПРИСОЕДИНЕНИЕ: он сочетает в себе результаты как левого, так и правого внешних соединений.

объединенная таблица будет содержать все записи из обеих таблиц и заполнять нули для отсутствующих совпадений с обеих сторон.

SELF JOIN: используется для присоединения таблицы к себе, как если бы таблица была двумя таблицами, временно переименовывая по крайней мере одну таблицу в SQL заявление.

КАРТЕЗИАНСКОЕ СОЕДИНЕНИЕ: возвращает декартово произведение наборов записей из двух и более соединяемых таблицах.

мы можем взять каждый первые четыре соединения в деталях:

у нас есть две таблицы со следующими ценности.

таблицы 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

ЛЕВОЕ СОЕДИНЕНИЕ

Примечание: даст все выбранные строки в таблице, а также любые общие выбранные строки в 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, плюс любые общие выбранные строки в таблице.

синтаксис

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

интересные Факт

для внутренних соединений порядок не имеет значения

для (левого, правого или полного) внешних соединений порядок имеет значение

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