MySQL の BETWEEN

ここでは MySQL の BETWEEN と NOT BETWEEN 演算子についてご説明します。

サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。

MySQL の BETWEEN 演算子

MySQL の BETWEEN 演算子は次のような構文で使用し、[A] が [B] と [C] の範囲内にある場合は 1 (TRUE) を、そうでなければ 0 (FALSE) を返す演算子です。

[A] BETWEEN [B] AND [C]

意味的には [B] <= [A] AND [A] <= [C] と同じで、範囲は [B] と [C] を含みます。

WHERE 句 や CASE WHEN の条件文など、boolean(ブーリアン)を返す式が必要な箇所で使えます。


BETWEEN 演算子を使ってテーブルからデータを取得してみましょう。

例えば、次のような students テーブルがあります。

MySQL の BETWEEN 1


この students テーブルから student_id が 2 ~ 5 の学生のデータのみを取得したい時は次のようにできます。

SELECT 	* 
FROM 	students
WHERE 	student_id BETWEEN 2 AND 5;

[実行結果]

MySQL の BETWEEN 2

student_id が 2 ~ 5 の学生のデータのみが取得できていますね。


MySQL の NOT BETWEEN 演算子

MySQL の NOT BETWEEN 演算子は次のような構文で使用し、[A] が [B] ~ [C] の範囲に入っていなければ、1 (TRUE) を、そうでなければ 0 (FALSE) を返す演算子です。

[A] NOT BETWEEN [B] AND [C]

BETWEEN を反対にしたもので、意味的には [A] < [B] OR [C] < [A] と同じです。

ですので、[A] が [B] や [C] の時は 0 (FALSE) になります。


NOT BETWEEN 演算子を使ってテーブルからデータを取得してみましょう。

先ほどとは反対に students テーブルから student_id が 2 ~ 5 ではない学生のデータのみを取得したい時は次のようにできます。

SELECT 	* 
FROM 	students
WHERE 	student_id NOT BETWEEN 2 AND 5;

[実行結果]

MySQL の BETWEEN 3

student_id が 2 ~ 5 ではない学生のデータが取得できていますね。


BETWEEN を使う時は NULL に注意!

BETWEEN 演算子を使う時は、[B] か [C] が NULL になると、評価の結果が全部 UNKNOWN となり、True になることはないので注意が必要です。

具体的な例をあげてご説明します。

例えば、@student_id_from と @student_id_to をクライアントプログラムから受け取って、次のクエリーを実行するとします。

@student_id_from が 2 でも @student_id_to が NULL の場合は、student_id が 2 以上のレコードを返すのではなく、結果セットは何も返ってきません。

SET @student_id_from = 2, @student_id_to = NULL;

SELECT 	* 
FROM 	students
WHERE 	student_id BETWEEN @student_id_from AND @student_id_to;

[実行結果]

MySQL の BETWEEN 4


これは、2 <= student_id AND student_id <= NULL と同等なためで、student_id <= NULL が UNKNOWN になり、UNKNOWN との AND は UNKNOWN となるためです。


NOT BETWEEN になると少し状況が違って、2 より小さい student_id を持つ学生のレコードが取得できます。

SET @student_id_from = 2, @student_id_to = NULL;

SELECT 	* 
FROM 	students
WHERE 	student_id NOT BETWEEN @student_id_from AND @student_id_to;

[実行結果]

MySQL の BETWEEN 5


これは、student_id < 2 OR NULL < student_id と同等なためで、NULL < student_id の評価結果が UNKNOWN でも、OR 演算子なので student_id < 2 の評価結果は 1 (TRUE) となるためです。


以上、MySQL の BETWEEN と NOT BETWEEN 演算子についてご説明しました。

© 2024 MySQL 入門