2009-02-05 21 views
14

Ich habe einige SQL-Abfragen in Oracle gefunden, die '(+)' enthalten und ich habe keine Ahnung, was das bedeutet. Kann jemand seinen Zweck erklären oder einige Beispiele für seine Verwendung geben? DankeBedeutung von (+) in SQL-Abfragen

+0

dupe: http://stackoverflow.com/questions/430274/oracle-what-does-do-in-a-where-klause – Alkini

+1

Ich habe tatsächlich versucht, nach einer Antwort zu suchen, bevor Sie die Frage, aber nicht bekommen Ergebnisse bei der Suche nach '+' oder '(+). Es ist komisch, dass der Fragetitel in der URL auch den (+) Teil überspringt. – Zabbala

+0

Dies ist ein Duplikat von [diesem Beitrag] (http://stackoverflow.com/questions/430274/oracle-what-does-do-in-a-where-klause). Sie können dort weitere Informationen finden. –

Antwort

35

Es ist Oracles Synonym für OUTER JOIN.

SELECT * 
FROM a, b 
WHERE b.id(+) = a.id 

gleiche Ergebnis wie

SELECT * 
FROM a 
    LEFT OUTER JOIN b 
    ON b.id = a.id 
+0

Ich werde für die nächste Person notieren, achten Sie darauf, was mit den 'a's und' b's hier passiert ist. In dem Beispiel ist die from-Klausel "[a, b]", aber die Äquivalenzprüfung ist "[b.id = a.id]". Meine Gewohnheit ist es, die Äquivalenz zu behalten "[a.id = b.id]"; also habe ich das Beispiel falsch verstanden. Eine Stunde meines Lebens werde ich nicht zurückkommen; ^) – BIBD

+0

Dazu würde ich '(+)' interpretieren als Orakels Art zu sagen "diese Seite bekommt Nullen, wenn keine Übereinstimmung gefunden werden kann". Verwenden meiner Norm für Äquivalenzen von "[a.id = b.id]"; dann passiert ein Spiegel. Wenn ich die Abfrage neu schreibe, um dem modernen Standard zu folgen, wird "[a.id = b.id (+)]" zu LEFT OUTER und '[a.id (+) = b.id]' wird zu a RECHTE AUSSEN. – BIBD

+0

Das Ding ist der (+) Operator wird direkt in der bedingten Anweisung und auf der Seite der optionalen Tabelle platziert (die, die leere oder Null-Werte innerhalb der Bedingung enthalten darf). – Yergalem

4

gibt die + eine Abkürzung ist für OUTER JOIN, je nachdem, welche Seite man es auf, es gibt eine LINKS oder RECHTS OUTER JOIN

prüfen der zweite Eintrag in this forum post für einige Beispiele

2

IIRC, das + wird in älteren Oracle-Versionen verwendet, um einen äußeren Join in der vor-ANSI-SQL-Join-Syntax anzugeben. Mit anderen Worten:

select foo,bar 
from a, b 
where a.id = b.id+ 

ist das Äquivalent von

select foo,bar 
from a left outer join b 
on a.id = b.id 

HINWEIS: diese nach hinten sein kann/etwas falsch, denn ich habe noch nie die Pre-ANSI SQL-Syntax verwendet.

+1

Es wird in neueren Versionen von Oracle für diejenigen von uns verwendet, die ANSI sql hassen. –

+0

@Mark Brady genau. Ich fühle, dass es die Absicht der Abfrage klarer macht. Und ich hasse auch ANSI SQL. –

2

Verwenden Sie dies, um sicherzustellen, dass die Tabelle, der Sie beitreten, die Anzahl der zurückgegebenen Datensätze nicht reduziert. Das ist praktisch, wenn Sie einer Tabelle beitreten, die möglicherweise keinen Eintrag für jeden Schlüssel enthält, dem Sie beitreten.

Zum Beispiel, wenn Sie wurden einem Kunden und Kauftisch verbindet:

Zur Liste der alle Kunden und alle ihre Einkäufe, möchten Sie eine äußere tun verbinden (+) auf der Kauf-Tabelle so Kunden habe nichts gekauft, was immer noch in deinem Bericht erscheint.