9th Dec 2022 Tempo di lettura: 7 minuti Qual è il ruolo di DISTINCT in SQL? sql imparare sql distinct Indice SQL DISTINCT su una singola colonna SQL DISTINCT rimuove i valori duplicati Attenzione alle colonne utilizzate L'inclusione dei valori NULL SQL DISTINCT con una sottoquery SQL DISTINCT con più colonne SQL DISTINCT con le funzioni aggregate DISTINCT con funzioni aggregate e GROUP BY L'apprendimento di DISTINCT in SQL è solo l'inizio! La parola chiave DISTINCT in SQL svolge un ruolo importante nella rimozione dei valori duplicati dai risultati. Questo articolo fornisce esempi che mostrano esattamente il funzionamento di DISTINCT. Per impostazione predefinita, le query SQL mostrano tutte le righe restituite, comprese quelle duplicate, nel set di risultati. La parola chiave DISTINCT nella clausola SELECT viene utilizzata per eliminare le righe duplicate e visualizzare un elenco unico di valori. In altre parole, la parola chiave DISTINCT recupera valori unici da una tabella. La sintassi di base della parola chiave DISTINCT in SQL è la seguente: SELECT DISTINCT column_1, column_2, …, column_n FROM table_name (Se la sintassi di cui sopra vi confonde, prendete in considerazione il corso LearnSQL.it' SQL Basics . Copre i fondamenti di SQL, compresa la parola chiave DISTINCT ). Si noti che la parola chiave DISTINCT deve essere anteposta alle colonne specificate. È possibile specificare più di una colonna da DISTINCT, in modo che SQL restituisca solo combinazioni uniche dei valori di tali colonne. Se si seleziona più di una colonna, tutte le colonne vengono combinate e viene considerata solo l'unicità della riga. SQL DISTINCT cerca una riga distinta, piuttosto che una colonna distinta. Vediamo la parola chiave DISTINCT in azione con un esempio pratico. Prima, però, dobbiamo familiarizzare con i dati con cui lavoreremo. Immaginiamo di avere una tabella chiamata employee_infoche contiene i dati dei dipendenti della nostra azienda: employee_idfirst_namelast_namedepartmentage 127374JoshuaReesSales26 293421KarenBowerSales45 244813LukePayneNULL42 463281MaxPaigeHuman Resources53 374241JuliaGloverHuman Resources29 568421RoseHarrisHuman Resources43 NULLNULLNULLNULLNULL 839211OliviaBakerSales32 293493KarenBowerSales45 463281MaxPaigeHuman Resources53 244813LukePayneNULL42 933821BernadetteParsonsSalesNULL SQL DISTINCT su una singola colonna Vediamo l'effetto della parola chiave DISTINCT quando cerchiamo di SELECT la colonna employee_id. Per prima cosa, ecco la query prima dell'applicazione della parola chiave DISTINCT: SELECT employee_id FROM employee_info Il risultato è il seguente: employee_id 127374 293421 244813 463281 374241 568421 NULL 839211 293493 463281 244813 933821 L'esecuzione di questa query restituisce l'intera colonna employee_id della nostra tabella. Questa colonna corrisponde alla tabella employee_info corrisponde esattamente alla tabella. Ad un'analisi più attenta, si notano alcuni valori duplicati: 244813 e 463281 compaiono due volte. Aggiungiamo la parola chiave DISTINCT per risolvere questi valori duplicati. Ricordare che la parola chiave DISTINCT viene aggiunta prima di specificare le colonne: SELECT DISTINCT employee_id FROM employee_info employee_id 127374 293421 244813 463281 374241 568421 NULL 839211 293493 933821 L'insieme di dati risultante appare più corto; da questa risposta si possono trarre diversi insegnamenti. SQL DISTINCT rimuove i valori duplicati Se confrontiamo la tabella originale con il nostro risultato, possiamo vedere che i duplicati sono stati filtrati con successo. L'uso della parola chiave DISTINCT è solo uno dei metodi per rimuovere i valori duplicati, come mostrato in questo articolo sui diversi modi per rimuovere i duplicati in SQL. La tabella employee_info tabella contiene due occorrenze dei seguenti valori: employee_id 244813 463281 Tuttavia, il nostro risultato ora mostra questi valori solo una volta. La parola chiave DISTINCT ha sortito l'effetto desiderato. Attenzione alle colonne utilizzate Quando si visualizza per la prima volta la employee_info sembra che queste righe siano duplicate. employee_idfirst_namelast_namedepartmentage 293421KarenBowerSales45 293493KarenBowerSales45 A un'analisi più attenta, si può notare che il valore di employee_id è diverso. Poiché abbiamo applicato la parola chiave DISTINCT a questa colonna employee_id, entrambi i valori vengono restituiti. L'inclusione dei valori NULL Probabilmente avrete notato la presenza di valori NULL nel set di dati restituito. In SQL, NULL è considerato un valore univoco, il che significa che verrà restituito quando si utilizza la parola chiave DISTINCT. Se si desidera rimuovere i valori NULL dal risultato, si può scrivere la seguente query: SELECT DISTINCT * FROM employee_info WHERE employee_id IS NOT NULL SQL DISTINCT con una sottoquery È possibile utilizzare la parola chiave DISTINCT anche come parte di una sottoquery. Tuttavia, è bene ricordare che una sottoquery IN, ANY o EXISTS ha valore vero se esiste almeno una riga che fa sì che la sottoquery abbia valore vero. Questo rende inutile l'uso di una DISTINCT con una subquery IN, ANY o EXISTS. SQL DISTINCT con più colonne Le colonne specificate come DISTINCT giocano un ruolo fondamentale nella restituzione dei dati. Osservate la seguente query: SELECT DISTINCT employee_id, first_name, last_name FROM employee_info Stiamo cercando combinazioni uniche di queste tre colonne. L'esecuzione della query produce il seguente risultato: employee_idfirst_namelast_name 127374JoshuaRees 293421KarenBower 244813LukePayne 463281MaxPaige 374241JuliaGlover 568421RoseHarris NULLNULLNULL 839211OliviaBaker 293493KarenBower 933821BernadetteParsons Quando si esamina questo insieme di risultati, ci si aspetta di vedere nomi completamente unici insieme a employee_id. Ad esempio, osservate questi dati: employee_idfirst_namelast_name 293421KarenBower 293493KarenBower Il valore employee_id è unico per entrambe le righe, quindi anche queste righe sono considerate uniche. Se si modifica la query nel modo seguente: SELECT DISTINCT first_name, last_name FROM employee_info ... employee_id non viene più considerato; ora stiamo cercando combinazioni uniche di nomi. Pertanto, viene visualizzata una sola riga per "Karen Bower": first_namelast_name JoshuaRees KarenBower LukePayne MaxPaige JuliaGlover RoseHarris NULLNULL OliviaBaker BernadetteParsons Se non riuscite a ottenere i risultati desiderati utilizzando la parola chiave DISTINCT, prestate particolare attenzione alle colonne che avete incluso. Se questo esempio specifico vi crea ancora confusione, date un'occhiata a questo articolo su come contare i valori distinti in SQL. SQL DISTINCT con le funzioni aggregate La parola chiave DISTINCT può essere utilizzata insieme alle funzioni aggregate. Le funzioni aggregate più comuni sono: MIN() - Restituisce il valore più piccolo (minimo). MAX() - Restituisce il valore più grande (massimo). SUM() - Restituisce la somma dei valori specificati. AVG() - Restituisce la media dei valori specificati (ad esempio, in una colonna). COUNT() - Restituisce il numero di elementi (ad esempio in una colonna). Quando DISTINCT viene utilizzato con SUM(), AVG() e COUNT(), elimina i valori duplicati prima di calcolare la somma, la media o il conteggio. È possibile utilizzare la parola chiave DISTINCT con MIN() e MAX(), ma è inutile farlo; non avrà alcun impatto sui risultati. Applichiamo queste informazioni all'esempio precedente relativo alla tabella employee_info tabella. Se volessimo contare il numero di dipendenti attualmente in servizio presso la nostra azienda, avendo cura di eliminare le voci duplicate, scriveremmo la seguente query: SELECT COUNT(DISTINCT employee_id) FROM employee_info Il risultato di questa query è: COUNT(DISTINCT employee_id) 9 Questo è l'esempio più semplice di come la parola chiave DISTINCT possa essere usata insieme alle funzioni aggregate. L'esecuzione di questa query senza la parola chiave DISTINCT includerebbe i valori duplicati nel conteggio: SELECT COUNT(employee_id) FROM employee_info Il risultato di questa query è: COUNT(employee_id) 11 Se si pensa che la propria tabella possa contenere record duplicati, l'uso di DISTINCT è un modo eccellente per garantire che la reportistica sia accurata e non sia influenzata da valori duplicati. Se questo caso d'uso non vi è chiaro, vi consiglio di leggere questo articolo sul conteggio dei valori distinti in SQL. Esistono molti altri casi d'uso di COUNT(); per ulteriori esempi utili, consultate questo articolo che spiega le differenze tra le applicazioni più comuni della funzione COUNT(). DISTINCT con funzioni aggregate e GROUP BY Utilizziamo una funzione aggregata con la parola chiave DISTINCT per risolvere un problema comune. Vogliamo trovare il numero di potenziali voci duplicate di employee_id per ogni coppia di nomi nella nostra tabella. Vogliamo isolare il caso in cui il nome del dipendente è esattamente lo stesso, ma con un employee_id diverso. Ecco la query: SELECT first_name, last_name, COUNT(DISTINCT employee_id) FROM employee_info GROUP BY first_name, last_name E il risultato: employee_idfirst_nameCOUNT (DISTINCT employee_id) NULLNULL0 BernadetteParsons1 JoshuaRees1 JuliaGlover1 KarenBower2 LukePayne1 MaxPaige1 OliviaBaker1 RoseHarris1 Possiamo vedere da questi risultati che abbiamo due voci diverse per employee_id di Karen Bower. Questa è un'ottima informazione da avere. Se non ci sono due persone diverse di nome Karen Bower che lavorano nella nostra azienda, sappiamo che questa informazione è stata inserita per errore e può essere considerata un duplicato da rimuovere. L'apprendimento di DISTINCT in SQL è solo l'inizio! La capacità di isolare ed escludere i dati duplicati dai risultati delle query è un'abilità importante per tutti gli utenti di SQL. La parola chiave DISTINCT svolge un ruolo importante nella capacità di farlo in modo efficace. Se vi è piaciuto questo articolo e volete continuare a imparare l'SQL, prendete in considerazione il nostro percorso di apprendimento SQL Fundamentals . Vi insegnerà le istruzioni SQL di base come WHERE, GROUP BY, ORDER BY e HAVING. Imparerete anche come JOIN tabelle e come aggiungere, modificare o rimuovere dati da un database. Tags: sql imparare sql distinct