|
Prendiamo in esame la necessità, nel nostro database di esempio, di avere
una lista dei codici e dei nomi esclusivamente degli antiquari che hanno venduto
un oggetto. Ovviamente si vorrà che nella lista risultante ogni venditore sia
elencato una sola volta, indipendentemente dal numero di oggetti che ha venduto
- non vogliamo sapere quanti oggetti ha venduto un antiquario, ma solo che abbia
venduto qualcosa (per poterli conteggiare invece fare riferimento alla
successiva sezione sulle funzioni di aggregazione).
Questo significa che
dobbiamo dire ad SQL di eliminare le righe duplicate delle vendite dello stesso
antiquario, e quindi elencare ognuno di questi una volta sola. Per ottenere
questo scopo utilizzeremo la clausola DISTINCT.
Per prima cosa ci serve
un equijoin (come e' stato spiegato subito sopra) alla tabella degli Antiquari
per potere ottenere i dati particolareggiati di ogni antiquario, cioè cognome e
nome. Ovviamente in merito va mantenuta ben in mente quella che prima e' stata
definita l' Integrità referenziale, cioè nel caso in cui non esistesse un
record relativo al codice presente nel campo IDVenditore all' interno del campo
IDAntiquario nella tabella Antiquari il minimo che può accadere è che il
record non venga mostrato, mentre addirittura su alcuni DBMS si verificherebbe
un errore di integrità referenziale violata bloccando l' esecuzione della
query. come abbiamo detto inoltre vogliamo eliminare le occorrenze multiple dei
record nella nostra lista, quindi impieghiamo la clausola Distinct sulle colonne
in cui potrebbe verificarsi l' occorrenza multipla stessa
Per aggiungere un'
ulteriore livello di complessità della query , vogliamo i risultati in ordine
alfabetico prima per cognome e poi per nome. per fare questo possiamo utilizzare
la clausola ORDER
BY.
La nostra query finale sarà la seguente:
SELECT DISTINCT IDVenditore, CognomeAntiquario, NomeAntiquario FROM
Antichita, Antiquari WHERE IDVenditore = IDAntiquario ORDER
BY CognomeAntiquario, NomeAntiquario;
In questo esempio particolare, visto che tutti hanno venduto almeno un
oggetto, avremo una lista completa di tutti gli antiquari, in ordine alfabetico
per cognome e nome. Per uso futuro (cioè se un qualche sadico ve lo viene a
chiedere) tenete presente che questo tipo di Join è da considerarsi nella
categoria degli
inner joins.
di
|