Oracle
 sql >> база данни >  >> RDS >> Oracle

Ляво външно присъединяване с помощта на знак + в Oracle 11g

TableA LEFT OUTER JOIN TableB е еквивалентен на TableB RIGHT OUTER JOIN Table A .

В Oracle, (+) обозначава "незадължителната" таблица в JOIN. Така че в първата ви заявка това е P LEFT OUTER JOIN S . Във втората ви заявка това е S RIGHT OUTER JOIN P . Те са функционално еквивалентни.

В терминологията RIGHT или LEFT указват коя страна на съединението винаги има запис, а другата страна може да е нула. Така че в P LEFT OUTER JOIN S , P винаги ще има запис, защото е от LEFT , но S може да е нула.

Вижте този пример от java2s.com за допълнително обяснение.

За да изясня, предполагам, че казвам, че терминологията няма значение, тъй като е там само за да ви помогне да визуализирате. Важното е да разбирате концепцията за това как работи.

ДЯСНО срещу ЛЯВО

Виждал съм известно объркване относно това какво има значение при определянето на RIGHT срещу LEFT в имплицитния синтаксис на свързване.

ЛЯВО ВЪНШНО СЪЕДИНЕНИЕ

SELECT *
FROM A, B
WHERE A.column = B.column(+)

ДЯСНО ВЪНШНО СЪЕДИНЕНИЕ

SELECT *
FROM A, B
WHERE B.column(+) = A.column

Всичко, което направих, е да разменя страните на термините в клаузата WHERE, но те все още са функционално еквивалентни. (Вижте по-горе в моя отговор за повече информация относно това.) Разположението на (+) определя ДЯСНО или ЛЯВО. (По-конкретно, ако (+) е отдясно, това е ЛЯВО СЪЕДИНЕНИЕ. Ако (+) е отляво, това е ДЯСНО СЪЕДИНЕНИЕ.)

Видове JOIN

Двата стила на JOIN са имплицитни JOINs и явни JOINs . Това са различни стилове на писане на JOIN, но са функционално еквивалентни.

Вижте този SO въпрос .

Неявни JOINs просто избройте всички таблици заедно. Условията за присъединяване са посочени в клауза WHERE.

Неявно ПРИСЪЕДИНЯВАНЕ

SELECT *
FROM A, B
WHERE A.column = B.column(+)

Изрични присъединявания асоциирайте условията за присъединяване с включване на конкретна таблица вместо в клауза WHERE.

Изрично ПРИСЪЕДИНЯВАНЕ

SELECT *
FROM A
LEFT OUTER JOIN B ON A.column = B.column

Тези имплицитни JOINs могат да бъдат по-трудни за четене и разбиране и те също имат няколко ограничения, тъй като условията за присъединяване се смесват в други условия WHERE. Като такива, имплицитните JOIN обикновено не се препоръчват в полза на изричния синтаксис.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ротационна таблица Oracle - как да промените елементите на редове в колони

  2. Защо изборът от съхранена процедура не се поддържа в релационни бази данни?

  3. Доставчикът на OraOLEDB в .NET ненадежден ли е в CLOB полета?

  4. Проблем с преобразуване на Oracle SQL DATE при използване на iBATIS чрез Java JDBC

  5. Oracle SQL Developer:Показване на резултатите на REFCURSOR в Grid?