Gli operatori logici sono strumenti che ti aiutano a unire condizioni nelle query per filtrare i dati in modo più avanzato. Probabilmente li hai già visti in altri linguaggi di programmazione. Se paragoniamo le query a un programma antispam nella casella email, gli operatori logici sono come le regole che decidono se un messaggio va nella cartella "Spam" o resta in "Posta in arrivo".
SQL è uno strumento che si usa spesso per selezionare o analizzare dati. Gli operatori logici (AND, OR, NOT) ti permettono di combinare più condizioni in una sola query, così puoi rispondere a domande più complesse, tipo:
- Quali studenti hanno più di 18 anni e hanno il voto "A"?
- Quali prodotti sono nella categoria "Elettronica" oppure "Elettrodomestici"?
- Quali clienti non hanno fatto acquisti?
Dai, vediamo insieme i tre operatori logici principali in SQL:
AND: entrambe le condizioni devono essere vere.OR: basta che almeno una delle condizioni sia vera.NOT: inverte (nega) la condizione.
Operatore AND: entrambe le condizioni sono vere
L'operatore AND ti permette di specificare che entrambe le parti della condizione devono essere soddisfatte perché la riga venga inclusa nel risultato.
Sintassi
SELECT colonna1, colonna2
FROM tabella
WHERE condizione AND condizione2;
Esempio 1: Filtrare studenti con più di 18 anni e voto "A"
Supponiamo di avere una tabella students:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 20 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 17 | A |
| 4 | Anna | 22 | A |
Query:
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A';
Risultato:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
Esempio 2: Filtrare dipendenti dal dipartimento "HR" e con stipendio sopra 50000
SELECT name, department, salary
FROM employees
WHERE department = 'HR' AND salary > 50000;
Operatore OR: almeno una condizione è vera
L'operatore OR si usa quando vuoi selezionare le righe che soddisfano almeno una delle condizioni.
Sintassi
SELECT colonna1, colonna2
FROM tabella
WHERE condizione OR condizione2;
Esempio 1: Filtrare studenti con voto "A" oppure "B"
SELECT name, age, grade
FROM students
WHERE grade = 'A' OR grade = 'B';
Risultato:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Maria | 19 | B |
| Otto | 17 | A |
| Anna | 22 | A |
Esempio 2: Prodotti della categoria "Elettronica" oppure con prezzo minore di 100
Tabella products:
| product_id | name | category | price |
|---|---|---|---|
| 1 | Televisore | Elettronica | 300 |
| 2 | Ferro da stiro | Elettrodomestici | 50 |
| 3 | Smartphone | Elettronica | 700 |
| 4 | Bollitore | Elettrodomestici | 80 |
SELECT name, category, price
FROM products
WHERE category = 'Elettronica' OR price < 100;
Risultato:
| name | category | price |
|---|---|---|
| Televisore | Elettronica | 300 |
| Ferro da stiro | Elettrodomestici | 50 |
| Bollitore | Elettrodomestici | 80 |
| Smartphone | Elettronica | 700 |
Operatore NOT: inversione della condizione
Se AND e OR impostano condizioni che devono essere vere, NOT fa il contrario: seleziona le righe per cui la condizione specificata è falsa.
Sintassi
SELECT colonna1, colonna2
FROM tabella
WHERE NOT condizione;
Esempio 1: Filtrare studenti che non hanno il voto "A"
SELECT name, age, grade
FROM students
WHERE NOT grade = 'A';
Risultato:
| name | age | grade |
|---|---|---|
| Maria | 19 | B |
Esempio 2: Estrarre prodotti che non sono nella categoria "Elettronica"
SELECT name, category, price
FROM products
WHERE NOT category = 'Elettronica';
Combinare operatori logici
Puoi combinare gli operatori logici per creare condizioni ancora più complesse. Ad esempio, se vuoi selezionare studenti con più di 18 anni e voto "A" oppure "B", puoi combinare AND e OR.
Sintassi con combinazione
SELECT colonna1, colonna2
FROM tabella
WHERE (condizione1 AND condizione2) OR condizione3;
Esempio: Studenti con più di 18 anni e voto "A" oppure studenti con voto "B"
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR grade = 'B';
Risultato:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
| Maria | 19 | B |
Priorità di esecuzione degli operatori
Occhio! SQL esegue gli operatori logici in questo ordine:
NOTANDOR
Puoi usare le parentesi per cambiare l'ordine di esecuzione. Senza parentesi il risultato può essere diverso da quello che ti aspetti!
Esempio: Confronto con e senza parentesi
Cosa succede in questa query?
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A' OR grade = 'B';
Questa query seleziona gli studenti:
- Che hanno più di 18 anni e il voto "A".
- Che hanno il voto "B".
La priorità degli operatori porta allo stesso risultato delle parentesi:
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR (grade = 'B');
Ma se aggiungiamo le parentesi così:
SELECT name, age, grade
FROM students
WHERE age > 18 AND (grade = 'A' OR grade = 'B');
Ora verranno selezionati solo gli studenti con più di 18 anni e voto "A" oppure "B". Le parentesi fanno davvero la differenza!
Errori tipici con gli operatori logici
- Dimenticare le parentesi. Questo può portare a risultati inaspettati, soprattutto quando combini
ANDeOR. - Usare
NOTsenza capire bene quali righe vengono escluse. - Usare male gli operatori logici. Tipo mettere
ANDinvece diORo viceversa. - Condizioni troppo complesse. Condizioni molto lunghe con tanti
AND,OR,NOTsenza commenti possono diventare difficili da leggere.
Questi operatori sono la base di tutte le query complesse. Ora sei pronto a scrivere query che non solo funzionano, ma trovano proprio quello che ti serve!
GO TO FULL VERSION