0Pricing
SQL Academy · レッスン

範囲に対する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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. LIKEパターンとワイルドカード
  2. 集合に対するINとNOT IN
  3. 範囲に対するBETWEEN
  4. IS NULL、IS NOT NULLとCOALESCE
← SQL Academyに戻る