/ / Різні комбінації приєднання збивають з пантелику, чи може хтось це трохи зварити? - sql, sql-сервер, sql-сервер-2005, tsql

Різні комбінації приєднань незрозумілі, чи може хтось його трохи зварити? - sql, sql-server, sql-server-2005, tsql

Дивлячись на приєднуйтесь до цих вихідних.

Я читав на "Приєднуйся" і побачив безліч комбінацій ПРИЄДНАЙТЕСЬ, ВЛІВО, ВПРАВО, ВНУТРІШНЬО, ПОВНО, ІННЕР. Я перевірив документи MSDN і, схоже, єдині дозволені комбінації є у ​​формі:

< join_type > ::=
[ INNER | { { LEFT | RIGHT | FULL } [ OUTER] } ]
[ < join_hint > ]
JOIN

тож з цього, я думаю, ви можете отримати лише:

JOIN / INNER JOIN
LEFT JOIN / LEFT OUTER JOIN
RIGHT JOIN / RIGHT OUTER JOIN
FULL JOIN / FULL OUTER JOIN

Крім того, зовнішній вигляд є необов'язковим ключовим словомВЛІТТЯ ВЛІТТЯ та НАЛІВ ВІДПОЛУЧАЙТЕ дійсно те саме. Це правильно? Яка різниця між JOIN та FULL OUTER JOIN? Я бачив ОСОБЛИВО в сценарії, але не зміг його зламати, тому що запит був трохи складним.

Відповіді:

10 за відповідь № 1

http://www.codinghorror.com/blog/archives/000976.html

Має одне з найкращих пояснень, які я бачив.


4 для відповіді № 2

Існує лише три види приєднання: CROSS, INNER та OUTER.

  • Хрест приєднується до повернення кожен можливе поєднання рядків з обох таблиць, і вони часто не використовуються.
  • Внутрішня приєднується лише до туди, де повертаються рядки обидва таблиці відповідають умові приєднання.
  • Зовнішні приєднання вибирають одну таблицю як "початкову" таблицю, і завжди будуть повертати всі рядки з цієї таблиці. Будь-який час, коли в іншій таблиці немає відповідності, надаються значення NULL.

У межах зовнішніх з'єднань (і тільки зовнішніх з'єднань) також є три підтипи: ЛІВО, ПРАВО та ПОВНО.

  • Для лівих приєднань перша таблиця - це таблиця початку.
  • Для Right приєднується 2-а таблиця - це таблиця початку.
  • Для повної приєднання обидві таблиці є таблицями початківців.

Оскільки лівий, правий і повний застосовуються лише до зовнішніх приєднань, іноді ключове слово ВИХІД пропускається на користь просто вказати, який тип зовнішнього з'єднання (тобто просто "НАЛЕГЛО ПРИЄДНАЙТЕСЬ").


1 для відповіді № 3

Це всі дійсні синтаксиси, які можуть переходити між джерелами таблиці:

JOIN
INNER JOIN
LEFT JOIN
LEFT OUTER JOIN
RIGHT JOIN
RIGHT OUTER JOIN
FULL JOIN
FULL OUTER JOIN

Кожен вимагає наступного пункту ON.

Ви правильні, що ЗОВНІШНЬОГО не є обов'язковим, тому ПРАВИЛЬНИЙ ПРИЄДНАЙТЕ - це те саме, що ПРАВО ВІДХОДЖУЄТЬСЯ ПРИЄДНАЙТЕСЬ, а також ЛІВО та ПОВНО. Крім того, INNER є необов'язковим, якщо його немає, тому ПРИЄДНАЙТЕ так само, як INNER JOIN.

Існує також CROSS JOIN, який є тим же комою і не має пункту ON. Іншими словами,

FROM A CROSS JOIN B

і

FROM A,B

означають точно те саме.

Оператори таблиці JOIN і FULL OUTER JOIN зовсім не однакові. Джерело таблиці

FROM A JOIN B ON <condition>

містить лише рядки, для яких це правда. З іншого боку, джерело таблиці

FROM A FULL OUTER JOIN B ON <condition>

містить рядки, для яких це правда разом з усі додаткові рядки, які ви отримаєте або в лівому зовнішньому з'єднанні, або в ПРАВИМУ ПРИЄДНУЙСЯ, з тим самим пунктом ON.


1 для відповіді № 4

Здається, у вас більше комбінацій, ніж підтримується:

<join_type> ::=
[ INNER | { { LEFT | RIGHT | FULL } [ OUTER] } ]
[ <join_hint> ]
JOIN

Це говорить, що ви можете мати:

       JOIN                    INNER JOIN
LEFT  JOIN              LEFT  OUTER JOIN
RIGHT JOIN              RIGHT OUTER JOIN
FULL  JOIN              FULL  OUTER JOIN

Ключовим словом OUTER є необов’язковим, іншими словами. У повному стандарті SQL ви також можете мати ПРИРОДНИЙ ПРИЄДНАЙТЕСЬ або КРОВНИЙ ПРИЄДНАЙТЕСЬ. Ключове слово INNER також необов’язкове; звичайний "ПРИЄДНАЙТЕСЬ" - ВНУТРІШНЕ ПРИЄДНАННЯ.

Власне, форматування вашої відповіді призвело до того, що я думав, що ви "не зрозуміли належним чином; він запустив" ВНУТРІШНЕ ПРИЄДНАННЯ "з НАЛЯГОЮ ПРИЄДНАЙТЕСЬ (я виправлю це незабаром, якщо ніхто інший не має).

ЦІЛЬКА ПРИЄДНАННЯ кардинально відрізняється від рівнини(ВНУТРІШНЄ З'ЄДНАННЯ. INNER JOIN просто базується на заданому критерії (визначеному пунктом ON або користувачем). ПРИЄДНАННЯ ВЛЕВОГО СПІВ складається з рядків ВНУТРІШНЬОГО ПРИЄДНАННЯ плюс ті рядки з лівої таблиці, які не з'єднані з правою таблицею, розширеною з NULL для кожного стовпця в правій таблиці. Це іноді називають "лівим зовнішнім приростом". ПРАВИЛЬНЕ ВИХІДНЕ ПРИЄДНАННЯ повертає відчуття зовнішнього з'єднання (тому існує "правильний зовнішній приріст"). ПОВНИЙ ПРИЄДНАННЯ складається з об'єднання ВНУТРІШНЬОГО ПРИЄДНАННЯ та лівого зовнішнього збільшення та правого зовнішнього збільшення. Результат ПОВНОГО ПРИЄДНАННЯ не має первинного ключа, оскільки, як правило, в кожному стовпці є нулі.


0 для відповіді № 5

The Стаття Вікіпедії про SQL приєднатися цілком зрозуміло і має безліч прикладів.