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 > 20Zapytania 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; -- TRUEPodsumowanie
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
- Wzorce LIKE i symbole wieloznaczne
- IN i NOT IN dla zbiorów
- BETWEEN dla zakresów
- IS NULL, IS NOT NULL i COALESCE