1. 導入:なぜBETWEEN句が必要なのか
データベース運用において、「特定の期間」や「数値の範囲」でデータを抽出する処理は非常に頻繁に発生します。例えば、「今月の売上データ」や「20代のユーザーリスト」といった抽出条件です。これを比較演算子(>= や <=)だけで記述するとコードが冗長になりがちですが、BETWEEN句を活用することで、直感的で読みやすいSQLを記述することが可能になります。本記事では、BETWEEN句の仕組みと実務での活用法を解説します。
2. 基礎知識:BETWEEN句の仕組み
BETWEEN句は、指定した値が「開始値」と「終了値」の範囲内(両端の値を含む)にあるかどうかを判定する演算子です。
基本構文は以下の通りです。
SELECT カラム名 FROM テーブル名 WHERE カラム BETWEEN 値1 AND 値2;
これは、論理演算子を用いた以下の記述と全く同じ意味を持ちます。
WHERE カラム >= 値1 AND カラム <= 値2;
ポイントは、指定した範囲に「値1」と「値2」自身も含まれる(境界値を含む)という点です。範囲外を取得したい場合は、NOT BETWEENを使用することで簡潔に記述できます。
3. 実装・解決策:実務での利用例
以下に、ユーザー管理テーブルを例にした具体的なSQLの実行手順を示します。
4. サンプルプログラム
以下のコードは、SQLite環境で動作する検証用スクリプトです。お手元の環境でコピー&ペーストして確認してください。
— 1. テスト用テーブルの作成
CREATE TABLE user(name TEXT, old INTEGER, address TEXT);
— 2. サンプルデータの挿入
INSERT INTO user VALUES(‘Suzuki’, 24, ‘Osaka’);
INSERT INTO user VALUES(‘Honda’, 18, ‘Tokyo’);
INSERT INTO user VALUES(‘Yamada’, 32, ‘Osaka’);
INSERT INTO user VALUES(‘Endou’, 35, ‘Tokyo’);
INSERT INTO user VALUES(‘Kudou’, 19, ‘Nagoya’);
— 3. BETWEEN句で20歳以上30歳以下のデータを取得
— 境界値(20と30)も含まれることに注意してください
SELECT FROM user WHERE old BETWEEN 20 AND 30;
— 4. NOT BETWEENで範囲外のデータを取得
— 20歳未満、または30歳超のデータが抽出されます
SELECT FROM user WHERE old NOT BETWEEN 20 AND 30;
5. 応用・注意点:現場での落とし穴
実務でBETWEEN句を使用する際、特に注意すべき点が二つあります。
日付型データの罠
日付型(TIMESTAMP型など)に対してBETWEENを使用する場合、「時・分・秒」が含まれていると意図しない結果になることがあります。例えば「2023-01-01」から「2023-01-31」を指定した場合、時刻が「00:00:00」のデータしか拾えないケースがあります。日付範囲を指定する際は、時刻を含めた正確な範囲を指定するか、DATE関数などで日付のみに変換して比較することを推奨します。
境界値の確認
「以上」「以下」ではなく、「より大きい」「未満」という条件が必要な場合は、BETWEENではなく比較演算子(> や <)を直接使う必要があります。仕様書にある「~の間」という言葉が、境界値を含んでいるのかどうか、常に設計段階で確認する癖をつけましょう。
BETWEEN句はシンプルですが、可読性を高める強力なツールです。適切に使い分けて、メンテナンス性の高いSQLを記述していきましょう。

コメント