Menu

SELECT in SQLite: interrogare righe, colonne ed espressioni

Come funziona l'istruzione SELECT in SQLite: scegliere le colonne, calcolare espressioni, dare alias ai risultati e il modello mentale dietro ogni query che scriverai.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

SELECT legge righe da una tabella

Ogni domanda che fai a un database SQLite inizia con SELECT. Dice: dammi queste colonne, da questa tabella, per le righe che soddisfano queste condizioni. Oggi ci concentriamo sui primi due pezzi, colonne e tabella. Il filtraggio arriva nella prossima pagina.

La query più semplice possibile:

SELECT * significa "tutte le colonne". FROM products indica la tabella. Il risultato è una riga per record, con tutte e quattro le colonne. Il punto e virgola chiude l'istruzione.

Questa è tutta la forma: SELECT <columns> FROM <table>;.

Scegliere colonne specifiche

* è comodo quando esplori. Nel codice reale vuoi quasi sempre nominare le colonne che ti interessano davvero:

Ottieni due colonne, nell'ordine in cui le hai chieste. L'ordine nella lista della SELECT determina l'ordine nel risultato: non deve per forza coincidere con l'ordine delle colonne nella tabella.

Perché preferirlo a SELECT *? Per due motivi. Primo, passano meno dati sulla rete (o escono dal file), e questo conta quando le tabelle diventano larghe. Secondo, la tua query resta stabile quando il mese prossimo qualcuno aggiunge una colonna alla tabella. SELECT * inizia silenziosamente a restituire di più, e questo può rompere il codice dell'applicazione che legge le righe per posizione.

SELECT può calcolare, non solo recuperare

Le colonne nella lista di una SELECT non devono per forza essere nomi di colonna grezzi. Possono essere qualsiasi espressione: aritmetica, chiamate di funzione, concatenazione di stringhe, costanti. SQLite valuta l'espressione per ogni riga.

La quarta colonna non esiste nella tabella: SQLite l'ha calcolata riga per riga. Puoi fare lo stesso con funzioni sulle stringhe, date, espressioni condizionali, qualsiasi cosa. La lista di una SELECT è il posto dove dare forma ai dati, non solo dove recuperarli.

Puoi anche fare una SELECT senza clausola FROM, usando SQLite come calcolatrice:

Una riga, tre colonne. Utile per provare cosa fa un'espressione prima di inserirla in una query vera.

Dare alias alle colonne con AS

Quando calcoli una colonna, SQLite le sceglie un nome predefinito, spesso l'espressione stessa, come price * stock. È brutto e instabile. Dai alla colonna un nome vero con AS:

L'alias è il nome della colonna nel risultato. Conta per la leggibilità quando leggi l'output, e conta moltissimo per il codice dell'applicazione che recupera i valori per nome di colonna (row["inventory_value"] invece di row[1]).

La parola chiave AS è facoltativa, price * stock inventory_value funziona allo stesso modo, ma scrivila per esteso. L'intenzione è più chiara ed eviti di confondere chi legge, che potrebbe scambiare una virgola mancante per un alias.

Dare un alias anche alla tabella

Puoi anche dare un alias breve alla tabella stessa. Con una sola tabella non serve a molto, ma l'abitudine ripaga appena inizi a fare join:

Ora p sta al posto di products. La forma con il punto p.name dice esplicitamente da quale tabella arriva una colonna. Con una sola tabella è solo rumore; con tre tabelle unite in join è l'unica cosa che mantiene leggibile la query.

Letterali e costanti nel risultato

Puoi mescolare colonne reali e valori costanti. Utile quando vuoi etichettare le righe o riempire un segnaposto:

Ogni riga riceve lo stesso 'USD' e lo stesso 1. Questo schema compare quando combini i risultati di più query con UNION e ti serve una colonna marcatore per distinguere le fonti.

Due parole su NULL

Alcune colonne sono vuote: non è stato inserito nessun valore, oppure la colonna non ha un valore predefinito. SQLite rappresenta "nessun valore" come NULL, e nei risultati di una SELECT NULL appare come spazio vuoto o come la parola NULL, a seconda dello strumento che usi.

Guarda la seconda riga. price è NULL, e anche price * 2 è NULL: qualsiasi operazione aritmetica con NULL produce NULL. È una delle cause più comuni di risultati SQL che confondono, e avrà una pagina tutta sua più avanti. Per ora nota solo che NULL si propaga attraverso le espressioni.

Cosa ti porti a casa

  • SELECT <columns> FROM <table>; è la forma di ogni query.
  • Nel codice reale elenca le colonne in modo esplicito; tieni SELECT * per esplorare.
  • La lista della SELECT può contenere qualsiasi espressione, non solo nomi di colonna.
  • Usa AS per dare nomi adeguati alle colonne calcolate e alle tabelle con alias.
  • NULL si propaga nelle operazioni aritmetiche: tienilo a mente quando i risultati sembrano strani.

Prossimo passo: filtrare con WHERE

Finora ogni query restituisce tutte le righe della tabella. La clausola WHERE è il modo per restringere il campo: scegliere righe per prezzo, per nome, per data, per qualsiasi espressione che sia vera o falsa. È la prossima pagina.

Domande frequenti

Qual è la sintassi di base di SELECT in SQLite?

SELECT <columns> FROM <table>;. Le colonne possono essere un elenco separato da virgole (SELECT name, email FROM users), un * per tutte le colonne o qualsiasi espressione come price * quantity. La clausola FROM indica la tabella da cui leggere e il punto e virgola chiude l'istruzione.

Dovrei usare SELECT * in SQLite?

Va bene quando curiosi nella riga di comando per vedere cosa c'è in una tabella. Nel codice dell'applicazione, elenca le colonne che ti servono davvero. SELECT * lega il tuo codice allo schema attuale: aggiungi una colonna domani e ogni query restituisce silenziosamente più dati, il che può rompere il codice che legge le righe per posizione.

Come rinomino una colonna nei risultati di SELECT?

Usa AS per dare un alias a una colonna o a un'espressione: SELECT price * quantity AS total FROM orders. L'alias diventa il nome della colonna nel risultato, il che conta per la leggibilità e per il codice che legge i risultati per nome di colonna. La parola chiave AS è facoltativa, ma conviene tenerla per chiarezza.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA