back to top

SQL: Utilizzare SELECT DISTINCT per eliminare i doppioni

Quando si lavora coi i database รจ fondamentale saper gestire in modo efficiente i dati memorizzati. Uno dei problemi comuni che gli sviluppatori e gli analisti di database incontrano รจ la presenza di dati duplicati all’interno delle tabelle.

In questo contesto puรฒ rivelarsi utile conoscere la giusta sintassi SQL attraverso la quale isolare valori unici e a creare set di dati piรน “puliti” e coerenti. Nel seguente articolo, esploreremo come funziona questa sintassi e come puรฒ essere implementata per migliorare la gestione dei dati nel tuo database.

Il comando SELECT DISTINCT

Il comando SELECT DISTINCT di SQL รจ utilizzato per estrarre una sola volta ogni diversa occorrenza di un valore all’interno di un dato campo. Per essere piรน precisi, il comando principale รจ SELECT, mentre la clausola DISTINCT funge da suo modificatore, contribuendo a filtrare i risultati e a evitare duplicati.

La sintassi SELECT DISTINCT viene implementata quando c’รจ la necessitร  di estrarre da un campo, dove sono ammessi valori ripetuti, un elenco di valori senza i duplicati. Per comprenderne meglio l’utilizzo, procediamo con un esempio pratico che ci aiuterร  a comprendere meglio la situazione.

Immaginiamo di lavorare con il database di un negozio online che contiene una tabella “prodotti” strutturata come segue:

  • id – chiave primaria
  • marca
  • modello
  • prezzo

In questo contesto รจ evidente che il campo “marca” puรฒ contenere valori duplicati. Ecco un estratto della tabella in questione:

idmarcamodelloprezzo
1AppleiPad400
2AppleiPad Mini300
3AppleiPhone500
4SamsungGalaxy Tab400
5MicrosoftLumia200
6MicrosoftSurface400

Ora supponiamo di voler estrarre solo le marche disponibili nel nostro negozio. Per farlo dovremo eseguire una query SELECT come questa:

SELECT DISTINCT marca FROM prodotti ORDER BY marca ASC;

Effettuando questa operazione, otterremo il seguente resultset:

Apple
Microsoft
Samsung

Al contrario, omettendo la clausola DISTINCT, la query SELECT avrebbe restituito:

Apple
Apple
Apple
Microsoft
Microsoft
Samsung

Come si puรฒ notare, l’utilizzo di SELECT DISTINCT (invece di una semplice SELECT) consente di eliminare i duplicati, creando una lista di valori univoci.

Utilizzare indici per migliorare le performance di SELECT DISTINCT

Quando si lavora con una grande mole di dati l’utilizzo di SELECT DISTINCT puรฒ comportare una riduzione delle performance del database che, in alcune circostanze, potrebbe compromettere la fluiditร  dell’applicativo.

In un ambiente dinamico come un sito di e-commerce, ad esempio, la velocitร  e l’efficienza nelle query sono vitali per mantenere un’esperienza utente fluida e reattiva. In situazioni come questa, pertanto, potrebbe rivelarsi molto utile aggiungere degli indici appropriati nel database.

Per esempio, nell’ambito della nostra tabella “prodotti”, l’implementazione di un indice sul campo “marca” puรฒ accelerare significativamente le query che utilizzano la clausola SELECT DISTINCT, riducendo cosรฌ il tempo necessario per estrarre tutte le marche uniche disponibili nel nostro store.

Di seguito un esempio di query per aggiungere l’indice alla tabella “prodotti”:

CREATE INDEX indice_marca ON prodotti (marca);

L’aggiunte di un indice puรฒ migliorare notevolmente le prestazioni perchรฉ, invece di dover scandagliare l’intera tabella, il sistema puรฒ semplicemente consultare l’indice per ottenere rapidamente un elenco di valori distinti, rendendo le operazioni di filtraggiomolto piรน veloci e contribuendo a mantenere prestazioni ottimali anche con un grande volume di dati.

SELECT DISTINCT e la funzione COUNT

รˆ possibile combinare la funzione di aggregazione COUNT() con la clausola DISTINCT per contare i valori unici presenti in un determinato campo. Tornando al nostro esempio di e-commerce:

