Corsi on-line
Chiudi
Newsletter:
  • Seguici su Facebook
  • Seguici su Twitter
  • Seguici su Google+
  • Seguici via RSS
  • Seguici col tuo Smartphone

JOIN - Relazioni tra più tabelle

Lo scopo di una database è quello di conservare i dati in maniera stabile, ma anche quello di organizzarli in forma normalizzata, evitando la ridondanza dei dati.

Normalizzare un database significa creare una struttura tale in cui i dati sono fisicamente separati tra loro ma possono essere messi insieme con le relazioni.

(L'articolo continua più sotto...)

I casi di studio sono molteplici e di diversa natura, in cui si può arrivare a diverse soluzioni, magari altrettanto valide. Prendiamo il caso delle nostre due tabelle, autori e libri; la tabella libri contiene un campo di riferimento all'autore del libro specificato, il cui nome si trova fisicamente all'interno della tabella autori. Avremmo potuto inserire ogni volta il nome dell'autore nel record in cui sono specificati i dati del libro ed avremmo potuto definire una query del tipo

SELECT DISTINCT autore FROM libri
per ottenere un report descrittivo di tutti gli autori presenti, elencandoli una singola volta.

La scelta di due tabelle per un'esigenza come quella della nostra libreria informatizzata ha dei pro e dei contro. Il pro è che si ottiene un database normalizzato che evita la ridondanza dei dati; il contro è che l'implementazione di una relazione tra due o più tabelle determina un maggior dispendio di memoria in fase di esecuzione della ricerca. A seconda delle esigenze e delle tecnologie a disposizione potremmo effettuare scelte differenti per ottenere le soluzioni ottimali in funzione delle esigenze pratiche: da qui si determinerà la nostra bravura di progettisti di database.

Veniamo alla pratica.

Esistono due sistemi differenti per implementare una relazione, ovvero utilizzando una semplice clausola WHERE, oppure utilizzando il comando INNER JOIN; la differenza tra i due è nel rapporto potenza/dispendio di memoria: il comando JOIN è più performante in termini di potenza ma richiede un maggior impiego di memoria in fase di esecuzione della ricerca.

Facciamo un esempio con la modalità tradizionale in cui ricerchiamo tutti i libri scritti da Tolkien, visualizzando anche il nome dell'autore al posto dell'id di riferimento.

Premetto che per indicare un campo contenuto in una determinata tabella, in SQL si usa la forma nome_tabella.noe_campo, ad esempio libri.titolo.

Ecco il codice:

SELECT
    autori.autore,
    libri.titolo,
    libri.prezzo
FROM
    autori,
    libri
WHERE
    autori.id = libri.id_autore
AND
    autori.id = 1
Specifico i nomi dei campi che voglio visualizzare associandoli alla tabella di appartenenza; specifico le tabelle in cui sono contenuti i dati che mi interessano; nel WHERE indico per prima cosa i campi di relazione (detti comunque anche campi di JOIN), ovvero effettuo l'associazione tra il'id dell'autore con l'id di riferimento all'autore nel record del libro; con una clausola AND specifico che voglio estrarre i libri scritti dall'autore che ha id = 1, ovvero Tolkien.

Scriviamo la stessa query utilizzando l'istruzione INNER JOIN:

SELECT
    autori.autore,
    libri.titolo,
    libri.prezzo
FROM
    autori
INNER JOIN
    libri
ON
    autori.id = libri.id_autore
WHERE
    autori.id = 1
Con questo codice: specifico i campi; specifico la prima tabella e poi la seconda, associandole i campi di relazione con la clausola ON ed utilizzo il WHERE per stabilire il criterio (o filtro, che dir si voglia) di ricerca.

Divertitevi ad effettuare ricerche in base a dei criteri relazionando le due tabelle.

Corsi
Corso MS AccessCorso MS Access
Impara a creare e gestire database in maniera semplice e veloce. A partire da 39 €.
Corso MySQLCorso MySQL
Gestione del database open-source. A partire da 49 €.
Corso SQL e DatabaseCorso SQL e Database
Creazione e gestione di database relazionali. A partire da 39 €.
Sommario
Annunci

Mr.Webmaster

Pubblicità
Chi Siamo
Contattaci
Collabora
Note Legali
© 2003 - 2012 Mr.Webmaster - Il portale dei Webmaster Italiani - Tutti i diritti riservati | Powered by IKIweb Internet Media S.r.l. - PIVA 02848390122