Database senza misteri

La tua prima query utile

21 min
What you'll learn
  • a scrivere query con un elenco esplicito di colonne dopo SELECT e un filtro delle righe tramite WHERE
  • a tradurre una domanda di business in SQL seguendo il percorso: entità → FROM, vincoli → WHERE (con AND), output → SELECT, ordine → ORDER BY
  • a spiegare perché SELECT * è una cattiva pratica nelle query di produzione
  • a verificare una query ripetendola ad alta voce: se la tua riformulazione coincide con la domanda di partenza, la query è corretta nel significato

La mappa è studiata, e QUERY cambia le regole. Finora hai osservato l'archivio nella sua interezza, come un turista; un archivista lavora in modo diverso. Sull'olopannello si spegne tutto tranne una tabella, e compare un compito: formula la domanda in modo che nella risposta non ci sia nemmeno una riga di troppo, né una colonna di troppo.

Scegliamo le colonne e le righe che servono

Prendere tutto con * è comodo per una prima esplorazione, ma nel lavoro reale è come portare alla cassa l'intero magazzino. Di solito ti servono campi precisi: elencali dopo SELECT, separati da virgole.

Con le righe vale lo stesso principio: invece dell'intera vetrina, scegli solo il segmento che ti serve tramite WHERE. Per esempio, chiediamo a Kotomarket soltanto i prodotti della categoria Libri:

Un cadetto restringe con un raggio-filtro ambrato una vetrina olografica: attraverso il raggio passano solo alcune righe-capsula di libri
Una domanda precisa all'archivio: SELECT nomina le colonne che servono, WHERE lascia passare solo le righe che servono.

Choosing the columns and rows you need

Grabbing everything with * is convenient for a first look, but in real work it’s like hauling the entire warehouse up to the checkout. Usually you need specific fields: list them, comma-separated, after SELECT.

It’s the same with rows: instead of the whole storefront, pick only the segment you need via WHERE. For example, let’s ask Kotomarket for only the products in the Books category:

Quali libri ci sono in vetrina e quanto costano:
Query result
nameprice
SQL для профи1290.00
Чистый код1490.00
Алгоритмы на практике1690.00

Dalla domanda di business alla query

Le domande vere non arrivano all'archivista in SQL: «quali libri costano meno di millecinquecento?», «che cosa, nell'elettronica, costa più di 5000?». La traduzione segue sempre lo stesso percorso:

  1. Entità → tabella. Di che cosa parla la domanda: di prodotti, clienti, ordini? «Libri sotto i 1500» riguarda i prodotti, quindi FROM products.
  2. Vincoli → WHERE. Ogni condizione della domanda diventa una condizione di filtro separata: categoria «Libri», prezzo inferiore a 1500.
  3. Cosa mostrare → SELECT. Che cosa vuole vedere la persona nella risposta? Il nome e il prezzo: sono questi i campi da elencare, il resto è rumore.
  4. Forma della risposta → ORDER BY. «Dai più economici ai più cari» è un ordinamento per prezzo.
-- «Quali libri costano meno di 1500 e quanto, dai più economici ai più cari?»
SELECT name, price
FROM products
WHERE category = 'Книги' AND price < 1500
ORDER BY price;

Più condizioni si uniscono con la parola AND: vedremo gli operatori di filtro in dettaglio nel prossimo capitolo.

Un bravo archivista prende anche un'altra abitudine: legge la query finita ad alta voce come una frase. «Dai prodotti prendi i libri sotto i 1500, mostra nome e prezzo, ordina per prezzo». Se la riformulazione coincide con la domanda di partenza, la query è corretta nel significato. Se nella riformulazione spuntano «tutte le colonne» o «l'intera vetrina», torna indietro e restringi.

Interview question

Domanda da colloquio: perché SELECT * è considerato una cattiva pratica nelle query di produzione?

Risposta efficace: primo, dati superflui: rete e memoria vengono consumate per colonne che non servono, e il database perde la possibilità di rispondere usando solo l'indice (index-only scan; gli indici sono il Capitolo 10). Secondo, fragilità: se si aggiungono o rinominano colonne, possono rompersi report e codice che dipendono dall'insieme o dall'ordine delle colonne. Un elenco esplicito di colonne è il contratto della query; SELECT * va bene al massimo nell'esplorazione interattiva dei dati.

Check yourself
Che cosa restituirà la query SELECT name FROM products WHERE category = 'Книги'?

The index has been read: you know what’s in the five tables and which threads stitch them together. QUERY dims the map, and the next clearance level lights up on the holopanel — the reading terminal.

QUERY: Remember the cardinal property of this place: the archive answers only well-formed questions. From the next clearance on, we learn to ask precisely.

Practice: solve the tasks
Solved 0 of 2