/ / Чи потрібні INNER JOIN та OUTER JOIN? - sql, database, join

Чи потрібні INNER JOIN та OUTER JOIN? - sql, database, join

Я розумію, що будь-яке приєднання може бути зроблено за допомогою CROSS join і WHERE.

Я зробив деякі експерименти, і, схоже, розміщення предиката рівності всередині депозиту або як параметр внутрішнього з'єднання дає той самий результат з тією ж продуктивністю.

Крім того, використання внутрішніх об'єднань не дозволяє зберігати будь-яке набрання, оскільки предикат приєднання повинен бути визначений.

Я гадаю, що те ж саме вірно для різних видів зовнішніх з'єднань. Просто зазначте, що значення можуть бути нульовими або не нульовими.

Чи можу я просто йти лише з перехрестям?

Відповіді:

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

Ніякий приєднання не може бути зроблено з комбінацією CROSS і WHERE. Кожен з крос з'єднань, внутрішній та зовнішній, має власне логічне значення.

  1. Крос-приєднання застосовує лише один фаз-декартовий продукт.
  2. Внутрішнє з'єднання застосовує два етапи - декартову продукцію та фільтр.
  3. Зовнішнє об'єднання застосовує три фази - декартову продукцію, фільтр та додавання зовнішніх рядків.

Смутним аспектом запитів, що містять OUTER JOIN, є вказувати логічний вираз у фільтрі ON або в фільтрі WHERE. Основна відмінність між цими двома полягає в тому, що ON застосовується перед додаванням зовнішніх рядків , поки ГДЕ застосовується пізніше. Видалення рядка із збереженого столу (вказаного як ліва зовнішня або справа зовнішня) за допомогою фільтра ON не остаточне, оскільки воно буде додано назад; ліквідація ряду фільтром WHERE, навпаки, є остаточною.

Це логічна різниця між положеннями ON та WHERE існує лише при використанні зовнішнього приєднатися Коли ви використовуєте внутрішнє підключення, незалежно від того, де ви визначаєте свої логічні вирази в положенні ON з оператором внутрішнього оператора join, або у пункті Where з оператором перехресного приєднання.

Сподіваюся, це допомагає !!!


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

Відповідь: продуктивність може не впливати,Проте чіткість та чіткість коду ускладнюються, коли у вас є досвідчені розробники, які бачать перехресні зв'язки, коли вони дійсно є внутрішніми. Крім того, це питання особистих уподобань.


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

Ви наполовину правильні у своєму питанні. Ви сказали, що ви протестували та порівняли JOINS і Dekart продукту. І результат, який ви отримали, - це те, що вони рівні, однак близько року тому я зробив те ж саме в базі даних MySQL і JOINС був набагато швидше. Це пояснюється тим, що стандарт SQL вказує на те, як слід втілювати операцію приєднання, і що вихід продукту Dekart повинен бути таким самим, як і INNER JOIN.

Тому моя порада полягає в тому, щоб використовувати стандартний спосіб написати запити з деяких причин:

  1. Запити, які добре працюють в СУБД (система управління базами даних), можуть також не працювати на іншому.
  2. Попередні версії однієї і тієї ж СУБД можуть не оптимізувати продукт Dekart, а також останній.
  3. І, мабуть, найважливіше. Структура запиту з JOINС набагато простіше прочитати і зрозуміти, що він робить, тому легше змінювати запит.

Взагалі, мій рада використовувати JOINзамість цього.