AFAIK, (+) notation er kun til stede for bagudkompatibilitet, fordi Oracle debuterede det, før ANSI-standarden for joins blev indført. Det er specifikt for Oracle, og du bør undgå at bruge det i ny kode, når der er en tilsvarende standard-kompatibel version tilgængelig.
Det ser ud til, at der er forskelle mellem de to og (+) notation har begrænsninger, som ANSI join-syntaksen ikke har. Oracle anbefaler selv, at du ikke bruger (+) notation.Fuld beskrivelse her i Oracle® Database SQL Language Reference11g Release 1 (11.1):
Oracle anbefaler, at du bruger FROM klausul OUTER JOIN syntaks i stedet for Oracle join-operatøren. Outer join-forespørgsler, der bruger Oracle join-operatoren (+) er underlagt følgende regler og begrænsninger, som ikke gælder for FROM klausul OUTER JOIN syntaks:
- Du kan ikke angive
(+)operator i en forespørgselsblok, der også indeholderFROMklausul joinsyntaks. (+) operator kan kun vises i WHEREklausul eller, i sammenhæng med venstre-korrelation (når du angiverTABELklausul) iFROMklausul, og kan kun anvendes på en kolonne i en tabel eller visning.- Hvis A og B er forbundet med flere sammenføjningsbetingelser, skal du bruge
(+)operatør under alle disse forhold. Hvis du ikke gør det, returnerer Oracle Database kun de rækker, der er et resultat af en simpel joinforbindelse, men uden en advarsel eller fejl for at informere dig om, at du ikke har resultaterne af en ydre joinforbindelse. (+) operatoren producerer ikke en ydre joinforbindelse, hvis du angiver en tabel i den ydre forespørgsel og den anden tabel i en indre forespørgsel. - Du kan ikke bruge
(+)operator til at outer-join en tabel til sig selv, selv om selv joins er gyldige.
For eksempel er følgende sætning ikke gyldig:
SELECT employee_id, manager_id
FROM employees
WHERE employees.manager_id(+) = employees.employee_id;
Følgende selvtilmelding er dog gyldig:
SELECT e1.employee_id, e1.manager_id, e2.employee_id
FROM employees e1, employees e2
WHERE e1.manager_id(+) = e2.employee_id;
(+) operator kan kun anvendes på en kolonne, ikke på et vilkårligt udtryk. Et vilkårligt udtryk kan dog indeholde en eller flere kolonner markeret med (+)operatør.- En
Hvor betingelse, der indeholder(+)operator kan ikke kombineres med en anden betingelse ved hjælp afELLERlogisk operator. - En
Hvor betingelse kan ikke brugeINsammenligningsbetingelse for at sammenligne en kolonne markeret med(+)operator med et udtryk.
Hvis WHERE klausul indeholder en betingelse, der sammenligner en kolonne fra tabel B med en konstant, derefter (+) operator skal anvendes på kolonnen, så Oracle returnerer rækkerne fra tabel A, som det har genereret null for denne kolonne. Ellers returnerer Oracle kun resultaterne af en simpel joinforbindelse.
I en forespørgsel, der udfører ydre joinforbindelser af mere end to par tabeller, kan en enkelt tabel kun være den nul-genererede tabel for én anden tabel. Af denne grund kan du ikke anvende (+) operator til kolonner af B i sammenføjningsbetingelsen for A og B og sammenføjningsbetingelsen for B og C. Se SELECT for syntaksen for en ydre joinforbindelse.