В чем разница между INNER JOIN и OUTER JOIN?
Что означают LEFT JOIN, RIGHT JOIN и FULL JOIN?
Перевод вопроса «Difference between INNER and OUTER joins» @cdv
Ответ
Предположим, вы хотите выполнить соединение по столбцам без дубликатов, что встречается довольно часто:
Внутреннее соединение A и B: A пересекает B, т.е. внутренняя часть пересечения диаграммы Венна
Внешнее соединение A и B: A соединяется с B, т.е. внешняя часть соединения на диаграмме Венна.
Примеры
Предположим, у вас есть две таблицы. Каждая состоит из одного столбца, со следующими значениями:
A B
- -
1 3
2 4
3 5
4 6
Обратите внимание, что (1,2) уникальны для A, (3,4) – общие элементы, а (5,6) уникальны для B.
Внутреннее соединение
Внутреннее соединение, использующее один из эквивалентных запросов, дает пересечение двух таблиц, то есть две строки, общие для каждой из них.
select * from a INNER JOIN b on a.a = b.b;
select a.*, b.* from a, b where a.a = b.b;
a | b
--+--
3 | 3
4 | 4
Левое внешнее соединение
Результат левого внешнего соединения – все строки таблицы A плюс все строки таблицы B, имеющие совпадение со строками таблицы А.
select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*, b.* from a, b where a.a = b.b(+);
a | b
--+-----
1 | null
2 | null
3 | 3
4 | 4
Правое внешнее соединение
Результат правого внешнего соединения – все строки таблицы В плюс все строки таблицы А, имеющие совпадение со строками таблицы В.
select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*,b.* from a,b where a.a(+) = b.b;
a | b
-----+----
3 | 3
4 | 4
null | 5
null | 6
Полное внешнее соединение
Результат полного внешнего соединения – соединение таблиц A и B, т.е. все строки A и все строки B. Если какой-либо элемент таблицы A не имеет соответствия в таблице B, эта часть B пуста, и наоборот.
select * from a FULL OUTER JOIN b on a.a = b.b;
a | b
-----+-----
1 | null
2 | null
3 | 3
4 | 4
null | 6
null | 5
Перевод ответа «Difference between INNER and OUTER joins» @Mark Harrison
Комментариев нет:
Отправить комментарий