Creare un Join

Lo scopo delle Chiavi appena discusse e' quella di correlare i dati attraverso le tabelle, senza dover in questo modo ripetere su tutte le tabelle i dati più frequenti, il che e' il vero scopo e la sostanziale differenza tra i database relazionali ed altri tipi di database. per esempio possiamo trovare i nomi di coloro che hanno comprato una sedia senza dover mettere il nome ed il cognome dell' acquirente nella tabella antichità. possiamo infatti ottenerne il nome mettendo in relazione coloro che hanno comprato una sedia con la lista di tutti i nomi degli antiquari della tabella Antiquari attraverso l' utilizzo dell' IDAcquirente, che mette in relazione i dati nelle due tabelle. per trovare i nomi di chi ha comprato una sedia possiamo , in pratica, utilizzare la seguente query:

SELECT CognomeAntiquario, NomeAntiquario
FROM Antiquari, Antichita
WHERE IdAcquirente = IDAntiquario AND Oggetto = 'Sedia';

Iniziamo ad analizzare le particolarità di questa query. la prima che balza all' occhio subito e' che ENTRAMBE le tabelle sono coinvolte nella query e citate di fianco alla clausola FROM. la seconda cosa e' che nella clausola WHERE le due chiavi delle due tabelle sono messe in relazione tramite l' uso della condizione IdAcquirente = IDAntiquario e quindi ristretto tramite la condizione Oggetto = 'Sedia' a coloro che hanno acquistato una sedia. La condizione che mette in collegamento le due tabelle (IDAcquirente=IDAntiquario) e' il nostro Join (in italiano connessione). Visto che la condizione che crea il join e' un uguale, questo tipo di join e' chiamato un equijoin. Il risultato di questa query saranno due nomi: Smith, Bob e Fowler, Sam.

La notazione a punti (Dot notation) permette di specificare il nome della tabella a cui si riferisce il campo , evitando così possibili ambiguità. pur essendo più "faticosa" e' nettamente preferibile visto che migliora notevolmente la leggibilità della query e riduce la possibilità di errori. la nostra query precedente in dot notation sarebbe così:

SELECT Antiquari.CognomeAntiquario, Antiquari.NomeAntiquario
FROM Antiquari, Antichita
WHERE Antichita.IdAcquirente = Antiquari.IDAntiquario AND Antichita.Oggetto = 'Sedia';

Questa notazione non sarebbe (e non e') necessaria se i nomi di tutti i campi di ogni tabella differissero l' uno dall' altro, ma e' comunque un' ottima abitudine da prendere e diventa fondamentale appena la struttura del database cresce a sufficienza da non essere più verificabile a colpo d'occhio