Ogni risultato di un'operazione SQL è funzionalmente una nuova tabella, indipendentemente dal fatto che sia archiviato sul disco o in memoria
La funzione di un join è di "unire" due tabelle insieme in una terza tabella sintetica che (di solito) esiste solo in memoria durante il tempo in cui viene inviata all'applicazione.
Il motivo per utilizzare un join è quello di ridurre le anomalie dei dati , assicurando che i dati vengano visualizzati in un'unica posizione nel database.
Considera quanto segue:
Person ( ID Integer Primary Key, FName String, LName String, Address String, City String, ZipCode String)
Qui, ogni volta che il governo cambia i codici postali (cosa che accade completamente troppo frequentemente per i gusti degli sviluppatori di database *) la tabella delle persone dovrà essere aggiornata in modo tale che tutti i vecchi codici postali appartengano correttamente alla città corretta e al nuovo codice postale.
In questo caso, lo stesso codice postale si trova in più tuple della tabella e, se la tabella è modificabile manualmente, sarà soggetta a gravi anomalie di aggiornamento poiché le nuove combinazioni città / codice postale vengono immesse senza che il database nel suo insieme venga aggiornato.
Avendo invece tre tabelle, otteniamo gli stessi dati, ma con maggiore flessibilità e affidabilità (a scapito di alcune prestazioni, sebbene le domande di "denormalizzazione adeguata" siano un argomento per un'altra serie di risposte).
Person ( PersonID Integer Primary Key, FName String, LName String)
City ( CityID Integer Primary Key, City String, State String, ZipCode String )
Address ( AddressID Integer Primary Key, AddressLine1 String, CityID Integer References City, PersonID Integer References Person)`
E possiamo ottenere una singola "tabella" da quanto sopra attraverso la seguente query:
SELECT Fname, Lname, AddressLine1, City, State, ZipCode
FROM Person
INNER JOIN Address USING (PersonID)
INNER JOIN City USING (CityID)
Questo ci consente di aggiornare le singole tabelle ogni volta che cambia qualcosa di specifico su di esse, senza corrompere il resto dei dati associati.
An INNER JOIN
è il tipo predefinito di join. In parole povere nota: "combina le tuple in cui questo record dalla tabella a corrisponde a questo record dalla tabella b" Gli altri tipi di join sono OUTER JOINS
e ciò che è noto come a CARTESIAN PRODUCT
. Un join esterno è "Prendi tutto dalla tabella sinistra o destra (come specificato) e dove corrisponde l'altra tabella, uniscilo. Dove non corrisponde, riempilo con valori null" E un prodotto cartesiano (senza entrare nell'algebra relazionale è: prendi ogni possibile combinazione di tuple in entrambe le tabelle e le emette in una tabella, senza far corrispondere nulla.
* Più che mai, specialmente nel caso di spostare i confini dei codici postali a causa della gerrymandering