ПОВНЕ ВНЕШНЄ ПРИЄДНАННЯ проти ПОВНЕ ПРИЄДНАННЯ


84

Просто пограйте із запитами та прикладами, щоб краще зрозуміти об’єднання. Я помічаю, що в 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

Чи виконують вони абсолютно однакові дії для отримання однакових результатів, чи я б натрапив на різні результати в більш складному прикладі? Це просто взаємозамінна термінологія?


2
Так, обидва запити дають однакові результати в SQL Server 2008 R2.
CptSupermrkt

Відповіді:


103

Насправді вони однакові. LEFT OUTER JOINтаке саме як LEFT JOINі RIGHT OUTER JOINтаке саме як RIGHT JOIN. Це більш інформативний спосіб порівняння з INNER Join.

Докладніше див. У цій статті Вікіпедії .


3
Чудово, дякую. Так багато підручників, з якими я стикався, використовують їх відповідно до власного стилю, не зазначаючи, що вони однакові.
CptSupermrkt

2
візуальне представлення об'єднань: codeproject.com/Articles/33052/…
Hawkeye Parker

37

Microsoft® SQL Server ™ 2000 використовує такі ключові слова SQL-92 для зовнішніх об’єднань, зазначених у реченні FROM:

  • ЛІВО ВНЕШНЄ ПРИЄДНАННЯ або ЛІВО ПРИЄДНАННЯ

  • ПРАВО ВНЕШНЄ ПРИЄДНАННЯ або ПРАВО ПРИЄДНАННЯ

  • ПОВНЕ ЗОВНІШНЄ ПРИЄДНАННЯ або ПОВНЕ ПРИЄДНАННЯ

З MSDN

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


11

Це правда, що деякі бази даних розпізнають ключове слово OUTER. Деякі ні. Там, де воно розпізнається, це, як правило, необов’язкове ключове слово. Майже завжди ПОВНЕ ПРИЄДНАННЯ та ПОВНЕ ЗОВНІШНЄ ПРИЄДНАННЯ роблять однаково те саме. (Я не можу придумати приклад, де цього не роблять. Хтось інший може придумати такий?)

Це може викликати у вас запитання: "Чому це взагалі ключове слово, якщо воно не має значення?" Відповідь зводиться до стилю програмування.

За старих часів програмісти прагнули зробити свій код якомога компактнішим. Кожен символ означав більший час обробки. Ми використовували 1, 2 і 3 літерні змінні. Ми використовували 2-значні роки. Ми усунули всі непотрібні пробіли. Деякі люди все ще так програмують. Це вже не час обробки. Це більше стосується швидкого кодування.

Сучасні програмісти вчаться використовувати більш описові змінні та вкладати більше зауважень та документації до свого коду. Використовуючи зайві слова, як OUTER, переконайтеся, що іншим людям, які читають код, буде легше його зрозуміти. Буде менше двозначності. Цей стиль набагато читабельніший і добріший для людей у ​​майбутньому, яким доведеться підтримувати цей код.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.