TableA LEFT OUTER JOIN TableB
è equivalente a TableB RIGHT OUTER JOIN Table A
.
In Oracle, (+)
denota la tabella "opzionale" nel JOIN. Quindi nella tua prima query, è un P LEFT OUTER JOIN S
. Nella tua seconda query, è S RIGHT OUTER JOIN P
. Sono funzionalmente equivalenti.
Nella terminologia, DESTRA o SINISTRA specificano quale lato del join ha sempre un record e l'altro lato potrebbe essere nullo. Quindi in un P LEFT OUTER JOIN S
, P
avrà sempre un record perché è su LEFT
, ma S
potrebbe essere nullo.
Vedi questo esempio da java2s.com per ulteriori spiegazioni.
Per chiarire, suppongo che sto dicendo che la terminologia non ha importanza, poiché è lì solo per aiutare a visualizzare. L'importante è che tu comprenda il concetto di come funziona.
DESTRA vs SINISTRA
Ho visto una certa confusione su ciò che conta nel determinare DESTRA e SINISTRA nella sintassi di join implicita.
UNISCITI ESTERNI SINISTRA
SELECT *
FROM A, B
WHERE A.column = B.column(+)
ACCESSO ESTERNO DESTRO
SELECT *
FROM A, B
WHERE B.column(+) = A.column
Tutto quello che ho fatto è stato scambiare i lati dei termini nella clausola WHERE, ma sono ancora funzionalmente equivalenti. (Vedi più in alto nella mia risposta per maggiori informazioni al riguardo.) Il posizionamento del (+)
determina DESTRA o SINISTRA. (In particolare, se il (+)
è sulla destra, è un UNIONE A SINISTRA. Se (+)
è a sinistra, è un RIGHT JOIN.)
Tipi di UNISCITI
I due stili di JOIN sono JOIN impliciti e JOIN espliciti . Sono stili diversi di scrittura dei JOIN, ma sono funzionalmente equivalenti.
Vedi questa domanda SO .
JOIN impliciti elenca semplicemente tutte le tabelle insieme. Le condizioni di unione sono specificate in una clausola WHERE.
UNIONE implicita
SELECT *
FROM A, B
WHERE A.column = B.column(+)
JOIN espliciti associa condizioni di join con l'inclusione di una tabella specifica anziché in una clausola WHERE.
ISCRIZIONE esplicita
SELECT *
FROM A
LEFT OUTER JOIN B ON A.column = B.column
Questi JOIN impliciti possono essere più difficili da leggere e comprendere e hanno anche alcune limitazioni poiché le condizioni di join sono mescolate in altre condizioni WHERE. Pertanto, i JOIN impliciti sono generalmente sconsigliati a favore della sintassi esplicita.