AFAIK, (+)
notation finns bara för bakåtkompatibilitet eftersom Oracle debuterade det innan ANSI-standarden för sammanfogningar infördes. Det är specifikt för Oracle och du bör undvika att använda det i ny kod när det finns en motsvarande standardkompatibel version tillgänglig.
Det verkar finnas skillnader mellan de två och (+)
notation har begränsningar som ANSI join-syntaxen inte har. Oracle själva rekommenderar att du inte använder (+)
Fullständig beskrivning här i Oracle® Database SQL Language Reference11g Release 1 (11.1):
Oracle rekommenderar att du använder
FROM
klausulOUTER JOIN
syntax snarare än Oracle join-operatorn. Yttre anslutningsfrågor som använder Oracle join-operatorn(+)
är föremål för följande regler och begränsningar, som inte gäller förFRÅN
klausulOUTER JOIN
syntax:
- Du kan inte ange
(+)
operator i ett frågeblock som också innehållerFROM
sats join-syntax.(+) operatorn kan endast visas i WHERE
sats eller, i sammanhanget med vänsterkorrelation (närTABELL
specificeras sats) iFRÅN
sats, och kan endast tillämpas på en kolumn i en tabell eller vy.- Om A och B är sammanfogade av flera kopplingsvillkor måste du använda
(+)
operatör under alla dessa förhållanden. Om du inte gör det kommer Oracle Database endast att returnera raderna som är resultatet av en enkel koppling, men utan en varning eller felmeddelande för att informera dig om att du inte har resultaten av en yttre koppling.(+) operatorn producerar inte en yttre koppling om du anger en tabell i den yttre frågan och den andra tabellen i en inre fråga. - Du kan inte använda
(+)
operatorn för att ytterkoppla en tabell till sig själv, även om självanslutningar är giltiga.Till exempel är följande påstående inte giltigt:
SELECT employee_id, manager_id FROM employees WHERE employees.manager_id(+) = employees.employee_id;
Följande självanslutning är dock giltig:
SELECT e1.employee_id, e1.manager_id, e2.employee_id FROM employees e1, employees e2 WHERE e1.manager_id(+) = e2.employee_id;
(+) operatorn kan endast tillämpas på en kolumn, inte på ett godtyckligt uttryck. Ett godtyckligt uttryck kan dock innehålla en eller flera kolumner markerade med (+)
operatör.- En
VAR
villkor som innehåller(+)
operatorn kan inte kombineras med ett annat villkor medELLER
logisk operator.- En
VAR
condition kan inte användaIN
jämförelsevillkor för att jämföra en kolumn markerad med(+)
operator med ett uttryck.Om
WHERE
sats innehåller ett villkor som jämför en kolumn från tabell B med en konstant, sedan(+)
operatorn måste tillämpas på kolumnen så att Oracle returnerar raderna från tabell A för vilka det har genererat nollvärden för denna kolumn. Annars returnerar Oracle endast resultatet av en enkel join.I en fråga som utför yttre kopplingar av fler än två par tabeller, kan en enda tabell vara den nollgenererade tabellen för endast en annan tabell. Av denna anledning kan du inte använda
(+)
operator till kolumner i B i kopplingsvillkoret för A och B och kopplingsvillkoret för B och C. SeSELECT
för syntaxen för en yttre sammanfogning.