Cos'è un SQL JOIN
e quali sono i diversi tipi?
SQL JOIN
?La SQL JOIN
è un metodo per recuperare dati da due o più tabelle di database.
SQL JOIN
?Ci sono un totale di cinque JOIN
. Essi sono :
1. JOIN or INNER JOIN
2. OUTER JOIN
2.1 LEFT OUTER JOIN or LEFT JOIN
2.2 RIGHT OUTER JOIN or RIGHT JOIN
2.3 FULL OUTER JOIN or FULL JOIN
3. NATURAL JOIN
4. CROSS JOIN
5. SELF JOIN
In questo tipo di JOIN
, otteniamo tutti i record che corrispondono alla condizione in entrambe le tabelle, e i record in entrambe le tabelle che non corrispondono non vengono riportati.
In altre parole, la INNER JOIN
si basa sul singolo fatto che: SOLO le voci corrispondenti in ENTRAMBE le tabelle DOVREBBERO essere elencate.
Nota che una JOIN
senza altre parole chiave JOIN
(come INNER
, OUTER
, LEFT
, ecc.) è una INNER JOIN
. In altre parole, JOIN
è
uno zucchero sintattico per la INNER JOIN
(vedi: https://stackoverflow.com/questions/565620/difference-between-join-and-inner-join).
La OUTER JOIN
recupera
O, le righe corrispondenti di una tabella e tutte le righe dell'altra tabella Oppure, tutte le righe di tutte le tabelle (non importa se c'è una corrispondenza o meno).
Ci sono tre tipi di Outer Join:
2.1 LEFT OUTER JOIN o LEFT JOIN
Questa unione restituisce tutte le righe della tabella di sinistra insieme alle righe corrispondenti della
tabella di destra. Se non ci sono colonne corrispondenti nella tabella di destra, restituisce valori NULL
.
2.2 RIGHT OUTER JOIN o RIGHT JOIN
Questa JOIN
restituisce tutte le righe della tabella di destra insieme alle righe corrispondenti della
tabella di sinistra. Se non ci sono colonne corrispondenti nella tabella sinistra, restituisce valori NULL
.
2.3 FULL OUTER JOIN o FULL JOIN
Questa JOIN
combina la LEFT OUTER JOIN
e la RIGHT OUTER JOIN
. Restituisce righe da entrambe le tabelle quando le condizioni sono soddisfatte e restituisce un valore NULL
quando non c'è corrispondenza.
In altre parole, la OUTER JOIN
si basa sul fatto che: SOLO le voci corrispondenti in UNA DELLE tabelle (DESTRA o SINISTRA) o ENTRAMBE le tabelle (COMPLETE) DOVREBBERO essere elencate.
Note that `OUTER JOIN` is a loosened form of `INNER JOIN`.
Si basa sulle due condizioni:
JOIN
è fatta su tutte le colonne con lo stesso nome per l'uguaglianza.Questo sembra essere più di natura teorica e come risultato (probabilmente) la maggior parte dei DBMS non si preoccupano nemmeno di supportarlo.
È il prodotto cartesiano delle due tabelle coinvolte. Il risultato di una CROSS JOIN
non avrà senso
nella maggior parte delle situazioni. Inoltre, non ne avremo affatto bisogno (o ne ha bisogno il meno possibile, per essere precisi).
Non è una forma diversa di JOIN
, piuttosto è una JOIN
(INNER
, OUTER
, ecc.) di una tabella a se stessa.
A seconda dell'operatore usato per una clausola JOIN
, ci possono essere due tipi di JOIN
. Essi sono
Equi JOIN
Theta JOIN
Per qualsiasi tipo di JOIN
(INNER
, OUTER
, ecc.), se usiamo SOLO l'operatore di uguaglianza (=), allora diciamo che
la JOIN
è una EQUI JOIN
.
Questo è lo stesso di EQUI JOIN
ma permette tutti gli altri operatori come >, <, >= ecc.
Molti considerano sia EQUI JOIN
che Theta JOIN
simili a INNER
, OUTER
etc JOIN
. Ma io credo fortemente che sia un errore e rende le
idee vaghe. Perché INNER JOIN
, OUTER JOIN
ecc sono tutti collegati con
le tabelle e i loro dati, mentre EQUI JOIN
e THETA JOIN
sono solo
connessi con gli operatori che usiamo nella prima.
Ancora, ci sono molti che considerano la
NATURAL JOIN
come una sorta diEQUI JOIN
. In effetti, è vero, a causa della prima condizione che ho menzionato per laNATURAL JOIN
. Tuttavia, non dobbiamo restringere la cosa semplicemente alle soleNATURAL JOIN
. LeINNER JOIN
, leOUTER JOIN ecc. potrebbero essere anche delle
EQUI JOIN`.
Definizione:
Le JOINS sono un modo per interrogare i dati combinati insieme da più tabelle simultaneamente.
Per quanto riguarda gli RDBMS ci sono 5 tipi di join:
Equi-Join: Combina record comuni da due tabelle in base a condizioni di uguaglianza. Tecnicamente, l'unione è fatta usando l'operatore di uguaglianza (=) per confrontare i valori della chiave primaria di una tabella e i valori della chiave esterna di un'altra tabella, quindi l'insieme dei risultati include i record comuni (abbinati) di entrambe le tabelle. Per l'implementazione vedi INNER-JOIN.
Natural-Join: È una versione migliorata di Equi-Join, in cui SELECT omette la colonna duplicata. Per l'implementazione vedere INNER-JOIN
Non-Equi-Join:** E' l'inverso di Equi-join in cui la condizione di unione è diversa dall'operatore di uguaglianza (=), per esempio !=, <=, >=, >, < o BETWEEN ecc. Per l'implementazione vedi INNER-JOIN.
Self-Join:: Un comportamento personalizzato di join in cui una tabella combinata con se stessa; Questo è tipicamente necessario per l'interrogazione di tabelle auto-referenziate (o entità di relazione unarie). Per l'implementazione vedere INNER-JOIN.
Prodotto cartesiano:** Combina trasversalmente tutti i record di entrambe le tabelle senza alcuna condizione. Tecnicamente, restituisce l'insieme dei risultati di una query senza clausola WHERE.
Secondo la preoccupazione e l'avanzamento di SQL, ci sono 3 tipi di join e tutti i join RDBMS possono essere raggiunti usando questi tipi di join.
INNER-JOIN: Unisce (o combina) le righe abbinate di due tabelle. L'abbinamento è fatto in base alle colonne comuni delle tabelle e alla loro operazione di confronto. Se la condizione si basa sull'uguaglianza allora: EQUI-JOIN eseguito, altrimenti Non-EQUI-Join.
OUTER-JOIN: Unisce (o combina) le righe abbinate da due tabelle e le righe non abbinate con valori NULL. Tuttavia, può personalizzare la selezione delle righe non abbinate, ad esempio selezionando le righe non abbinate dalla prima tabella o dalla seconda tabella per sottotipi: LEFT OUTER JOIN e RIGHT OUTER JOIN.
2.1. LEFT Outer JOIN (a.k.a, LEFT-JOIN): Restituisce le righe corrispondenti da due tabelle e quelle non corrispondenti solo dalla tabella LEFT (cioè la prima tabella).
2.2. RIGHT Outer JOIN (a.k.a, RIGHT-JOIN): Restituisce le righe abbinate da due tabelle e non abbinate solo dalla tabella DESTRA.
2.3. FULL OUTER JOIN (alias OUTER JOIN): Restituisce righe abbinate e non abbinate da entrambe le tabelle.
Nota: Self-JOIN può essere realizzato sia con INNER-JOIN, OUTER-JOIN e CROSS-JOIN in base ai requisiti, ma la tabella deve unirsi a se stessa.
1.1: INNER-JOIN: implementazione di Equi-join
SELECT *
FROM Table1 A
INNER JOIN Table2 B ON A.<Primary-Key> =B.<Foreign-Key>;
1.2: INNER-JOIN: implementazione Natural-JOIN
Select A.*, B.Col1, B.Col2 --But no B.ForeignKeyColumn in Select
FROM Table1 A
INNER JOIN Table2 B On A.Pk = B.Fk;
1.3: INNER-JOIN con implementazione NON-Equi-join
Select *
FROM Table1 A INNER JOIN Table2 B On A.Pk <= B.Fk;
1.4: INNER-JOIN con SELF-JOIN
Select *
FROM Table1 A1 INNER JOIN Table1 A2 On A1.Pk = A2.Fk;
2.1: OUTER JOIN (full outer join)
Select *
FROM Table1 A FULL OUTER JOIN Table2 B On A.Pk = B.Fk;
2.2: LEFT JOIN
Select *
FROM Table1 A LEFT OUTER JOIN Table2 B On A.Pk = B.Fk;
2.3: RIGHT JOIN
Select *
FROM Table1 A RIGHT OUTER JOIN Table2 B On A.Pk = B.Fk;
3.1: CROSS JOIN
Select *
FROM TableA CROSS JOIN TableB;
3.2: CROSS JOIN-Self JOIN
Select *
FROM Table1 A1 CROSS JOIN Table1 A2;
//OR//
Select *
FROM Table1 A1,Table1 A2;