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.