Guadagna ON-Line

 » Home » DataBase Relazionali e linguaggio SQL

Clausola DISTINCT ed eliminazione dei Duplicati

 

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 Pietro Suffritti







Indice
 Introduzione
Cos'e' un database?
Database Relazionali
Cos'e' SQL
Commit e Rollback
Gestione multiutenza
 Linguaggio SQL
Il comando SELECT
Selez. Condizionata
Operatori Relazionali
Condizioni complesse
IN, BETWEEN e NOT
LIKE e carattere %
I Join
Le Chiavi
Creare un Join
DISTINCT e Duplicati
Alias, In e Subquery
 Comandi SQL Vari
Funzioni di Aggregazione
Viste
Creare Nuove Tabelle
Modifica struttura tab.
Inserire dati in tabella
Eliminare dati da tabella
Modifica dei dati
Indici
GROUP BY ed HAVING
Altre Subquery
EXISTS ed ALL
UNION ed Outer Joins
 Sommario Sintassi
 Link utili SQL

     

by 1999-2012 , ADMEDIA multimedia software development, Tutti i diritti riservati.
Per utilizzare il materiale pubblicato su HarrrDito.it è necessario richiedere l'autorizzazione.
Tutti i marchi citati sono copyright dei rispettivi proprietari. - Note Legali -




cod: 2-2.27.09 - 38.107.179.222