Passer au contenu principal
eLearner.app
Module 4 · Leçon 1 sur 413/57 dans le cours~8 min
Leçons du module (1/4)

Liste e intervalli: IN e BETWEEN

Nei moduli precedenti hai filtrato con WHERE usando uguaglianze e confronti: salary > 30000, department_id = 1, hired_on >= '2020-01-01'. Quando però la condizione diventa "il valore deve essere uno fra questi cinque", le OR a catena si moltiplicano:

SQL
-- Pesante e fragile: aggiungere un dipartimento significa toccare la query
SELECT first_name, last_name
FROM   employees
WHERE  department_id = 1
   OR  department_id = 2
   OR  department_id = 3;

SQL offre due scorciatoie per renderlo leggibile.

IN — "uno fra questi"

L'operatore IN (...) prende una lista di valori e restituisce true se la colonna è uguale a uno qualunque di essi:

SQL
SELECT first_name, last_name, department_id
FROM   employees
WHERE  department_id IN (1, 2, 3);

È identico semanticamente alle OR qui sopra, ma molto più leggibile: si legge naturalmente come "dove department_id è in (1, 2, 3)". Funziona anche con stringhe e date:

SQL
SELECT name
FROM   departments
WHERE  city IN ('Milano', 'Roma');

Esiste anche NOT IN (...), che fa l'opposto:

SQL
-- Dipendenti che NON sono né in Ingegneria né in Vendite:
SELECT first_name, last_name
FROM   employees
WHERE  department_id NOT IN (1, 2);

BETWEEN — "fra A e B, estremi inclusi"

Quando la condizione è un intervallo continuo (numeri, date), invece di scrivere colonna >= A AND colonna <= B c'è BETWEEN A AND B:

SQL
-- Dipendenti con stipendio fra 30000 e 50000 (entrambi inclusi):
SELECT first_name, last_name, salary
FROM   employees
WHERE  salary BETWEEN 30000 AND 50000;

BETWEEN è inclusivo su entrambi gli estremi. Funziona benissimo anche con le date:

SQL
-- Tutti gli assunti nel 2020:
SELECT first_name, last_name, hired_on
FROM   employees
WHERE  hired_on BETWEEN '2020-01-01' AND '2020-12-31';

Prova tu

Exercice#sql.m4.l1.e1
Tentatives : 0Chargement…

Mostra nome (first_name), cognome (last_name) e stipendio (salary) dei dipendenti con stipendio compreso fra 30000 e 50000 inclusi. Tre colonne.

Chargement de l'éditeur…
Afficher l'indice

Usa BETWEEN 30000 AND 50000 — più compatto e leggibile di due confronti con AND.

Solution disponible après 3 tentatives

Esercizio di ripasso

Exercice#sql.m4.l1.e2
Tentatives : 0Chargement…

Elenca nome (first_name) e cognome (last_name) dei dipendenti che lavorano nei dipartimenti 1, 2 o 4 (usa IN). Ordina alfabeticamente per cognome.

Chargement de l'éditeur…
Afficher l'indice

WHERE department_id IN (1, 2, 4) è la versione compatta di tre OR.

Solution disponible après 3 tentatives