Articoli Referenze Script FAQ Downloads ASP E-Commerce con ASP Menu Javascript Area Aziende Cocktail Registrazione domini



JOIN - relazioni tra due o più tabelle di un database

Home + Articoli + Database e SQL + Articolo # 88
Autore: Luca Ruggiero



Nell'articolo relativo all'SQL DML abbiamo esaminato, tra l'altro, l'istruzione SELECT per la ricerca dei dati su un database. Abbiamo parlato anche un po della teoria dei database relazionali nell'articolo introduttivo all'utilizzo dei database, spiegando che le strutture di dati si possono anche "spezzare" in più tabelle, allo scopo di ottimizzare il lavoro e potenziare le ricerche, dando cosi vita al concetto di relazione.

In SQL esiste un sistema nativo per la creazione di query su più tabelle (che vedremo a breve) ed esiste l'istruzione JOIN (letteralmente "unione") che svolge la funzione di effettuare ricerche su più tabelle.

Prendiamo come esempio il database creato negli articoli precedenti di questa sezione, in cui abbiamo esaminato, fino ad ora, il linguaggio SQL. Abbiamo un database generico contenente la tabella "utenti" composta dai campi "id" di tipo Contatore, "nome" e "cognome" di tipo Testo. Supponiamo adesso di voler attribuire ad ogni utente una serie di professioni.

Create quindi, attraverso l'istruzione CREATE dell'SQL DDL la tabella "professioni" composta dai campi "id" (Contatore), "utente" (Numerico) e "professione" (Testo). Segue il codice SQL CREATE per la creazione di detta tabella
CREATE TABLE professioni
(
    id          AutoIncrement PRIMARY KEY
    utente      Integer
    professione Text (20) NOT NULL
)
Il campo "id" della tabella "utenti" si relazionerà col campo "utente" della tabella "professioni", dando vita al concetto di relazione uno a molti, ovvero "un utente che svolge più professioni".

Popolate la tabella "professioni" con dei dati a caso, ad esempio assegnando due professioni a ciascun utente, specificando nel campo "utente" lo stesso valore del campo "id" della tabella "utenti".

La sintassi per accedere ad un campo di una tabella, quando vi sono le relazioni, è la seguente
nome_tabella.nome_campo
Ad esempio per accedere al campo "nome" della tabella "utenti" scriveremo
utenti.nome
e cosi via, mentre le tabelle si scrivono in successione separate da una virgola.

Facciamo adesso un esempio con codice SQL nativo in cui estraiamo tutti i dati dalle due tabelle di riferimento
SELECT * FROM utenti, professioni
WHERE utenti.id = professione.utente
La relazione è questa
utenti.id = professione.utente
Attenzione: due campi, per essere relazionati, devono essere dello stesso tipo.

Possiamo naturalmente scegliere solo determinati campi da visualizzare e, ad esempio, visualizzare solo i dati relativi ad un utente
SELECT
    utenti.nome, utenti.cognome, professioni.professione
FROM
    utenti, professioni
WHERE
    utenti.id = professione.utente
AND
    utente.id = 1
Diamo adesso uno sguardo all'istruzione JOIN. Sulla scorta delle specifiche di ricerca già definite, traduciamo l'ultimo esempio SQL riportato con la sintassi dell'istruzione JOIN
SELECT
    utenti.nome, utenti.cognome, professioni.professione
FROM
    utenti
INNER JOIN
    professioni
ON
    utenti.id = professione.utente
WHERE
    utente.id = 1
La sintassi dell'istruzione JOIN è la seguente
SELECT * FROM tab_uno
INNER JOIN tab_due ON tab_uno.campo = tab_due.campo
La differenza nell'utilizzo del sistema tradizionale piuttosto che dell'istruzione JOIN consiste nel fatto che la prima è più semplice da utilizzare ma meno potente, mentre la seconda è più potente della prima, ma sovraccarica il lavoro del DBMS in fase di elaborazione delle ricerche. Consiglio dunque un utilizzo più intenso del sistema tradizionale.

© 2008 ASP Center di Luca Ruggiero - P. IVA 05564851219 - Disclaimer | Privacy | Pubblicità | Supportaci | Staff | Contatti
  Appunti PHP | Giornale Webmaster | Mr.Webmaster | Download | DevSpy.com | ASPCode.it | ClaudioGarau.it | Webmaster Facile | Come Faccio | CodiceFacile.it | I Programmatori | By Luciani | VoiceXML Italian User Group | Giochi | Extro Web Site | Morpheus Web | AG Web Solutions | Net-Free | PC Sicuro | PC Self | Tutorial Web | Dablones