Ответ 1
На самом деле они одинаковы. LEFT OUTER JOIN
совпадает с LEFT JOIN
, а RIGHT OUTER JOIN
совпадает с RIGHT JOIN
. Это более информативный способ сравнения с INNER Join
.
Подробнее см. статью Википедии.
Просто играйте с запросами и примерами, чтобы лучше понять объединения. Я замечаю, что в SQL Server 2008 следующие два запроса дают одинаковые результаты:
SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name
SELECT * FROM TableA
FULL JOIN TableB
ON TableA.name = TableB.name
Выполняют ли они одно и то же действие для получения тех же результатов, или я буду сталкиваться с разными результатами в более сложном примере? Является ли это просто взаимозаменяемой терминологией?
На самом деле они одинаковы. LEFT OUTER JOIN
совпадает с LEFT JOIN
, а RIGHT OUTER JOIN
совпадает с RIGHT JOIN
. Это более информативный способ сравнения с INNER Join
.
Подробнее см. статью Википедии.
Microsoft® SQL Server ™ 2000 использует эти ключевые слова SQL-92 для внешних соединений указанный в предложении FROM:
ЛЕВЫЙ ВЗАИМОДЕЙСТВУЮЩИЙ ВЗАИМОДЕЙСТВУЮЩИЙ ИЛИ ЛЕВЫЙ ПРИСОЕДИНЕНИЕ
ВРАЩАЮЩАЯСЯ ВЗАИМОДЕЙСТВУЮЩАЯ ИЛИ ПРАВИЛЬНАЯ ВСТУПЛЕНИЕ
ПОЛНАЯ ВНУТРЕННЯЯ ВСТУПЛЕНИЕ ИЛИ ПОЛНОЕ ПРИСОЕДИНЕНИЕ
От MSDN
full outer join
или full join
возвращает все строки из обеих таблиц, сопоставляя строки везде, где может быть выполнено совпадение, и размещая NULL
в тех местах, где не существует соответствующей строки.
Верно, что некоторые базы данных распознают ключевое слово OUTER. Некоторые этого не делают. Где он распознается, это обычно необязательное ключевое слово. Почти всегда, ПОЛНОЕ ПРИСОЕДИНЯЮТСЯ И ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ делают то же самое. (Я не могу придумать пример, где они этого не делают. Может ли кто-нибудь еще подумать об этом?)
Это может оставить вас в недоумении: "Почему это было бы ключевым словом, если у него нет смысла?" Ответ сводится к стилю программирования.
В старые времена программисты стремились сделать свой код максимально компактным. Каждый символ означал большее время обработки. Мы использовали 1, 2 и 3 буквенные переменные. Мы использовали двухзначные годы. Мы устранили все лишнее пустое пространство. Некоторые люди все еще программируют именно так. Это не время обработки. Это больше о быстром кодировании.
Современные программисты учатся использовать более описательные переменные и помещать больше комментариев и документации в свой код. Используя дополнительные слова, такие как OUTER, убедитесь, что другим людям, которые читают код, будет легче понять это. Будет меньше двусмысленности. Этот стиль гораздо читабельнее и добрее к людям в будущем, которым придется поддерживать этот код.
Удалите на TableA.name = TableB.name вы увидите декартово произведение.