0Pricing
SQL Academy · Lezione

BETWEEN per gli intervalli

Usi BETWEEN per intervalli numerici e di date inclusivi e sappia quando preferire confronti espliciti >= e < per intervalli semiaperti

BETWEEN per gli intervalli è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.

BETWEEN è inclusivo

BETWEEN a AND b corrisponde ai valori per i quali x >= a AND x <= b. Entrambi gli estremi sono inclusi.

SELECT * FROM orders WHERE total BETWEEN 100 AND 500;
-- equivalent to:
SELECT * FROM orders WHERE total >= 100 AND total <= 500;

Intervalli di date

BETWEEN funziona anche con date e timestamp:

SELECT * FROM orders
WHERE created_at BETWEEN '2024-01-01' AND '2024-12-31';

La trappola degli estremi inclusivi

Quando si utilizza una colonna TIMESTAMP, BETWEEN '2024-12-31' termina a mezzanotte del 31, non alla fine della giornata. Gli ordini effettuati alle 14:00 del 31 dicembre vengono esclusi.

-- WRONG — misses orders later on Dec 31:
WHERE created_at BETWEEN '2024-12-01' AND '2024-12-31';

-- RIGHT — half-open interval:
WHERE created_at >= '2024-12-01'
  AND created_at <  '2025-01-01';

Preferisca intervalli semiaperti per il tempo

Il pattern semiaperto >= start AND < next_period non è ambiguo, funziona con qualsiasi granularità e si concatena naturalmente per periodi consecutivi.

WHERE created_at >= date_trunc('month', NOW())
  AND created_at <  date_trunc('month', NOW()) + INTERVAL '1 month';

NOT BETWEEN

È l'inverso di BETWEEN ed esclude l'intervallo:

SELECT * FROM products WHERE price NOT BETWEEN 10 AND 20;
-- equivalent to: price < 10 OR price > 20

Query per intervallo e indici

Un indice B-tree è utile per le query per intervallo. Negli indici compositi, per ottenere la selettività migliore, inserisca per ultima la colonna dell'intervallo:

CREATE INDEX orders_user_total_idx ON orders (user_id, total);

-- Efficient: equality on user_id, range on total
SELECT * FROM orders
WHERE user_id = 42 AND total BETWEEN 100 AND 500;

Stringhe e BETWEEN

BETWEEN confronta le stringhe in ordine lessicografico. Presti attenzione alla distinzione tra maiuscole e minuscole:

SELECT * FROM users WHERE last_name BETWEEN 'A' AND 'C';
-- Includes 'Adams' and 'Bond', excludes 'C' itself only if 'C' < 'Ca...'

Tipi intervallo (PostgreSQL)

PostgreSQL dispone di tipi intervallo dedicati agli intervalli semiaperti:

SELECT int4range(10, 20) @> 15;       -- true  (15 in [10,20))
SELECT tsrange('2024-01-01', '2025-01-01') @> NOW()::TIMESTAMP;

Convalidare gli intervalli con CHECK

Si assicuri che start <= end al momento dell'inserimento:

CREATE TABLE bookings (
  id BIGSERIAL PRIMARY KEY,
  start_at TIMESTAMPTZ NOT NULL,
  end_at   TIMESTAMPTZ NOT NULL,
  CHECK (start_at < end_at)
);

Raggruppamento numerico

Combini BETWEEN con CASE per creare intervalli:

SELECT id, total,
  CASE
    WHEN total BETWEEN 0 AND 99    THEN 'small'
    WHEN total BETWEEN 100 AND 999 THEN 'medium'
    ELSE 'large'
  END AS bucket
FROM orders;

BETWEEN SYMMETRIC

Estensione dello standard SQL che non richiede di sapere quale lato sia il più piccolo:

SELECT 5 BETWEEN SYMMETRIC 10 AND 1;   -- TRUE

Riepilogo

BETWEEN è una comoda scorciatoia per gli intervalli inclusivi.

  • Presti attenzione agli estremi dei timestamp: preferisca l'intervallo semiaperto >= start AND < end
  • Gli indici compositi accelerano le query per intervallo
  • I vincoli CHECK impongono intervalli validi

Verifica rapida

Entrambi gli estremi di BETWEEN a AND b sono inclusi nello standard SQL?

Domande Frequenti

La lezione «BETWEEN per gli intervalli» è gratuita?

Sì — il testo completo di «BETWEEN per gli intervalli» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.

Cosa imparerò in «BETWEEN per gli intervalli»?

Usi BETWEEN per intervalli numerici e di date inclusivi e sappia quando preferire confronti espliciti >= e < per intervalli semiaperti Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare SQL Academy?

Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «BETWEEN per gli intervalli»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione SQL Academy?

Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Pattern LIKE e caratteri jolly
  2. IN e NOT IN per gli insiemi
  3. BETWEEN per gli intervalli
  4. IS NULL, IS NOT NULL e COALESCE
← Torna a SQL Academy