TableA LEFT OUTER JOIN TableB
еквівалентно TableB RIGHT OUTER JOIN Table A
.
В Oracle (+)
позначає "необов'язкову" таблицю в JOIN. Отже, у вашому першому запиті це a P LEFT OUTER JOIN S
. У вашому другому запиті це S RIGHT OUTER JOIN P
. Вони функціонально еквівалентні.
У термінології RIGHT або LEFT вказують, на якій стороні об’єднання завжди є запис, а інша сторона може бути нульовою. Так в P LEFT OUTER JOIN S
, P
завжди буде мати запис , тому що це на LEFT
, але S
може бути порожнім.
Дивіться цей приклад на сайті java2s.com для додаткового пояснення.
Для уточнення, я гадаю, я кажу, що термінологія не має значення, оскільки вона лише допомагає візуалізувати. Важливо те, що ви розумієте концепцію того, як це працює.
ПРАВО проти ЛІВО
Я бачив певну плутанину щодо того, що важливо при визначенні ПРАВО проти ЛІВО в неявному синтаксисі об’єднання.
ЛІВО ВНЕШНЄ ПРИЄДНАННЯ
SELECT *
FROM A, B
WHERE A.column = B.column(+)
ПРАВИЛЬНО ВНЕШНЄ ПРИЄДНАННЯ
SELECT *
FROM A, B
WHERE B.column(+) = A.column
Все, що я зробив, - це поміняти сторони термінів у реченні WHERE, але вони все ще функціонально еквівалентні. (Докладніше про це див. Вище в моїй відповіді.) Розміщення (+)
визначає ПРАВО або ВЛІВО. (Зокрема, якщо (+)
праворуч - це ЛІВА ПРИЄДНАННЯ. Якщо (+)
ліва - ПРАВА ПРИЄДНАННЯ.)
Типи ПРИЄДНАЙТЕСЯ
Два стилі JOIN - це неявні JOINs та явні JOINs . Це різні стилі написання JOIN, але вони функціонально еквівалентні.
Дивіться це питання SO .
Неявні ПРИЄДНАННЯ просто перелічують усі таблиці разом. Умови об'єднання вказані в реченні WHERE.
Неявне ПРИЄДНАННЯ
SELECT *
FROM A, B
WHERE A.column = B.column(+)
Явні JOINs пов'язують умови приєднання з включенням конкретної таблиці, а не в речення WHERE.
Явне JOIN
SELECT *
FROM A
LEFT OUTER JOIN B ON A.column = B.column
Ці неявні ПРИЄДНАННЯ може бути важче прочитати та зрозуміти, і вони також мають кілька обмежень, оскільки умови приєднання змішані в інших умовах ДЕ. Таким чином, неявні JOIN, як правило, рекомендуються проти явного синтаксису.