sql >> Databasteknik >  >> RDS >> Oracle

Skillnad mellan Oracles plus (+) notation och ansi JOIN notation?

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 klausul OUTER 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ör FRÅN klausul OUTER JOIN syntax:

  • Du kan inte ange (+) operator i ett frågeblock som också innehåller FROM sats join-syntax.
  • (+) operatorn kan endast visas i WHERE sats eller, i sammanhanget med vänsterkorrelation (när TABELL specificeras sats) i FRÅ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 med ELLER logisk operator.
  • En VAR condition kan inte använda IN 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. Se SELECT för syntaxen för en yttre sammanfogning.



  1. Avancerad partitionsmatchning för partitionsmässig koppling

  2. Prestandarelaterade korrigeringar för SQL Server 2012

  3. Vikten av baslinjer

  4. SQL Server 2000 - Länkad server