Oracle
 sql >> Database >  >> RDS >> Oracle

Join esterno sinistro utilizzando + accedi a Oracle 11g

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.