TableA LEFT OUTER JOIN TableB
is gelijk aan TableB RIGHT OUTER JOIN Table A
.
In Oracle, (+)
geeft de "optionele" tabel in de JOIN aan. Dus in je eerste zoekopdracht is het een P LEFT OUTER JOIN S
. In uw tweede zoekopdracht is het S RIGHT OUTER JOIN P
. Ze zijn functioneel equivalent.
In de terminologie specificeren RECHTS of LINKS welke kant van de join altijd een record heeft en de andere kant kan nul zijn. Dus in een P LEFT OUTER JOIN S
, P
zal altijd een record hebben omdat het aan de LEFT
staat , maar S
kan nul zijn.
Zie dit voorbeeld van java2s.com voor aanvullende uitleg.
Ter verduidelijking, ik denk dat ik zeg dat terminologie er niet toe doet, omdat het er alleen is om te helpen visualiseren. Het gaat erom dat je het concept begrijpt van hoe het werkt.
RECHTS versus LINKS
Ik heb enige verwarring gezien over wat belangrijk is bij het bepalen van RECHTS versus LINKS in de impliciete join-syntaxis.
LINKER BUITENSTE JOIN
SELECT *
FROM A, B
WHERE A.column = B.column(+)
RECHTS BUITENSTE JOIN
SELECT *
FROM A, B
WHERE B.column(+) = A.column
Het enige wat ik deed is de zijkanten van de termen in de WHERE-clausule verwisselen, maar ze zijn nog steeds functioneel equivalent. (Zie hoger in mijn antwoord voor meer info daarover.) De plaatsing van de (+)
bepaalt RECHTS of LINKS. (Met name als de (+)
is aan de rechterkant, het is een LEFT JOIN. Als (+)
is aan de linkerkant, het is een RECHTS JOIN.)
Soorten JOIN
De twee stijlen van JOIN zijn impliciete JOINs en expliciete JOINs . Het zijn verschillende schrijfstijlen voor JOIN's, maar ze zijn functioneel equivalent.
Zie deze SO-vraag .
Impliciete JOINs lijst gewoon alle tabellen bij elkaar op. De voorwaarden voor deelname worden gespecificeerd in een WHERE-clausule.
Impliciete JOIN
SELECT *
FROM A, B
WHERE A.column = B.column(+)
Expliciete JOINs koppel voorwaarden voor samenvoegen aan de opname van een specifieke tabel in plaats van in een WHERE-clausule.
Expliciete JOIN
SELECT *
FROM A
LEFT OUTER JOIN B ON A.column = B.column
Deze impliciete JOIN's kunnen moeilijker te lezen en te begrijpen zijn, en ze hebben ook enkele beperkingen omdat de join-voorwaarden worden gemengd in andere WHERE-voorwaarden. Als zodanig worden impliciete JOIN's over het algemeen afgeraden ten gunste van expliciete syntaxis.