Подтвердить что ты не робот

Разница между INNER JOIN и LEFT SEMI JOIN

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

В приведенном ниже сценарии, почему я получаю два разных результата?

Набор результатов INNER JOIN намного больше. Может кто-нибудь объяснить? Я пытаюсь получить имена внутри table_1, которые появляются только в table_2.

SELECT name
FROM table_1 a
    INNER JOIN table_2 b ON a.name=b.name

SELECT name
FROM table_1 a
    LEFT SEMI JOIN table_2 b ON (a.name=b.name)
4b9b3361

Ответ 1

An INNER JOIN возвращает столбцы из обеих таблиц. A LEFT SEMI JOIN возвращает только записи из левой таблицы. Это эквивалентно (в стандартном SQL):

SELECT name
FROM table_1 a
WHERE EXISTS(
    SELECT * FROM table_2 b WHERE (a.name=b.name))

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

Я пытаюсь получить имена в таблице_1, которые появляются только в таблице_2.

Тогда a LEFT SEMI JOIN - соответствующий запрос для использования.

Ответ 2

Пробовал в улье и получил нижний вывод

таблица1

1, wqe, chennai, india

2, ст, Salem, Индия

3, Mia, Bangalore, India

4, yepie, NewYork, США

таблица2

1, ЧКЕ, Ченнай, Индия

2, ст, Salem, Индия

3, Mia, Bangalore, India

5, chapie, Лос-Анджелес, США

Внутреннее соединение

SELECT * FROM table1 INNER JOIN table2 ON (table1.id = table2.id);

1 wqe chennai india 1 wqe chennai india

2 stu salem india 2 stu salem india

3 mia bangalore india 3 mia bangalore india

Левая регистрация

SELECT * FROM table1 LEFT JOIN table2 ON (table1.id = table2.id);

1 wqe chennai india 1 wqe chennai india

2 stu salem india 2 stu salem india

3 mia bangalore india 3 mia bangalore india

4 yepie newyork USA NULL NULL NULL NULL

Левая полуавтоматизация

SELECT * FROM table1 LEFT SEMI JOIN table2 ON (table1.id = table2.id);

1 wqe chennai india

2 stu salem india

3 mia bangalore india

Примечание: отображаются только записи в левой таблице, тогда как для Left Join отображаются как отображаемые записи таблицы

Ответ 3

Предположим, что есть 2 таблицы TableA и TableB с двумя столбцами (Id, Data) и следующими данными:

TableA:

Данные идентификатора

1 DataA11

1 DataA12

1 DataA13

2 DataA21

3 DataA31

TableB:

Данные идентификатора

1 DataB11

2 DataB21

2 DataB22

2 DataB23

4 DataB41

Внутренняя идентификация в столбце Id возвращает столбцы из обеих таблиц и только соответствующие записи:

Данные идентификатора данных Id

1 DataA11 1 DataB11

1 DataA12 1 DataB11

1 DataA13 1 DataB11

2 DataA21 2 DataB21

2 DataA21 2 DataB22

2 DataA21 2 DataB23

Left Join (или Left external join) в столбце Id будет возвращать столбцы из обеих таблиц и сопоставлять записи с записями из левой таблицы (значения Null из правой таблицы):

Данные идентификатора данных Id

1 DataA11 1 DataB11

1 DataA12 1 DataB11

1 DataA13 1 DataB11

2 DataA21 2 DataB21

2 DataA21 2 DataB22

2 DataA21 2 DataB23

3 DataA31

Right Join (или правое внешнее соединение) в идентификаторе столбца будет возвращать столбцы из обеих таблиц и сопоставлять записи с записями из правой таблицы (значения Null из левой таблицы):

Данные идентификатора данных Id

1 DataA11 1 DataB11

1 DataA12 1 DataB11

1 DataA13 1 DataB11

2 DataA21 2 DataB21

2 DataA21 2 DataB22

2 DataA21 2 DataB23

          4 DataB41

Outer Join (или полное внешнее объединение) в идентификаторе столбца возвращает столбцы из обеих таблиц и сопоставляя записи с записями из левой таблицы (значения Null из правой таблицы) и записи из правой таблицы (значения Null из левой таблицы):

Данные идентификатора данных Id

1 DataA11 1 DataB11

1 DataA12 1 DataB11

1 DataA13 1 DataB11

2 DataA21 2 DataB21

2 DataA21 2 DataB22

2 DataA21 2 DataB23

3 DataA31

          4 DataB41

Left Semi Join в столбце Id вернет столбцы только из левой таблицы и сопоставляет записи только из левой таблицы:

Данные идентификатора

1 DataA11

1 DataA12

1 DataA13

2 DataA21