Allora, ormai sappiamo già come si usa il comando SELECT. Beh, almeno abbiamo imparato a tirare fuori i dati dal database, scegliere le colonne che ci servono e scrivere query che iniziano a trasformare dati grezzi in info utili. È arrivato il momento di aggiungere qualche "filtro" alla nostra palette magica. Sì, oggi parliamo di filtraggio dei dati usando operatori di confronto come =, >, < e <>.
Quando lavori con tabelle grandi, probabilmente non vuoi vedere proprio tutti i dati (a meno che tu non voglia tuffarti nel caos). Per selezionare solo le righe che ti servono, in SQL si usa la parola chiave WHERE. Ti permette di impostare condizioni che ogni riga deve rispettare per finire nei risultati della query. E per queste condizioni si usano proprio gli operatori di confronto.
Sintassi del filtraggio con WHERE
SELECT colonna1, colonna2
FROM tabella
WHERE condizione;
Struttura semplice: aggiungiamo la parola WHERE dopo aver indicato la tabella con FROM e scriviamo la condizione specifica che le righe devono rispettare.
Per esempio, vediamo come estrarre dati dalla tabella students:
SELECT name, age
FROM students
WHERE age > 18;
Questa query seleziona solo quegli studenti (nome e età) che hanno più di 18 anni. Facile, no? Ora tuffiamoci nel mondo degli operatori di confronto.
Operatori di confronto principali
In SQL ci sono diversi operatori di confronto che ti aiutano a filtrare i dati come vuoi tu. In pratica li conosci già dalla matematica, ma serve chiarire un attimo come funzionano qui. Ecco la lista di quelli più usati:
=— Uguale.<>— Diverso (alternativa:!=in alcuni DBMS, ma meglio usare<>perché è lo standard SQL).>— Maggiore.<— Minore.>=— Maggiore o uguale.<=— Minore o uguale.
Tabella degli operatori di confronto
| Operatore | Significato | Esempio | Risultato |
|---|---|---|---|
= |
Uguale | age = 20 |
Restituisce le righe dove l'età è 20 |
<> |
Diverso | age <> 20 |
Restituisce le righe dove l'età è diversa da 20 |
> |
Maggiore | age > 18 |
Restituisce le righe dove l'età è maggiore di 18 |
< |
Minore | age < 18 |
Restituisce le righe dove l'età è minore di 18 |
>= |
Maggiore o uguale | age >= 18 |
Restituisce le righe dove l'età è 18 o più |
<= |
Minore o uguale | age <= 18 |
Restituisce le righe dove l'età è 18 o meno |
Esempi di utilizzo degli operatori di confronto
Esempio 1: Estrazione degli studenti con più di 20 anni
Ecco la nostra tabella:
| id | name | age |
|---|---|---|
| 1 | Alex Lin | 22 |
| 2 | Anna Song | 19 |
| 3 | Otto Art | 21 |
SELECT name, age
FROM students
WHERE age > 20;
Qui impostiamo la condizione age > 20 per selezionare solo gli studenti che hanno più di 20 anni. Se nella tabella c'è uno studente di 19 anni, niente da fare, non lo vedrai nei risultati.
In questo caso otteniamo questo risultato:
| name | age |
|---|---|
| Alex Lin | 22 |
| Otto Art | 21 |
La studentessa Anna Song non è stata selezionata perché ha solo 19 anni.
Esempio 2: Estrazione dei dipendenti con stipendio almeno 50 000
Ecco la nostra tabella employees:
| first_name | last_name | salary |
|---|---|---|
| Julia | Kim | 48000 |
| Marcus | Lee | 52000 |
| Anya | Patel | 50000 |
| Ethan | Zhou | 61000 |
Ecco la nostra query SQL:
SELECT first_name, last_name, salary
FROM employees
WHERE salary >= 50000;
Questa query restituisce tutti i dipendenti che hanno uno stipendio uguale a 50 000 o maggiore di questa cifra. Anche l'uguaglianza va bene!
| first_name | last_name | salary |
|---|---|---|
| Marcus | Lee | 52000 |
| Anya | Patel | 50000 |
| Ethan | Zhou | 61000 |
Esempio 3: Estrazione dei prodotti con prezzo inferiore a 100
| product_name | price |
|---|---|
| USB Cable | 85 |
| Wireless Mouse | 150 |
| Notebook | 60 |
| Mechanical Pencil | 45 |
SELECT product_name, price
FROM products
WHERE price < 100;
Se hai un negozio online, con questa query puoi selezionare tutti i prodotti che costano meno di 100 (tipo per una promo "Tutto a 99!").
| product_name | price |
|---|---|
| USB Cable | 85 |
| Notebook | 60 |
| Mechanical Pencil | 45 |
Esempio 4: Escludere utenti con un certo id
SELECT id, username
FROM users
WHERE id <> 1;
Questa query seleziona tutti gli utenti tranne quello con id uguale a 1. L'operatore <> dice "dammi tutti quelli che non sono uguali a questo valore".
Tabella users:
| id | username |
|---|---|
| 1 | admin |
| 2 | elena.gray |
| 3 | tom.bishop |
| 4 | aria.noble |
Risultato della query:
| id | username |
|---|---|
| 2 | elena.gray |
| 3 | tom.bishop |
| 4 | aria.noble |
Errori tipici nel filtraggio con operatori di confronto
Quando inizi a scrivere query con filtri, gli errori sono all'ordine del giorno. Ecco un paio di casi comuni da ricordare:
Problema 1: Errore nel nome delle colonne
Se scrivi male il nome di una colonna nella query, PostgreSQL ti darà errore. Per esempio:
SELECT name, age
FROM students
WHERE ages > 18; -- Errore: la colonna "ages" non esiste
Controlla sempre i nomi esatti delle colonne prima di scrivere la query.
Problema 2: Uso sbagliato dell'operatore di confronto
A volte chi inizia può confondere gli operatori. Per esempio:
SELECT name, age
FROM students
WHERE age => 18; -- Errore: operatore non valido
La sintassi giusta è >=, non =>.
Problema 3: Filtrare per valori che non esistono
Se provi a filtrare le righe per un valore che non c'è nella tabella, la query va ma restituisce risultato vuoto. Per esempio:
SELECT name
FROM students
WHERE age = 999; -- Risultato: 0 righe
Non è un errore di sintassi, ma può confondere se ti aspetti di vedere dei dati.
Applicazione pratica
Il filtraggio dei dati con operatori di confronto si usa in un sacco di situazioni:
- Analisi dati: tipo per selezionare tutti i clienti che hanno speso più di 10 000 rupie.
- Report: selezionare i dipendenti con stipendio sopra la media.
- Monitoraggio: tracciare gli utenti che non sono stati attivi nell'ultimo mese.
SQL ti permette di estrarre velocemente i dati che ti servono da tabelle enormi, e gli operatori di confronto sono il primo passo su questa strada.
GO TO FULL VERSION