🔖

【SQL】BETWEEN の使い方と注意点を解説

に公開

はじめに

SQLで数値や日付の範囲を指定したいとき、
よく使われるのが BETWEEN です。

SELECT * FROM products
WHERE price BETWEEN 100 AND 500;

このようにシンプルに書けて便利ですが、
範囲の扱い方や、日付との組み合わせで注意が必要なポイントもあります。

本記事では、BETWEEN の基本的な使い方と注意点を整理します。

1. BETWEEN の基本構文

column_name BETWEEN1 AND2
  • column_name値1以上、値2以下の範囲に含まれるかをチェックします。

これは以下と同じ意味です。

column_name >=1 AND column_name <=2
  • 数値・日付どちらでも同様に、両端を含む比較になります。

※ なお、BETWEEN文字列にも使用可能ですが、その場合は文字コード順で比較されるため注意が必要です。

2. 数値の例

まずは products テーブルの例から見てみましょう。

テーブル例:products

id name price
1 Apple 120
2 Banana 80
3 Orange 300
4 Mango 500
5 Pineapple 700

クエリ

SELECT * FROM products
WHERE price BETWEEN 100 AND 500;

実行結果

id name price
1 Apple 120
3 Orange 300
4 Mango 500

80 は範囲外なので含まれません。
このクエリでは、price100以上500以下の商品だけが取得されます。

3. 日付の例(よくある落とし穴)

次に、events テーブルを使った例です。

テーブル例:events

id name event_date
1 New Year Party 2025-01-01 10:00:00
2 Conference 2025-01-15 14:00:00
3 Workshop 2025-01-31 09:30:00
4 Seminar 2025-02-01 11:00:00

クエリ

SELECT * FROM events
WHERE event_date BETWEEN '2025-01-01' AND '2025-01-31';

実行結果(期待とずれる場合がある)

id name event_date
1 New Year Party 2025-01-01 10:00:00
2 Conference 2025-01-15 14:00:00

Workshop(1月31日)は datetime 型で時刻が含まれており、
'2025-01-31''2025-01-31 00:00:00' と解釈されるため、条件に合致せず除外されます

✅ 安全な書き方の例

SELECT * FROM events
WHERE event_date >= '2025-01-01'
  AND event_date < '2025-02-01';

🔹 正しい実行結果

id name event_date
1 New Year Party 2025-01-01 10:00:00
2 Conference 2025-01-15 14:00:00
3 Workshop 2025-01-31 09:30:00

event_datedatetime 型の場合、月末のデータを確実に取得するには < '翌月1日' のように書くのが一般的です。

4. 範囲指定の順番にも注意

-- OK(昇順)
BETWEEN 100 AND 500

-- 結果が0件になる例(降順)
BETWEEN 500 AND 100
  • BETWEEN小さい値 → 大きい値 の順で書く必要があります。
  • 順番を逆にすると、条件に一致する行がなくなり、結果が空になるため注意が必要です。

まとめ

ポイント 説明
両端を含む BETWEEN>=<= と同じ意味
日付は要注意 datetime 型では時刻の影響を受ける
安全な日付範囲 >= 開始日 AND < 翌月1日 で書くと確実
順番を守る BETWEEN 小さい値 AND 大きい値 と書くこと

おわりに

BETWEEN はシンプルで読みやすい構文ですが、
時刻付きのデータ範囲の順番など、意外と注意すべきポイントもあります。

結果がうまく取得できないときは、BETWEEN の動きを疑ってみてください。

本記事が参考になれば幸いです。

Discussion