0Pricing
SQL Academy · Lekcja

BETWEEN dla zakresów

Używaj BETWEEN dla domkniętych zakresów liczbowych i dat, a także dowiedz się, kiedy lepiej stosować jawne porównania >= i < dla przedziałów lewostronnie domkniętych.

BETWEEN dla zakresów to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

BETWEEN obejmuje oba końce zakresu

BETWEEN a AND b dopasowuje wartości, dla których x >= a AND x <= b. Oba końce zakresu są włącznie.

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

Zakresy dat

BETWEEN działa również z datami i znacznikami czasu:

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

Pułapka włącznie uwzględnianych końców zakresu

W przypadku kolumny TIMESTAMP wartość BETWEEN '2024-12-31' kończy się o północy 31. dnia, a NIE na koniec tego dnia. Zamówienia złożone 31 grudnia o 14:00 zostaną wykluczone.

-- 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';

W przypadku czasu należy preferować przedziały półotwarte

Wzorzec półotwarty >= start AND < next_period jest jednoznaczny, działa dla dowolnej dokładności i naturalnie łączy się z kolejnymi okresami.

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

NOT BETWEEN

Odwrotność BETWEEN — wyklucza zakres:

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

Zapytania zakresowe i indeksy

Indeks B-tree pomaga w zapytaniach zakresowych. W indeksach złożonych kolumnę zakresu należy umieścić na końcu, aby uzyskać najlepszą selektywność:

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;

Ciągi znaków i BETWEEN

BETWEEN porównuje ciągi znaków leksykograficznie. Należy uważać na wielkość liter:

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

Typy zakresowe (PostgreSQL)

PostgreSQL ma dedykowane typy zakresowe dla przedziałów półotwartych:

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

Weryfikowanie zakresów za pomocą CHECK

Proszę upewnić się, że start <= end podczas wstawiania danych:

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

Grupowanie wartości liczbowych

Połączenie BETWEEN z CASE pozwala tworzyć przedziały:

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

Rozszerzenie standardu SQL, które nie wymaga, aby mniejsza wartość znajdowała się po określonej stronie:

SELECT 5 BETWEEN SYMMETRIC 10 AND 1;   -- TRUE

Podsumowanie

BETWEEN to wygodny skrót dla przedziału domkniętego.

  • Należy uważać na końce zakresów znaczników czasu — preferować przedział półotwarty >= start AND < end
  • Indeksy złożone przyspieszają zapytania zakresowe
  • Ograniczenia CHECK wymuszają poprawne zakresy

Szybki test

Czy oba końce zakresu BETWEEN a AND b są włącznie uwzględniane w standardowym SQL?

Często zadawane pytania

Czy lekcja „BETWEEN dla zakresów” jest bezpłatna?

Tak — pełny tekst „BETWEEN dla zakresów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „BETWEEN dla zakresów”?

Używaj BETWEEN dla domkniętych zakresów liczbowych i dat, a także dowiedz się, kiedy lepiej stosować jawne porównania >= i < dla przedziałów lewostronnie domkniętych. Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „BETWEEN dla zakresów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wzorce LIKE i symbole wieloznaczne
  2. IN i NOT IN dla zbiorów
  3. BETWEEN dla zakresów
  4. IS NULL, IS NOT NULL i COALESCE
← Powrót do SQL Academy