Я знаю о соединениях в SQL Server.
Например. Есть две таблицы Table1, Table2.
Их структура таблиц следующая.
create table Table1 (id int, Name varchar (10))
create table Table2 (id int, Name varchar (10))
Таблица1 данные следующим образом:
Id Name
-------------
1 A
2 B
Данные таблицы 2 следующим образом:
Id Name
-------------
1 A
2 B
3 C
Если я выполню оба нижеупомянутых оператора SQL, оба вывода будут одинаковыми
select *
from Table1
left join Table2 on Table1.id = Table2.id
select *
from Table2
right join Table1 on Table1.id = Table2.id
Пожалуйста, объясните разницу между левым и правым соединением в приведенных выше инструкциях SQL.
sql
sql-server
join
left-join
right-join
Панкадж Агарвал
источник
источник
RIGHT JOIN
если мы можем добиться любого желаемого результата простоLEFT JOIN
? : PSelect * from Table1 left join Table 2
вернет ВСЕ записи таблицы 1 плюс совпадающие записи таблицы 2. ОбратноеSelect * from Table1 right join Table 2
вернет ВСЕ записи из таблицы 2 и совпадающие записи таблицы 1. Надеется, что это поможет.У Codeproject есть это изображение, которое объясняет простые основы соединений SQL, взятые из: http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx
источник
JOIN Table_B b ON A.Key = B.Key
. Условие ИЛИ работает просто отлично.Таблица, из которой вы берете данные - «ВЛЕВО».
Таблица, к которой вы присоединяетесь, «ПРАВАЯ».
LEFT JOIN: взять все элементы из левой таблицы и (только) соответствующие элементы из правой таблицы.
ПРАВИЛЬНОЕ СОЕДИНЕНИЕ: Возьмите все предметы из правой таблицы И (только) соответствующие предметы из левой таблицы.
Так:
дает:
но:
дает:
вы были правы, присоединившись к таблице с меньшим количеством строк в таблице с большим количеством строк
И
снова, слева присоединившись к таблице с меньшим количеством строк в таблице с большим количеством строк
Попробуйте:
источник
(INNER) JOIN: возвращает записи, которые имеют совпадающие значения в обеих таблицах.
LEFT (OUTER) JOIN: вернуть все записи из левой таблицы и сопоставленные записи из правой таблицы.
RIGHT (OUTER) JOIN: вернуть все записи из правой таблицы и сопоставленные записи из левой таблицы.
FULL (OUTER) JOIN: возвращать все записи, когда есть совпадение в левой или правой таблице
Например, предположим, у нас есть две таблицы со следующими записями:
Внутреннее соединение
Синтаксис
Примените это в вашей таблице образцов:
Результат будет:
Оставить Присоединиться
Примените это в вашей таблице образцов
Результат будет:
Право Присоединиться
Синтаксис:
Примените это в своей таблице Самоле:
Результат будет:
Полное присоединение
Синтаксис:
Примените его в своем примере
Результат будет:
Для ВНУТРЕННИХ присоединений порядок не имеет значения
Для (ЛЕВЫХ, ПРАВИЛЬНЫХ или ПОЛНЫХ) НАРУЖНЫХ объединений порядок имеет значение
Найти больше в w3schools
источник
Таблица в
from
этом примереtableA
находится на левой стороне отношения.Поэтому, если вы хотите взять все строки из левой таблицы (
tableA
), даже если в правой таблице (tableB
) нет совпадений , вы будете использовать «левое соединение».И если вы хотите взять все строки из правой таблицы (
tableB
), даже если в левой таблице (tableA
) нет совпадений , вы будете использоватьright join
.Таким образом, следующий запрос эквивалентен тому, который использовался выше.
источник
Вы, кажется, спрашиваете: «Если я могу переписать синтаксис
RIGHT OUTER JOIN
использования,LEFT OUTER JOIN
тогда зачем вообщеRIGHT OUTER JOIN
нужен синтаксис?» Я думаю, что ответ на этот вопрос заключается в том, что разработчики языка не хотели накладывать такое ограничение на пользователей (и я думаю, что их бы критиковали, если бы они это сделали), что заставило бы пользователей менять порядок таблиц. вFROM
предложении в некоторых случаях, когда просто меняется тип соединения.источник
Ваши два утверждения эквивалентны.
Большинство людей используют только
LEFT JOIN
потому, что это кажется более интуитивным, и это универсальный синтаксис - я не думаю, что все RDBMS поддерживаютRIGHT JOIN
.источник
LEFT
но не поддерживают,RIGHT
укажите, какие из них.RIGHT
иFULL OUTER JOIN
: sqlite.org/omited.htmlЯ чувствую, что мы можем потребовать
AND
условие вwhere
пункте последней цифры,Outer Excluding JOIN
чтобы мы получили желаемый результатA Union B Minus A Interaction B
. Я чувствую, что запрос должен быть обновлен доЕсли мы используем
OR
, то мы получим все результатыA Union B
источник
выберите * из таблицы1 слева присоединиться к таблице2 на Table1.id = Table2.id
В первом запросе Left join сравнивает левую таблицу table1 с правой таблицей table2 .
В котором будут показаны все свойства таблицы 1 , тогда как в таблице 2 будут показаны только те свойства, в которых условие выполняется.
выберите * из таблицы 2 справа присоединиться к таблице 1 на Table1.id = Table2.id
В первом запросе Right join сравнивает правую таблицу table1 с левой таблицей table2 .
В котором будут показаны все свойства таблицы 1 , тогда как в таблице 2 будут показаны только те свойства, в которых условие выполняется.
Оба запрос дает одинаковый результат , потому что порядок таблица декларации в запросе различен , как вы объявляете table1 и таблица2 в левом и правом , соответственно , в первом слева присоединиться запросом, а также объявить table1 и таблица2 в правом и левом , соответственно , в второй справа присоединиться запрос.
По этой причине вы получаете одинаковый результат в обоих запросах. Так что если вы хотите другой результат, то выполните эти два запроса соответственно,
выберите * из таблицы1 слева присоединиться к таблице2 на Table1.id = Table2.id
выберите * из таблицы Table1 справа присоединиться к таблице 2 на Table1.id = Table2.id
источник
Select * from Table1 t1 Left Join Table2 t2 on t1.id=t2.id
По определению: Left Join выбирает все столбцы, упомянутые с ключевым словом «select» из таблицы 1, и столбцы из таблицы 2, которые соответствуют критериям после ключевого слова «on».Аналогично, по определению: правое объединение выбирает все столбцы, упомянутые с ключевым словом «select» из таблицы 2, и столбцы из таблицы 1, которые соответствуют критериям после ключевого слова «on».
Обращаясь к вашему вопросу, идентификаторы в обеих таблицах сравниваются со всеми столбцами, которые необходимо добавить в вывод. Итак, идентификаторы 1 и 2 являются общими в обеих таблицах, и в результате вы получите четыре столбца с столбцами идентификаторов и имен из первой и второй таблиц по порядку.
*select * from Table1 left join Table2 on Table1.id = Table2.id
Вышеупомянутое выражение берет все записи (строки) из таблицы 1 и столбцы с совпадающими идентификаторами из таблицы 1 и таблицы 2 из таблицы 2.
select * from Table2 right join Table1 on Table1.id = Table2.id**
Аналогично вышеприведенному выражению, он берет все записи (строки) из таблицы 1 и столбцов с совпадающими идентификаторами из таблицы 1 и таблицы 2 из таблицы 2. (помните, что это правильное соединение, поэтому все столбцы из таблицы 2, а не из таблицы1 будет рассмотрено).
источник