Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Left Outer Join mit + Zeichen in Oracle 11g

TableA LEFT OUTER JOIN TableB entspricht TableB RIGHT OUTER JOIN Table A .

In Oracle (+) bezeichnet die "optionale" Tabelle im JOIN. In Ihrer ersten Abfrage ist es also ein P LEFT OUTER JOIN S . In Ihrer zweiten Abfrage ist es S RIGHT OUTER JOIN P . Sie sind funktional gleichwertig.

In der Terminologie geben RIGHT oder LEFT an, welche Seite des Joins immer einen Datensatz hat, und die andere Seite kann null sein. Also in einem P LEFT OUTER JOIN S , P wird immer einen Eintrag haben, da er sich auf der LEFT befindet , aber S könnte null sein.

Siehe dieses Beispiel von java2s.com für weitere Erläuterungen.

Zur Verdeutlichung sage ich, dass die Terminologie keine Rolle spielt, da sie nur zur Visualisierung dient. Was zählt, ist, dass Sie das Konzept verstehen, wie es funktioniert.

RECHTS gegen LINKS

Ich habe einige Verwirrung darüber gesehen, was bei der Bestimmung von RIGHT vs. LEFT in der impliziten Join-Syntax wichtig ist.

LEFT OUTER JOIN

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

RIGHT OUTER JOIN

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

Ich habe lediglich die Seiten der Begriffe in der WHERE-Klausel vertauscht, aber sie sind immer noch funktional gleichwertig. (Weitere Informationen dazu finden Sie weiter oben in meiner Antwort.) Die Platzierung des (+) bestimmt RECHTS oder LINKS. (Insbesondere, wenn der (+) rechts ist, ist es ein LEFT JOIN. Wenn (+) links ist, ist es ein RIGHT JOIN.)

Join-Arten

Die beiden Arten von JOIN sind implizite JOINs und explizite JOINs . Es handelt sich um unterschiedliche Arten des Schreibens von JOINs, aber sie sind funktional gleichwertig.

Siehe diese SO-Frage .

Implizite JOINs Listen Sie einfach alle Tabellen zusammen auf. Die Join-Bedingungen werden in einer WHERE-Klausel angegeben.

Implizite JOIN

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

Explizite JOINs Verknüpfen Sie Join-Bedingungen mit der Aufnahme einer bestimmten Tabelle statt in eine WHERE-Klausel.

Explizite VERBINDUNG

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

Diese impliziten JOINs können schwieriger zu lesen und zu verstehen sein, und sie haben auch einige Einschränkungen, da die Join-Bedingungen in anderen WHERE-Bedingungen gemischt sind. Daher wird im Allgemeinen von impliziten JOINs zugunsten einer expliziten Syntax abgeraten.