範囲に対するBETWEEN
BETWEENで数値や日付の閉区間を扱い、半開区間では明示的な>=と<の比較を優先すべき場合を理解します。
「範囲に対するBETWEEN」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
BETWEENは両端を含む
BETWEEN a AND bは、x >= a AND x <= bを満たす値にマッチします。両端の値は含まれます。
SELECT * FROM orders WHERE total BETWEEN 100 AND 500;
-- equivalent to:
SELECT * FROM orders WHERE total >= 100 AND total <= 500;日付範囲
BETWEENは日付やタイムスタンプにも使用できます。
SELECT * FROM orders
WHERE created_at BETWEEN '2024-01-01' AND '2024-12-31';両端を含む場合の落とし穴
TIMESTAMP列でBETWEEN '2024-12-31'を使用すると、31日の終わりではなく、31日の午前0時までしか対象になりません。12月31日14:00に注文されたデータは除外されます。
-- 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';時刻には半開区間を優先する
半開区間のパターン>= start AND < next_periodは曖昧さがなく、任意の粒度で使用でき、連続する期間にも自然に適用できます。
WHERE created_at >= date_trunc('month', NOW())
AND created_at < date_trunc('month', NOW()) + INTERVAL '1 month';NOT BETWEEN
BETWEENの逆で、範囲を除外します。
SELECT * FROM products WHERE price NOT BETWEEN 10 AND 20;
-- equivalent to: price < 10 OR price > 20範囲クエリとインデックス
B-treeインデックスは範囲クエリに役立ちます。複合インデックスでは、選択性を高めるために範囲列を最後に配置します。
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;文字列とBETWEEN
BETWEENは文字列を辞書順で比較します。大文字と小文字の扱いには注意してください。
SELECT * FROM users WHERE last_name BETWEEN 'A' AND 'C';
-- Includes 'Adams' and 'Bond', excludes 'C' itself only if 'C' < 'Ca...'範囲型(PostgreSQL)
PostgreSQLには、半開区間専用の範囲型があります。
SELECT int4range(10, 20) @> 15; -- true (15 in [10,20))
SELECT tsrange('2024-01-01', '2025-01-01') @> NOW()::TIMESTAMP;CHECKによる範囲の検証
挿入時にstart <= endであることを確認します。
CREATE TABLE bookings (
id BIGSERIAL PRIMARY KEY,
start_at TIMESTAMPTZ NOT NULL,
end_at TIMESTAMPTZ NOT NULL,
CHECK (start_at < end_at)
);数値の区分化
BETWEENとCASEを組み合わせて区分を作成します。
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
どちらの値が小さいかを問わない、SQL標準の拡張構文です。
SELECT 5 BETWEEN SYMMETRIC 10 AND 1; -- TRUEまとめ
BETWEENは、両端を含む範囲を簡潔に指定できる便利な構文です。
- タイムスタンプの端点には注意し、半開区間の
>= start AND < endを優先する - 複合インデックスで範囲クエリを高速化する
- CHECK制約で有効な範囲を保証する
クイックチェック
標準SQLでは、BETWEEN a AND bの両端の値は含まれますか。
よくある質問
「範囲に対するBETWEEN」レッスンは無料ですか?
はい。「範囲に対するBETWEEN」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「範囲に対するBETWEEN」で何を学びますか?
BETWEENで数値や日付の閉区間を扱い、半開区間では明示的な>=と<の比較を優先すべき場合を理解します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「範囲に対するBETWEEN」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。