Также как вписываются LEFT JOIN
, RIGHT JOIN
и FULL JOIN
?
Предполагается, что вы соединяете столбцы без дубликатов, что является очень распространенным случаем:
Внутреннее соединение A и B дает результат A intersect B, т.е. внутреннюю часть диаграммы Венна пересечения.
Внешнее соединение A и B дает результат A union 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
Правое внешнее объединение
Правое внешнее соединение даст все строки в B, плюс все общие строки в A.
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
Venn изображает схематически don' t действительно делают это для меня. Они don' t показывают любое различие между взаимным соединением и внутренним соединением, например, или в более общем плане показывают любое различие между различными типами предиката соединения или служат основой для рассуждения о том, как они будут работать. Нет никакой замены для понимания логической обработки, и это относительно прямо, чтобы схватить так или иначе.
Исходные Столы ! введите описание связи здесь Сначала начните с 'ВЗАИМНОГО СОЕДИНЕНИЯ' (иначе Декартовский продукт). Это не имеет 'НА' пункте и просто возвращает каждую комбинацию рядов от этих двух столов. ВЫБЕРИТЕ A.Colour, B.Colour ОТ ВЗАИМНОГО СОЕДИНЕНИЯ B ! введите описание связи здесь У внутренних и Внешних соединений есть " ON" предикат пункта.
! [введите описание изображения здесь] [4]
Внутреннее условие соединения не должно обязательно быть условием равенства, и оно не должно ссылаться на колонки от обоих (или даже ни один) столов. Оценка 'A.Colour НЕ В (' Green' ' Blue')' на каждом ряде взаимной прибыли соединения. ! внутренние 2 ВЫБЕРИТЕ A.Colour, B.Colour ОТ ВНУТРЕННЕГО СОЕДИНЕНИЯ B НА 1 =1 Условие соединения оценивает к истинному для всех рядов во взаимном результате соединения, таким образом, это все равно как взаимное соединение. Я won' t повторяют картину этих 16 рядов снова.
Внешние Соединения логически оценены таким же образом как внутренние соединения за исключением того, что, если ряд от вставшего стола (для левого соединения) не присоединяется ни к каким рядам от правого стола вообще, это сохранено в результате с 'ПУСТЫМИ' ценностями для правых колонок. ! LOJ
Это просто ограничивает предыдущий результат только возвратить ряды, где 'B.Colour ПУСТОЙ'. В данном случае они будут рядами, которые были сохранены, поскольку у них не было матча в правом столе, и вопрос возвращает единственный красный ряд, не подобранный в таблице 'B'. Это известно как анти-полу соединение. Важно выбрать колонку для, 'ПУСТОЙ' тест, который или не nullable или для которого условие соединения гарантирует, что любые 'ПУСТЫЕ' ценности будут исключены для этого образца, чтобы работать правильно и постараться не просто приносить задние ряды, у которых, оказывается, есть 'ПУСТАЯ' стоимость для той колонки в дополнение к подобранным рядам ООН. ! loj пустой
Правильные внешние соединения действуют так же к левым внешним соединениям кроме, они сохраняют не соответствие рядам от правильного стола, и пустой указатель расширяют левые колонки. ! ROJ
Полные внешние соединения объединяют поведение левых и правых соединений и сохраняют не соответствующие ряды от обоих левые и правые столы. ! FOJ
Никакие ряды во взаимном соединении не соответствуют '1=0' предикат. Все ряды с обеих сторон сохранены, используя нормальные внешние правила соединения с ПУСТЫМ УКАЗАТЕЛЕМ в колонках от стола с другой стороны. ! FOJ 2 ИЗБРАННЫЕ ### СОЕДИНЯЮТСЯ (A.Colour, B.Colour) КАК цвет ОТ ПОЛНОГО ВНЕШНЕГО СОЕДИНЕНИЯ B НА 1 = 0 С несовершеннолетним исправляют к предыдущему вопросу, можно было моделировать 'СОЮЗ ВСЕ' этих двух столов. ! СОЮЗ ВСЕ
Обратите внимание, что, 'ГДЕ' пункт (если есть) логически бежит за соединением. Одна распространенная ошибка состоит в том, чтобы выполнить левое внешнее соединение и затем включать, ГДЕ пункт с условием на правильном столе, который заканчивается, исключая не соответствующие ряды. Вышеупомянутое заканчивает тем, что выполнило внешнее соединение... ! LOJ ... И затем " Where" пробеги пункта. 'ПУСТОЙ УКАЗАТЕЛЬ = ' Green''; не оценивает к истинному, таким образом, ряд, сохраненный внешним соединением, заканчивается отказанный (наряду с синим) эффективно преобразование соединения назад к внутреннему. ! LOJtoInner Если бы намерение состояло в том, чтобы включать только ряды от B, откуда Цвет - Грин и все ряды невнимательного, то правильный синтаксис был бы
! введите описание изображения здесь
Посмотрите эти примеры [пробег, живой в SQLFiddle.com] [15]. [15]: http://sqlfiddle.com/#! 17/10d3d/29
Соединения используются, чтобы объединить данные из двух столов с результатом, являющимся новым, временным столом. Соединения выполнены на основе чего-то позвонившего предикат, который определяет условие использовать, чтобы выполнить соединение. Различие между внутренним соединением и внешним соединением - то, что внутреннее соединение возвратит только ряды, которые на самом деле соответствуют на основе предиката соединения. Для, например, - Позволяет, рассматривают стол Сотрудника и Местоположения:
! введите описание изображения здесь
Внутренний Join: - Внутреннее соединение составляет новую таблицу результата, объединяя значения столбца двух столов (Employee и Местоположение) основанный на предикате соединения. Вопрос сравнивает каждый ряд Сотрудник с каждым рядом Местоположение, чтобы найти все пары рядов, которые удовлетворяют предикат соединения. Когда предикат соединения удовлетворен, соответствуя ненулевым значениям, значениям столбца для каждой подобранной пары рядов Сотрудник и , Местоположение объединено в ряд результата. Вот то, на что будет похож SQL для внутреннего соединения:
select * from employee inner join location on employee.empID = location.empID
OR
select * from employee, location where employee.empID = location.empID
Теперь, вот то, на что результат управления этим был бы похож SQL: ! введите описание изображения здесь ! [введите описание изображения здесь] [3]
Внешний Join: - Внешнее соединение не требует, чтобы у каждого отчета в двух столах, к которым присоединяются, был соответствующий отчет. Стол, к которому присоединяются, сохраняет каждый отчет — даже если никакой другой отчет соответствия не существует. Внешние соединения подразделяют далее на левые внешние соединения и правильные внешние соединения, в зависимости от который table' s ряды сохранены (левые или правые).
Оставленный внешний Join: - Результат левого внешнего соединения (или просто оставленного соединения) для столов Сотрудник и Местоположение всегда содержит все отчеты " left" стол (Employee), даже если условие соединения не находит отчета соответствия в " right" стол (Location). Вот то, на что SQL для левого внешнего соединения был бы похож, используя приведенные выше таблицы:
select * from employee left outer join location on employee.empID = location.empID;
//Use of outer keyword is optional
Теперь, вот то, на что был бы похож результат управления этим SQL: ! введите описание изображения здесь ! [введите описание изображения здесь] [5]
Правильный внешний Join: - Правильное внешнее соединение (или правильное соединение) тесно напоминают левое внешнее соединение, кроме с обработкой полностью измененных столов. Каждый ряд от " right" стол (Location) появится в столе, к которому присоединяются, по крайней мере, однажды. Если никакой ряд соответствия от " left" стол (Employee) существует, ПУСТОЙ УКАЗАТЕЛЬ появится в колонках от Сотрудник для тех отчетов, у которых нет матча в Location. Это - то, на что похож SQL:
select * from employee right outer join location on employee.empID = location.empID;
//Use of outer keyword is optional
Используя приведенные выше таблицы, мы можем показать то, на что был бы похож набор результата правильного внешнего соединения:
! введите описание изображения здесь ! [введите описание изображения здесь] [7]
Полный внешний Joins: - Полное Внешнее Соединение или Полное Соединение должны сохранить не соответствующую информацию включением несоответствия рядам в результатах соединения, использовать полное внешнее соединение. Это включает все ряды от обоих столов, независимо от того, есть ли у другого стола соответствующая стоимость. ! [введите описание изображения здесь] [8]
Соединение ###Inner
Восстановите подобранные ряды только, то есть, 'Пересечение B'.
! Введите описание изображения здесь
SELECT *
FROM dbo.Students S
INNER JOIN dbo.Advisors A
ON S.Advisor_ID = A.Advisor_ID
Выберите все отчеты из первого стола и любые отчеты во втором стол, которые соответствуют ключам, к которым присоединяются.
! Введите описание изображения здесь
SELECT *
FROM dbo.Students S
LEFT JOIN dbo.Advisors A
ON S.Advisor_ID = A.Advisor_ID
Выберите все отчеты из второго стола и любые отчеты в первом стол, которые соответствуют ключам, к которым присоединяются.
! Введите описание изображения здесь
SELECT *
FROM dbo.Students S
FULL JOIN dbo.Advisors A
ON S.Advisor_ID = A.Advisor_ID
В простых словах:
внутреннее соединение восстанавливают подобранные ряды только.
Принимая во внимание, что внешнее соединение восстанавливает подобранные ряды от одного стола и все ряды в другом столе...., результат зависит, на котором Вы используете:
Оставленный : Подобранные ряды в правильном столе и все ряды в столе, из-за которого встают,
Право : Подобранные ряды в столе, из-за которого встают, и все ряды в правильном столе или
Полный : Все ряды во всех столах. Это doesn' t имеют значение, есть ли матч или нет
Внутреннее соединение показывает строки только в том случае, если на другой (правой) стороне соединения есть совпадающая запись.
Внешнее (левое) соединение показывает строки для каждой записи с левой стороны, даже если на другой (правой) стороне соединения нет совпадающих строк. Если нет совпадающей строки, в столбцах другой (правой) стороны будут отображаться NULL.
Внутреннее объединение требует, чтобы в объединенной таблице существовала запись с соответствующим идентификатором.
Внешние соединения возвращают записи для левой стороны, даже если для правой стороны ничего не существует.
Например, у вас есть таблица Orders и таблица OrderDetails. Они связаны по "идентификатору заказа".
Заказы
Детали заказа
Запрос
SELECT Orders.OrderID, Orders.CustomerName
FROM Orders
INNER JOIN OrderDetails
ON Orders.OrderID = OrderDetails.OrderID
вернет только те заказы, которые также имеют что-то в таблице OrderDetails.
Если вы измените его на OUTER LEFT JOIN
SELECT Orders.OrderID, Orders.CustomerName
FROM Orders
LEFT JOIN OrderDetails
ON Orders.OrderID = OrderDetails.OrderID
то он будет возвращать записи из таблицы Orders, даже если в ней нет записей OrderDetails.
Вы можете использовать это для поиска заказов, в которых нет ни одной записи OrderDetails, что указывает на возможный бесхозный заказ, добавив предложение where, например WHERE OrderDetails.OrderID IS NULL
.
В простых словах:
Внутреннее соединение -> Возьмите ТОЛЬКО общие отчеты от столов родителя и ребенка, ГДЕ первичный ключ Родительского стола соответствует Внешнему ключу в Детском столе.
Оставленное соединение ->
псевдо кодекс
1.Take All records from left Table
2.for(each record in right table,) {
if(Records from left & right table matching on primary & foreign key){
use their values as it is as result of join at the right side for 2nd table.
} else {
put value NULL values in that particular record as result of join at the right side for 2nd table.
}
}
Правильное соединение : Точно противоположность левого соединения. Поставьте имя стола в ЛЕВОМ СОЕДИНЕНИИ в правой стороне в Правильном соединении, Вы получаете ту же продукцию как ОСТАВЛЕННУЮ СОЕДИНЕНИЕ.
Внешнее соединение : Покажите все отчеты в Обоих столах, 'Неважно, что'. Если отчеты в столе, из-за Которого встают, не соответствуют к правильному столу на основе Предварительных выборов, ключа Forieign, используйте Нулевое значение в качестве результата соединения.
Пример:
! Пример
Позволяет принимают теперь для 2 столов
'1.employees, 2.phone_numbers_employees'
employees : id , name
phone_numbers_employees : id , phone_num , emp_id
Здесь, стол сотрудников - Основной стол, phone_numbers_employees - детский стол (это содержит 'emp_id' как внешний ключ, который соединяет 'employee.id' так его детский стол.)
Внутренние соединения
Возьмите отчеты 2 столов , ТОЛЬКО ЕСЛИ Первичный ключ стола сотрудников (его id) соответствует Внешнему ключу Детского стола phone_numbers_employees (emp_id) .
Таким образом, вопрос был бы:
SELECT e.id , e.name , p.phone_num FROM employees AS e INNER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
Здесь возьмите только соответствие рядам на первичном ключе = внешний ключ, как объяснено выше. Здесь соответствие рядам на первичном ключе = внешний ключ пропущено как результат соединения.
Оставленные соединения :
Оставленное соединение сохраняет все ряды стола, из-за которого встают, независимо от того, есть ли ряд, который соответствует на правильном столе.
SELECT e.id , e.name , p.phone_num FROM employees AS e LEFT JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
Внешние соединения :
SELECT e.id , e.name , p.phone_num FROM employees AS e OUTER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
Diagramatically это похоже:
! [Это - хорошее объяснение соединений] [1]
Это - хорошее схематическое объяснение всего вида соединений
источник: http://ssiddique.info/understanding-sql-joins-in-easy-way.html
Вы используете 'ВНУТРЕННЕЕ СОЕДИНЕНИЕ' , чтобы возвратить все ряды из обоих столов, где есть матч. т.е. В получающемся столе у всех рядов и колонок будут ценности.
В 'ВНЕШНЕЕ СОЕДИНЕНИЕ' у получающегося стола могут быть пустые колонки. Внешнее соединение можно или 'ОСТАВИТЬ' или 'ПРАВО'.
'ОСТАВЛЕННЫЙ ВНЕШНЕЕ СОЕДИНЕНИЕ' возвращает все ряды из первого стола, даже при отсутствии матчей во втором столе.
'ПРАВИЛЬНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ' возвращает все ряды из второго стола, даже при отсутствии матчей в первом столе.
'ВНУТРЕННЕЕ СОЕДИНЕНИЕ' требует, чтобы было, по крайней мере, матч в сравнении этих двух столов. Например, таблица A и таблица B, которая подразумевает ٨ B (Пересечение B).
'ОСТАВЛЕННЫЙ ВНЕШНЕЕ СОЕДИНЕНИЕ' и 'ОСТАВЛЕННЫЙ СОЕДИНЕНИЕ' то же. Это дает все отчеты, совпадающие по обоим столам и всем возможностям стола, из-за которого встают.
Точно так же 'ПРАВИЛЬНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ' и 'ПРАВИЛЬНОЕ СОЕДИНЕНИЕ' являются тем же. Это дает все отчеты, совпадающие по обоим столам и всем возможностям правильного стола.
'ПОЛНОЕ СОЕДИНЕНИЕ' является комбинацией 'ЛЕВОГО ВНЕШНЕГО СОЕДИНЕНИЯ' и 'ПРАВИЛЬНОГО ВНЕШНЕГО СОЕДИНЕНИЯ' без дублирования.
Ответ находится в значении каждого, таким образом, в результатах.
Примечание:
В 'SQLite' нет никакого 'ПРАВИЛЬНОГО ВНЕШНЕГО СОЕДИНЕНИЯ' или 'ПОЛНОГО ВНЕШНЕГО СОЕДИНЕНИЯ'.
И также в 'MySQL' нет никакого 'ПОЛНОГО ВНЕШНЕГО СОЕДИНЕНИЯ'.
Мой ответ на основе вышеупомянутого Примечание .
Когда у Вас есть два стола как они:
--[table1] --[table2]
id | name id | name
---+------- ---+-------
1 | a1 1 | a2
2 | b1 3 | b2
ПЕРЕСЕКИТЕ СОЕДИНЕНИЕ / ВНЕШНЕЕ СОЕДИНЕНИЕ:
У Вас могут быть все те данные о столах с 'ВЗАИМНЫМ СОЕДИНЕНИЕМ' или только с'', как это:
SELECT * FROM table1, table2
--[OR]
SELECT * FROM table1 CROSS JOIN table2
--[Results:]
id | name | id | name
---+------+----+------
1 | a1 | 1 | a2
1 | a1 | 3 | b2
2 | b1 | 1 | a2
2 | b1 | 3 | b2
ВНУТРЕННЕЕ СОЕДИНЕНИЕ:
Когда Вы хотите добавить фильтр к вышеупомянутым результатам на основе отношения как 'table1.id = table2.id', Вы можете использовать 'ВНУТРЕННЕЕ СОЕДИНЕНИЕ':
SELECT * FROM table1, table2 WHERE table1.id = table2.id
--[OR]
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id
--[Results:]
id | name | id | name
---+------+----+------
1 | a1 | 1 | a2
ОСТАВЛЕННОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ:
Когда Вы хотите иметь все ряды одного из столов в вышеупомянутом результате - с тем же отношением - Вы можете использовать 'ОСТАВЛЕННЫЙ СОЕДИНЕНИЕ':
(Для ПРАВИЛЬНОЕ СОЕДИНЕНИЕ просто изменяют место столов),
SELECT * FROM table1, table2 WHERE table1.id = table2.id
UNION ALL
SELECT *, Null, Null FROM table1 WHERE Not table1.id In (SELECT id FROM table2)
--[OR]
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id
--[Results:]
id | name | id | name
---+------+------+------
1 | a1 | 1 | a2
2 | b1 | Null | Null
ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ:
Когда Вы также хотите иметь все ряды другого стола в Ваших результатах, Вы можете использовать 'ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ':
SELECT * FROM table1, table2 WHERE table1.id = table2.id
UNION ALL
SELECT *, Null, Null FROM table1 WHERE Not table1.id In (SELECT id FROM table2)
UNION ALL
SELECT Null, Null, * FROM table2 WHERE Not table2.id In (SELECT id FROM table1)
--[OR] (recommended for SQLite)
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id
UNION ALL
SELECT * FROM table2 LEFT JOIN table1 ON table2.id = table1.id
WHERE table1.id IS NULL
--[OR]
SELECT * FROM table1 FULL OUTER JOIN table2 On table1.id = table2.id
--[Results:]
id | name | id | name
-----+------+------+------
1 | a1 | 1 | a2
2 | b1 | Null | Null
Null | Null | 3 | b2
Ну, как Ваша потребность Вы выбираете каждого, который покрывает Вашу потребность;).
Внутреннее соединение.
Соединение объединяет ряды от двух столов. внутреннее соединение пытается подойти эти два стола на основе критериев, которые Вы определяете в вопросе, и только возвращает ряды тот матч. Если ряд от первого стола в соединении будет соответствовать двум рядам во втором столе, то два ряда будут возвращены в результатах. Если есть ряд в первом столе, который не соответствует ряду во втором, это не возвращено; аналогично, если есть ряд во втором столе, который не соответствует ряду в первом, это не возвращено.
Внешнее Соединение.
оставленный соединение пытается найти, подходят ряды от первого стола до рядов во втором столе. Если это не может найти матч, это возвратит колонки из первого стола и оставит колонки от второго бланка стола (пустой указатель).
Я don' t видят много детали о работе и оптимизаторе в других ответах.
Иногда хорошо знать, что только 'ВНУТРЕННЕЕ СОЕДИНЕНИЕ' ассоциативно, что означает, что у оптимизатора есть большая часть выбора играть с ним. Это может переупорядочить заказ соединения сделать его быстрее хранением того же результата. Оптимизатор может использовать большинство способов соединения.
Обычно это - хорошая практика, чтобы попытаться использовать 'ВНУТРЕННЕЕ СОЕДИНЕНИЕ' вместо другого вида соединений. (Конечно, если это - возможное рассмотрение ожидаемого набора результата.)
Есть несколько хороших примеров и объяснения здесь об этом странном ассоциативном поведении:
! [введите описание изображения здесь] [1]
Например:
SELECT *
FROM tablea a
INNER JOIN tableb b
ON a.primary_key = b.foreign_key
INNER JOIN tablec c
ON b.primary_key = c.foreign_key
Точный алгоритм для 'ВНУТРЕННЕГО СОЕДИНЕНИЯ', 'СЛЕВА/СПРАВА ВНЕШНЕЕ СОЕДИНЕНИЕ' как следуют:
Примечание: условие, определенное в 'НА' пункте, могло быть чем-либо, это не требуется, чтобы использовать Первичные ключи (и Вы don' t должен всегда обращаться к Колонкам от обоих столов)! Например:
! [Внутреннее соединение против левого внешнего соединения] [2]
! [введите описание изображения здесь] [3]
Примечание: Оставленный соединение = левое внешнее соединение, правильное соединение = правильное внешнее соединение.
Подвергнув критике очень любимую красным заштрихованную диаграмму Venn, я думал, что он только ярмарка объявил о моей собственной попытке.
Хотя @Martin Smith' s ответ является лучшим из этой связки длинным путем, его единственные шоу ключевая колонка от каждого стола, тогда как я думаю, идеально неключевые колонки нужно также показать.
Лучшее я мог сделать в полчаса позволенный, я все еще don' t думают, что это соответственно показывает, что пустые указатели происходят там из-за отсутствия значений ключа в 'TableB' или что 'ВНЕШНЕЕ СОЕДИНЕНИЕ' является на самом деле союзом, а не соединением:
Самые простые Определения
Внутреннее Соединение: Прибыль соответствовала отчетам от обоих столов.
Полное Внешнее Соединение: Прибыль соответствовала и непревзойденные отчеты от обоих столов с пустым указателем для непревзойденных отчетов от Оба Стола .
Оставленное Внешнее Соединение: Прибыль соответствовала и непревзойденные отчеты только от стола на Левая сторона .
Правильное Внешнее Соединение: Прибыль соответствовала и непревзойденные отчеты только от стола на Правая сторона .
Короче говоря
Подобранный + левый непревзойденный + право, непревзойденное = полное внешнее соединение
Подобранный + левый непревзойденный = левое внешнее соединение
Подобранный + право, непревзойденное = правильное внешнее соединение
Подобранный = внутреннее соединение
Проще говоря,
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИЛИ СОЕДИНЕНИЕ EQUI: Возвращает resultset, который соответствует только условию в обоих столы.
ВНЕШНЕЕ СОЕДИНЕНИЕ: Возвращает resultset из всех ценностей от обоих столы, даже если есть матч условия или нет.
ОСТАВЛЕННЫЙ СОЕДИНЕНИЕ: Возвращает resultset из всех ценностей от стола, из-за которого встают, и только рядов, которые соответствуют условию в правильном столе.
ПРАВИЛЬНОЕ СОЕДИНЕНИЕ: Возвращает resultset из всех ценностей от правильного стола и только рядов, которые соответствуют условию в столе, из-за которого встают.
ПОЛНОЕ СОЕДИНЕНИЕ: Полное Соединение и Полное внешнее Соединение - то же.
Пример:
SELECT
e1.emp_name,
e2.emp_salary
FROM emp1 e1
INNER JOIN emp2 e2
ON e1.emp_id = e2.emp_id
Пример:
SELECT
e1.emp_name,
e2.emp_salary
FROM emp1 e1
FULL OUTER JOIN emp2 e2
ON e1.emp_id = e2.emp_id
Оставленный Внешнее соединение: Или просто названный как Левое Соединение. Это возвращает все ряды, существующие в столе, из-за Которого встают, и соответствии рядам от правильного стола (если таковые имеются).
Правильное Внешнее Соединение: Также названный как Правильное Соединение. Это возвращает соответствие рядам из вставшего стола (если таковые имеются) и всем рядам, существующим в Правильном столе.
Преимущества Соединений