В чем разница между "INNER JOIN" и "OUTER JOIN"? - PullRequest
4353 голосов
/ 02 сентября 2008

Кроме того, как вписываются LEFT JOIN, RIGHT JOIN и FULL JOIN?

Ответы [ 24 ]

3 голосов
/ 07 сентября 2017

left join on (он же left outer join on) возвращает inner join on строки union all несопоставленные строки левой таблицы, расширенные нулями.

right join (on aka right outer join on) возвращает inner join on строк union all несоответствующих строк правой таблицы, расширенных нулями.

full join on (он же full outer join on) возвращает inner join on строки union all несопоставленные строки левой таблицы, расширенные нулями union all несопоставленные строки правой таблицы, расширенные нулями.

(SQL Standard 2006 SQL / Foundation 7.7 Синтаксические правила 1, Общие правила 1 b, 3 c & d, 5 b.)

Так что не outer join, пока не узнаете, что лежит в основе inner join.


Узнайте какие строки inner join возвращает .

Прочитайте мои комментарии, есть много запутанных и плохих ответов.

Тогда прочитайте мои комментарии здесь о многих запутанных и плохих ответах.

3 голосов
/ 02 февраля 2016
  • Внутреннее объединение - Внутреннее объединение , использующее любой из эквивалентных запросов, дает пересечение двух таблиц , то есть двух строк, которые у них есть вместе.

  • левое внешнее объединение - левое внешнее объединение даст все строки в A плюс все общие строки в B.

  • Полное внешнее соединение - A Полное внешнее соединение даст вам объединение A и B, т.е. все строки в A и все строки в B. Если что-то в A не имеет соответствующего значения в B, тогда часть B равна нулю, и наоборот

1 голос
/ 17 октября 2017

Разница между внутренним соединением и внешним соединением заключается в следующем:

  1. Внутреннее объединение - это объединение, объединяющее таблицы на основе соответствующих кортежей, тогда как внешнее объединение - это объединение, объединяющее таблицы на основе как сопоставленного, так и несогласованного кортежа.
  2. Внутреннее объединение объединяет совпавшую строку из двух таблиц, в которой пропущены несопоставленные строки, тогда как внешнее объединение объединяет строки из двух таблиц, и несопоставленные строки заполняются нулевым значением.
  3. Внутреннее объединение похоже на операцию пересечения, тогда как внешнее объединение похоже на операцию объединения.
  4. Внутреннее объединение - два типа, тогда как внешнее объединение - три типа.
  5. Внутреннее соединение медленнее, тогда как внешнее соединение быстрее внутреннего соединения.
0 голосов
/ 25 ноября 2018

Рассмотрим ниже 2 таблицы:

EMP

empid   name    dept_id salary
1       Rob     1       100
2       Mark    1       300
3       John    2       100
4       Mary    2       300
5       Bill    3       700
6       Jose    6       400

Отдел

deptid  name
1       IT
2       Accounts
3       Security
4       HR
5       R&D

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

В основном записывается как JOIN в запросах sql. Он возвращает только совпадающие записи между таблицами.

Узнайте всех сотрудников и имена их отделов:

Select a.empid, a.name, b.name as dept_name
FROM emp a
JOIN department b
ON a.dept_id = b.deptid
;

empid   name    dept_name
1       Rob     IT
2       Mark    IT
3       John    Accounts
4       Mary    Accounts
5       Bill    Security

Как вы видите выше, Jose не выводится из EMP в выводе, так как его dept_id 6 не находит соответствия в таблице Department. Точно так же строки HR и R&D не выводятся из таблицы Department , так как они не нашли соответствия в таблице Emp.

Итак, INNER JOIN или просто JOIN возвращает только совпадающие строки.

LEFT JOIN:

Возвращает все записи из таблицы LEFT и только совпадающие записи из таблицы RIGHT.

Select a.empid, a.name, b.name as dept_name
FROM emp a
LEFT JOIN department b
ON a.dept_id = b.deptid
;

empid   name    dept_name
1       Rob     IT
2       Mark    IT
3       John    Accounts
4       Mary    Accounts
5       Bill    Security
6       Jose    

Итак, если вы наблюдаете вышеприведенный вывод, все записи из таблицы LEFT (Emp) печатаются только с совпадающими записями из таблицы RIGHT.

Строки

HR и R&D не выводятся из таблицы Department , так как они не нашли соответствия в таблице Emp на dept_id.

Итак, LEFT JOIN возвращает ВСЕ строки из левой таблицы и только совпадающие строки из правой таблицы.

Также можно проверить ДЕМО здесь .

...