TableA LEFT OUTER JOIN TableB
ist äquivalent zu TableB RIGHT OUTER JOIN Table A
.
(+)
Bezeichnet in Oracle die "optionale" Tabelle in JOIN. In Ihrer ersten Abfrage ist es also a P LEFT OUTER JOIN S
. In Ihrer zweiten Abfrage ist es S RIGHT OUTER JOIN P
. Sie sind funktional gleichwertig.
In der Terminologie geben RECHTS oder LINKS an, auf welcher Seite des Joins immer ein Datensatz vorhanden ist, und die andere Seite ist möglicherweise null. Also in einem P LEFT OUTER JOIN S
, P
wird immer ein Datensatz haben, weil es auf dem ist LEFT
, aber S
könnte null sein.
Weitere Erklärungen finden Sie in diesem Beispiel von java2s.com .
Zur Verdeutlichung denke ich, dass 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, worauf es bei der Bestimmung von RIGHT vs LEFT in der impliziten Join-Syntax ankommt.
LINKE ÄUSSERE VERBINDUNG
SELECT *
FROM A, B
WHERE A.column = B.column(+)
RIGHT OUTER JOIN
SELECT *
FROM A, B
WHERE B.column(+) = A.column
Ich habe nur die Seiten der Begriffe in der WHERE-Klausel ausgetauscht, aber sie sind immer noch funktional gleichwertig. (Weitere Informationen hierzu finden Sie weiter oben in meiner Antwort.) Die Platzierung des (+)
bestimmt RECHTS oder LINKS. (Insbesondere wenn (+)
sich das rechts befindet, ist es ein LEFT JOIN. Wenn (+)
es sich links befindet, ist es ein RIGHT JOIN.)
Arten von JOIN
Die beiden Stile von JOIN sind implizite JOINs und explizite JOINs . Sie sind verschiedene Arten des Schreibens von JOINs, aber sie sind funktional gleichwertig.
Siehe diese SO-Frage .
Implizite JOINs listen 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 Verknüpfungsbedingungen mit der Aufnahme einer bestimmten Tabelle anstelle einer WHERE-Klausel.
Explizite JOIN
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 werden implizite JOINs im Allgemeinen zugunsten einer expliziten Syntax empfohlen.