CodeGym /Corsi /SQL SELF /Costruire query semplici con SELECT, WHERE e ORDER BY

Costruire query semplici con SELECT, WHERE e ORDER BY

SQL SELF
Livello 3 , Lezione 2
Disponibile

Ora è il momento di mettere tutto insieme e imparare a scrivere query semplici ma utili usando una combinazione di SELECT, WHERE e ORDER BY. Questa skill ti servirà per un sacco di cose, tipo ottenere liste di utenti o creare piccoli report.

Prima di partire, ricordiamoci com’è fatta la struttura di una query SQL semplice:

SELECT colonna1, colonna2, colonna3
FROM tabella
WHERE condizione
ORDER BY colonna ASC
LIMIT numero_righe
OFFSET numero_righe;

Se SQL fosse un romanzo, SELECT sarebbe il titolo del capitolo, FROM il suo contenuto, e WHERE la spiegazione della trama. E ORDER BY mette tutto in ordine, così leggere è più figo!

L’ordine degli operatori è fisso. Puoi saltarne qualcuno (non scriverlo), ma non puoi cambiare l’ordine.

Esempio 1: Selezionare i nomi degli studenti con voti eccellenti

Immagina di avere una tabella students con questa struttura e questi dati:

id name age grade
1 Otto 21 A
2 Maria 22 B
3 Alex 20 A
4 Nat 23 C
5 Dan 25 B

Devi ottenere la lista di tutti gli studenti con voto eccellente (cioè grade = 'A'), ordinata per nome. Ecco come si fa:

SELECT name
FROM students
WHERE grade = 'A'
ORDER BY name ASC;

Risultato:

name
Alex
Otto

Spiegazione:

  1. SELECT name — scegliamo solo il nome. Non ha senso tirare fuori dati che non ci servono.
  2. WHERE grade = 'A' — filtriamo solo quelli con voto eccellente.
  3. ORDER BY name ASC — ordiniamo i nomi degli studenti in ordine alfabetico.

Esempio 2: Cercare prodotti per prezzo

Ora immaginiamo di avere una tabella products con info sui prodotti:

id product_name category price
1 Smartfon Electronics 30000
2 Televizor Electronics 45000
3 Kholodilnik Appliances 50000
4 Pylesos Appliances 15000
5 Lampochka Lighting 500

Il nostro obiettivo è ottenere la lista dei prodotti della categoria "Electronics", ordinati per prezzo decrescente. La query sarà così:

SELECT product_name, price
FROM products
WHERE category = 'Electronics'
ORDER BY price DESC;

Risultato:

product_name price
Televizor 45000
Smartfon 30000

Spiegazione:

  1. SELECT product_name, price — scegliamo il nome del prodotto e il suo prezzo.
  2. WHERE category = 'Electronics' — filtriamo solo i prodotti della categoria "Electronics".
  3. ORDER BY price DESC — ordiniamo i risultati per prezzo decrescente (il più caro per primo).

Esempio 3: Filtri complessi con logica

Usiamo di nuovo la tabella students. Supponiamo di dover trovare tutti gli studenti con più di 21 anni che hanno voto B o C, ordinati per età. Qui combiniamo più condizioni:

SELECT name, age, grade
FROM students
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
ORDER BY age ASC;

Risultato:

name age grade
Maria 22 B
Nat 23 C
Dan 25 B

Spiegazione:

  1. WHERE age > 21 — scegliamo solo gli studenti con più di 21 anni.
  2. AND (grade = 'B' OR grade = 'C') — filtriamo quelli con voto B o C. Le parentesi tonde servono per raggruppare le condizioni.
  3. ORDER BY age ASC — ordiniamo il risultato per età, dal più giovane.

Esempio 4: Combinare ordinamento e filtraggio

Torniamo alla tabella products. Vogliamo trovare i prodotti che costano meno di 50.000, ordinarli per categoria e, dentro ogni categoria, per prezzo (dal più basso al più alto).

SELECT product_name, category, price
FROM products
WHERE price < 50000
ORDER BY category ASC, price ASC;

Risultato:

product_name category price
Pylesos Appliances 15000
Smartfon Electronics 30000
Televizor Electronics 45000
Lampochka Lighting 500

Spiegazione:

  1. WHERE price < 50000 — prima filtriamo i prodotti, lasciando solo quelli che costano meno di 50.000.
  2. ORDER BY category ASC, price ASC — ordiniamo per categoria (in ordine alfabetico), e dentro ogni categoria per prezzo crescente.

Esempio 5: Errore comune — dimenticare le condizioni

Vediamo ora cosa può andare storto. E se ci dimentichiamo di raggruppare le condizioni, tipo con gli operatori logici?

Query sbagliata:

SELECT name, age, grade
FROM students
WHERE age > 21 AND grade = 'B' OR grade = 'C'
ORDER BY age ASC;

Qui OR grade = 'C' verrà eseguito senza tener conto di AND age > 21, e la query darà un risultato sbagliato. Otterrai tutti quelli che hanno voto C, anche se hanno meno di 21 anni.

Quindi usa sempre le parentesi per chiarezza:

WHERE age > 21 AND (grade = 'B' OR grade = 'C')
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION