TableA LEFT OUTER JOIN TableB
je ekvivalentní TableB RIGHT OUTER JOIN Table A
.
V Oracle (+)
označuje "volitelnou" tabulku v JOIN. Takže ve vašem prvním dotazu je to P LEFT OUTER JOIN S
. Ve vašem druhém dotazu je to S RIGHT OUTER JOIN P
. Funkčně jsou ekvivalentní.
V terminologii RIGHT nebo LEFT určují, která strana spojení má vždy záznam a druhá strana může být nulová. Takže v P LEFT OUTER JOIN S
, P
bude mít vždy záznam, protože je LEFT
, ale S
může být null.
Viz tento příklad z java2s.com pro další vysvětlení.
Abych to objasnil, myslím, že říkám, že na terminologii nezáleží, protože slouží pouze k vizualizaci. Důležité je, že rozumíte konceptu, jak to funguje.
VPRAVO vs. VLEVO
Viděl jsem určité nejasnosti ohledně toho, co je důležité při určování RIGHT vs LEFT v implicitní syntaxi spojení.
VNĚJŠÍ PŘIPOJENÍ VLEVO
SELECT *
FROM A, B
WHERE A.column = B.column(+)
PRAVÉ VNĚJŠÍ PŘIPOJENÍ
SELECT *
FROM A, B
WHERE B.column(+) = A.column
Vše, co jsem udělal, je zaměnit strany výrazů v klauzuli WHERE, ale stále jsou funkčně ekvivalentní. (Další informace o tom naleznete výše v mé odpovědi.) Umístění značky (+)
určuje VPRAVO nebo VLEVO. (Konkrétně, pokud (+)
je vpravo, je to LEVÝ JOIN. Pokud (+)
je vlevo, je to RIGHT JOIN.)
Typy JOIN
Dva styly JOIN jsou implicitní JOINy a explicitní JOINy . Jsou to různé styly psaní JOINů, ale jsou funkčně ekvivalentní.
Viz tento dotaz SO .
Implicitní JOINy jednoduše uveďte všechny tabulky dohromady. Podmínky spojení jsou specifikovány v klauzuli WHERE.
Implicitní JOIN
SELECT *
FROM A, B
WHERE A.column = B.column(+)
Explicitní JOINy přidružit podmínky spojení k zahrnutí konkrétní tabulky namísto klauzule WHERE.
Explicitní JOIN
SELECT *
FROM A
LEFT OUTER JOIN B ON A.column = B.column
Tyto Implicitní JOINy mohou být obtížněji čitelné a pochopitelné a mají také několik omezení, protože podmínky spojení jsou smíšené s jinými podmínkami WHERE. Jako takové jsou implicitní JOINy obecně doporučovány ve prospěch explicitní syntaxe.