Nozioni di base su SELECT DISTINCT
Restituisca solo le righe univoche
Nozioni di base su SELECT DISTINCT è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
Perché si verificano i duplicati
Le tabelle contengono spesso valori ripetuti. Una tabella customers potrebbe riportare la stessa city in migliaia di righe. Quando interessano solo l’insieme dei valori distinti, un semplice SELECT restituisce tutte le righe, comprese le ripetizioni.
SELECT DISTINCT raggruppa le righe identiche in una sola. In questa lezione imparerà le basi della restituzione dei soli risultati univoci.
SELECT city FROM customers;
-- Returns one row per customer, with many repeated citiesLa parola chiave DISTINCT
DISTINCT viene inserito subito dopo SELECT. Rimuove le righe duplicate dal set di risultati, mantenendo una sola copia di ogni combinazione univoca delle colonne selezionate.
SELECT DISTINCT city
FROM customers;
-- One row per unique cityDISTINCT si applica all’intera riga
Un’idea errata comune è che DISTINCT si applichi a una singola colonna. In realtà si applica all’intera riga selezionata. Ogni colonna inserita nella query contribuisce a stabilire se due righe sono duplicate.
Di seguito, le righe vengono deduplicate in base al solo valore di city, perché questa è l’unica colonna selezionata.
SELECT DISTINCT country
FROM customers;
-- Unique countries across all customersDati di esempio
Immagini una piccola tabella orders. Noti i valori ripetuti di status e country. Utilizzeremo questa struttura per tutta la lezione.
id=1, status='paid', country='US'id=2, status='paid', country='US'id=3, status='shipped', country='DE'id=4, status='paid', country='DE'
CREATE TABLE orders (
id int PRIMARY KEY,
status text,
country text,
amount numeric(10,2)
);DISTINCT su una singola colonna
Selezionando DISTINCT status dai dati di esempio si ottengono i valori univoci di status: paid e shipped. Le quattro righe si riducono a due.
SELECT DISTINCT status
FROM orders;
-- paid
-- shippedNULL viene trattato come un unico valore
Anche se normalmente NULL non è uguale a nulla, nemmeno a sé stesso, DISTINCT tratta tutti i valori NULL come un unico gruppo. Se una colonna contiene molte righe con valore NULL, nel risultato distinto si ottiene esattamente un NULL.
SELECT DISTINCT shipped_at
FROM orders;
-- All NULL shipped_at rows collapse into a single NULL rowDISTINCT con ORDER BY
Di solito si desidera ordinare i valori univoci. DISTINCT viene eseguito per primo per creare l’insieme univoco, quindi ORDER BY lo ordina. Quando si utilizza DISTINCT, qualsiasi colonna presente in ORDER BY deve comparire anche nell’elenco SELECT.
SELECT DISTINCT country
FROM orders
ORDER BY country;
-- DE
-- USDISTINCT e GROUP BY a confronto
SELECT DISTINCT col e SELECT col GROUP BY col producono le stesse righe univoche. Utilizzi DISTINCT quando desidera semplicemente valori univoci; scelga GROUP BY quando Le servono anche aggregazioni come COUNT per ogni gruppo.
-- These two return the same set of countries:
SELECT DISTINCT country FROM orders;
SELECT country FROM orders
GROUP BY country;DISTINCT ha un costo
La rimozione dei duplicati non è gratuita. Il database deve ordinare o sottoporre a hashing tutte le righe candidate per trovare quelle univoche. Nelle tabelle di grandi dimensioni questo richiede ulteriore lavoro a livello di CPU e memoria, quindi chieda DISTINCT solo quando ha davvero bisogno dell’unicità.
-- Avoid blind DISTINCT on every query.
-- If the column is already unique (e.g. a PRIMARY KEY),
-- DISTINCT does nothing useful but still costs work:
SELECT DISTINCT id FROM orders; -- id is already uniqueDISTINCT nelle espressioni
È possibile applicare DISTINCT a un’espressione calcolata, non solo a una colonna semplice. Il database valuta l’espressione per ogni riga e poi deduplica i risultati.
SELECT DISTINCT upper(country) AS country_code
FROM orders
ORDER BY country_code;
-- DE
-- USCreazione di un elenco di valori
Un uso pratico di DISTINCT consiste nel popolare un menu a discesa o un elenco di filtri in un’applicazione: recuperare gli status univoci consente di mostrare all’utente tutte le opzioni possibili attualmente presenti nei dati.
SELECT DISTINCT status
FROM orders
ORDER BY status;
-- paid
-- shippedControllo rapido
Dove deve essere inserita la parola chiave DISTINCT e che cosa deduplica?
Riepilogo
Ha imparato le nozioni di base di SELECT DISTINCT:
- Rimuove le righe duplicate dal set di risultati.
- Si applica all’intera riga selezionata, non a una sola colonna.
- Tutti i valori
NULLvengono raggruppati in un unico valore. ORDER BYviene eseguito dopo la deduplicazione; le relative colonne devono essere selezionate.- Richiede lavoro aggiuntivo, quindi va utilizzato solo quando necessario.
Prossimo argomento: estendere DISTINCT a più colonne.
SELECT DISTINCT status
FROM orders
ORDER BY status;Domande Frequenti
La lezione «Nozioni di base su SELECT DISTINCT» è gratuita?
Sì — il testo completo di «Nozioni di base su SELECT DISTINCT» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «Nozioni di base su SELECT DISTINCT»?
Restituisca solo le righe univoche Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Nozioni di base su SELECT DISTINCT»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Academy?
Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Nozioni di base su SELECT DISTINCT
- DISTINCT su più colonne
- DISTINCT ON di PostgreSQL
- Contare i valori univoci