演算子と述語③
1.IN述語
最初に論理演算子を使い複数の述語を組み合わせる方法の説明をしましたが、多くの述語を組み合わせるとクエリーが複雑になってしまい、読みにくくなることがあります。給与表で説明しましょう。

ここで、”朝勤”、”日勤”、”夜勤”の全社員を選んでみましょう。いくつかの方法がありますが、ここでは、OR演算子を使ってみましょう。
SELECT * FROM 給与 WHERE
勤務区分 = “朝勤” OR
勤務区分 = “日勤” OR
勤務区分 = “夜勤”;
結果は以下のとおりとなります。

この場合、IN述語を使用するとスッキリ記述することができます。
SELECT * FROM 給与 WHERE 勤務区分 IN(“朝勤”,”日勤”,”夜勤”);
IN述語は、数値型の項目についても、使用できます。
勤務年数が、3年、5年のデータを抽出する場合は、
SELECT * FROM 給与 WHERE 勤務年数 IN(3,5);
結果は以下のとおりとなります。

NOT演算子と組み合わせることもできます。例えば、勤務区分が、”朝勤”、”日勤”、”夜勤”のいずれでもないデータを抽出する場合は以下のようなSQLになります。
SELECT * FROM 給与 WHERE 勤務区分 NOT IN(“朝勤”,”日勤”,”夜勤”);
結果は以下のとおりとなります。

このSQLは、このように表現することもできます。結果は同じになりますが、非常に冗長な感じになります。
SELECT * FROM 給与 WHERE
勤務区分 <> “朝勤” AND
勤務区分 <> “日勤” AND
勤務区分 <> “夜勤”;
2.BETWEEN述語
引き続き”給与”表で説明します。基本給が25万円以上30万円以下のデータを抽出します。AND演算子を使うと以下のSQLになります。
SELECT * FROM 給与 WHERE 基本給(万円) >= 25 AND 基本給(万円) <= 30;
結果は以下のようになります。

このような場合、BETWEEN述語を使うと簡潔に表現することができます。
SQLは以下のようになります。
SELECT * FROM 給与 WHERE 基本給(万円) BETWEEN 25 AND 30;
結果は上と同じになります。
BETWEEN述語とNOT演算子を組み合わせると抽出範囲は全く逆になります。
SELECT * FROM 給与 WHERE 基本給(万円) NOT BETWEEN 25 AND 30;
結果は以下のようになります。

以上で、IN述語とBETWEEN述語の説明は終了です。次回は集合演算子の説明を行います。
コメントを残す