Подтвердить что ты не робот

ПОЛНАЯ ВНУТРЕННЯЯ СОЕДИНЕННОСТЬ против ПОЛНОГО ПРИСОЕДИНЕНИЯ

Просто играйте с запросами и примерами, чтобы лучше понять объединения. Я замечаю, что в 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

Выполняют ли они одно и то же действие для получения тех же результатов, или я буду сталкиваться с разными результатами в более сложном примере? Является ли это просто взаимозаменяемой терминологией?

4b9b3361

Ответ 1

На самом деле они одинаковы. LEFT OUTER JOIN совпадает с LEFT JOIN, а RIGHT OUTER JOIN совпадает с RIGHT JOIN. Это более информативный способ сравнения с INNER Join.

Подробнее см. статью Википедии.

Ответ 2

Microsoft® SQL Server ™ 2000 использует эти ключевые слова SQL-92 для внешних соединений указанный в предложении FROM:

  • ЛЕВЫЙ ВЗАИМОДЕЙСТВУЮЩИЙ ВЗАИМОДЕЙСТВУЮЩИЙ ИЛИ ЛЕВЫЙ ПРИСОЕДИНЕНИЕ

  • ВРАЩАЮЩАЯСЯ ВЗАИМОДЕЙСТВУЮЩАЯ ИЛИ ПРАВИЛЬНАЯ ВСТУПЛЕНИЕ

  • ПОЛНАЯ ВНУТРЕННЯЯ ВСТУПЛЕНИЕ ИЛИ ПОЛНОЕ ПРИСОЕДИНЕНИЕ

От MSDN

full outer join или full join возвращает все строки из обеих таблиц, сопоставляя строки везде, где может быть выполнено совпадение, и размещая NULL в тех местах, где не существует соответствующей строки.

Ответ 3

Верно, что некоторые базы данных распознают ключевое слово OUTER. Некоторые этого не делают. Где он распознается, это обычно необязательное ключевое слово. Почти всегда, ПОЛНОЕ ПРИСОЕДИНЯЮТСЯ И ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ делают то же самое. (Я не могу придумать пример, где они этого не делают. Может ли кто-нибудь еще подумать об этом?)

Это может оставить вас в недоумении: "Почему это было бы ключевым словом, если у него нет смысла?" Ответ сводится к стилю программирования.

В старые времена программисты стремились сделать свой код максимально компактным. Каждый символ означал большее время обработки. Мы использовали 1, 2 и 3 буквенные переменные. Мы использовали двухзначные годы. Мы устранили все лишнее пустое пространство. Некоторые люди все еще программируют именно так. Это не время обработки. Это больше о быстром кодировании.

Современные программисты учатся использовать более описательные переменные и помещать больше комментариев и документации в свой код. Используя дополнительные слова, такие как OUTER, убедитесь, что другим людям, которые читают код, будет легче понять это. Будет меньше двусмысленности. Этот стиль гораздо читабельнее и добрее к людям в будущем, которым придется поддерживать этот код.

Ответ 4

Удалите на TableA.name = TableB.name вы увидите декартово произведение.