SELECT COUNT(DISTINCT marca) FROM prodotti;

Questa query restituirร  il valore 3, indicando cioรจ il numero di marche uniche disponibili nel database.

Oltre che con COUNT(), la sintassi SELECT DISTINCT puรฒ operare correttamente anche con le altre funzioni di aggregazione come SUM(), AVG(), MIN() e MAX().

SELECT DISTINCT su piรน colonne?

Nel nostro esempio abbiamo utilizzato il modificatore DISTINCT per individuare i valori unici in un singolo campo. Tuttavia, รจ possibile estendere questa sintassi per selezionare valori unici da piรน colonne. In questo caso รจ importante ricordare che la clausola agirร  sull’insieme delle colonne selezionate e non individualmente su ciascuna colonna!

รˆ bene precisare che in casi come questo l’utilizzo di SELECT DISTINCT potrebbe non essere la soluzione ottimale in quanto la sintassi offerta da GROUP BY consentirebbe una gestione piรน efficiente e flessibile delle query.

Ad esempio, la query:

SELECT DISTINCT nome, cognome FROM clienti;

potrebbe essere sostituita con:

SELECT nome, cognome FROM clienti GROUP BY nome, cognome;

L’adozione di GROUP BY non solo rende la query piรน performante ma fornisce anche un controllo e una flessibilitร  maggiori, facilitando l’aggregazione di dati e la manipolazione di gruppi di righe che condividono una certa proprietร .

Problematiche comuni nell’utilizzo di SELECT DISTINCT

Nell’utilizzare il comando SELECT DISTINCT, gli sviluppatori possono occasionalmente incappare in alcuni ostacoli o errori comuni. Essere consapevoli di queste potenziali insidie puรฒ aiutare a prevenire errori e ottimizzare l’efficienza delle query. Di seguito, esploriamo alcune delle trappole piรน comuni:

  1. Impatto negati vulle performance: l’uso indiscriminato di SELECT DISTINCT puรฒ, a volte, portare a un calo delle prestazioni, specialmente in tabelle con un grande numero di record. รˆ pertanto consigliabile usarlo con discernimento e valutare sempre se ci sono alternative piรน efficienti.
  2. Errore nella selezione delle colonne: quando si utilizza SELECT DISTINCT su piรน colonne, รจ importante ricordare che la clausola agirร  sull’insieme di colonne, e non individualmente su ciascuna colonna. Questo puรฒ a volte portare a risultati non attesi, soprattutto se non si รจ completamente consapevoli della distribuzione dei dati nelle colonne selezionate.
  3. Complicazioni con valori NULL: un’altra sfida comune รจ la gestione dei valori NULL. In SQL, due valori NULL non sono considerati identici, il che significa che SELECT DISTINCT mostrerร  tutte le righe con valori NULL come righe separate nel resultset.
  4. Risultati imprevisti in caso di integrazione con altre funzioni SQL: quando combinato con altre funzioni SQL, come aggregazioni o JOIN, SELECT DISTINCT puรฒ a volte comportare complicazioni o risultati non previsti. รˆ quindi importante testare attentamente le query per assicurarsi che funzionino come desiderato.

La consapevolezza di queste potenziali problematiche puรฒ aiutare gli sviluppatori ad approcciare l’uso di SELECT DISTINCT con una maggiore consapevolezza e precisione, garantendo query piรน efficienti e risultati piรน accurati.

Pubblicitร 
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).

Leggi anche...

Come ottenere l’ID dell’ultimo record inserito in MySQL, PostgreSQL, SQL Server e Oracle?

Ottenere l'ID dell'ultimo record inserito in una tabella, dopo...

Database completo regioni, province e comuni italiani (in formato SQL)

Quando si sviluppa un sito web o un'applicazione in...

File CSV: cosa sono, come si aprono e come crearli

In questo articolo cercheremo di capire cos'รจ il formato...

Confrontare due tabelle e trovare i record senza corrispondenza

all'interno di un database relazionale può essere utile poter...

Eseguire comandi SQL online con SQL Fiddle

Sì. E' possibile testare codice SQL senza aver installato...

SQL: Calcolare la media dei valori di più campi

Attraverso una semplice query SQL è possibile calcolare dinamicamente...
Pubblicitร