TableA LEFT OUTER JOIN TableB
motsvarar TableB RIGHT OUTER JOIN Table A
.
I Oracle, (+)
anger den "valfria" tabellen i JOIN. Så i din första fråga är det en P LEFT OUTER JOIN S
. I din andra fråga är det S RIGHT OUTER JOIN P
. De är funktionellt likvärdiga.
I terminologin anger RIGHT eller LEFT vilken sida av kopplingen som alltid har en post, och den andra sidan kan vara null. Så i en P LEFT OUTER JOIN S
, P
kommer alltid att ha en post eftersom den är till LEFT
, men S
kan vara null.
Se det här exemplet från java2s.com för ytterligare förklaring.
För att förtydliga, antar jag att jag säger att terminologin inte spelar någon roll, eftersom den bara är till för att visualisera. Det som är viktigt är att du förstår hur det fungerar.
HÖGER vs VÄNSTER
Jag har sett en viss förvirring om vad som är viktigt för att bestämma RIGHT vs LEFT i implicit syntax för koppling.
VÄNSTER YTTRE JOIN
SELECT *
FROM A, B
WHERE A.column = B.column(+)
HÖGER YTTRE JOIN
SELECT *
FROM A, B
WHERE B.column(+) = A.column
Allt jag gjorde var att byta sida av termerna i WHERE-satsen, men de är fortfarande funktionellt likvärdiga. (Se högre upp i mitt svar för mer information om det.) Placeringen av (+)
bestämmer HÖGER eller VÄNSTER. (Särskilt om (+)
är till höger, det är en LEFT JOIN. Om (+)
är till vänster, det är en RIGHT JOIN.)
Typer av JOIN
De två stilarna för JOIN är implicita JOINs och explicita JOINs . De är olika sätt att skriva JOIN, men de är funktionellt likvärdiga.
Se denna SO-fråga .
Implicita JOINs lista helt enkelt alla tabeller tillsammans. Anslutningsvillkoren specificeras i en WHERE-sats.
Implicit JOIN
SELECT *
FROM A, B
WHERE A.column = B.column(+)
Explicita JOINs associera sammanfogningsvillkor med en specifik tabells inkludering istället för i en WHERE-sats.
Explicit JOIN
SELECT *
FROM A
LEFT OUTER JOIN B ON A.column = B.column
Dessa implicita JOINs kan vara svårare att läsa och förstå, och de har också några begränsningar eftersom anslutningsvillkoren är blandade i andra WHERE-förhållanden. Som sådan rekommenderas i allmänhet implicita JOINs till förmån för explicit syntax.