単純な条件式も複数組み合わせると、複雑な条件を指定できるようになります。複数の条件を組み合わせるには、論理演算子を用います。また、与えた条件を「満たさない」レコードを抽出することもできます。
- 論理演算子で式をつなぐ -
WHERE句の条件式は1つだけではなく、複数指定できます。複数の条件を指定する場合は、各条件式を論理演算子でつなぎます。論理演算子には表2に示す3種類があります。
ANDとORは左右に条件式を記述し、2つの式の評価結果(真/偽)の組み合わせで全体の真/偽が決まります。論理演算子の場合も、その左右の条件式を左辺/右辺と呼びます。NOTは1つの条件式を記述し、その評価結果を否定します。
それぞれの例を紹介しておきます。
表2:論理演算子
演算子 |
機能 |
AND |
左辺と右辺の両方の条件式が「真」のとき「真」(~かつ~:論理積) |
OR |
左辺または右辺のどちらか一方、あるいは両方の条件式が「真」のとき「真」(~または~:論理和) |
NOT |
条件式が「真」のとき「偽」、「偽」のとき「真」(~以外:否定) |
- AND演算子~両方の条件を満たす -
AND演算子は、左右の条件の「両方を満たしているレコード」だけを抽出します。
テーブル「商品_mr」から「仕入単価が5,000円以上で在庫数が10個以下」となっている商品を抽出する場合、以下の2つの条件が満たされていなければなりません。
仕入単価 >= 5000
在庫 <= 10
この2つの条件式をAND演算子でつなぐと、全体で
「仕入単価」フィールドの値が5000以上
かつ
「在庫」フィールドの値が10以下
という条件になります(画面7)。
SELECT * FROM 商品_mr WHERE 仕入単価 >= 5000 AND 在庫 <= 10
- AND演算子による範囲の指定 -
AND演算子は、1つのフィールドの値に対して範囲を指定する場合にも使えます。「在庫数が10~20の商品を抽出する」場合、以下の2つの条件が満たされる必要があります。
「在庫」フィールドの値が10以上
かつ
「在庫」フィールドの値が20以下
SQL文は以下のようになります(画面8)。
SELECT * FROM 商品_mr WHERE 在庫 >= 10 AND 在庫 <= 20
この場合、以上と以下の演算子を間違えると、レコードは1件も抽出されなくなります。
SELECT * FROM 商品_mr WHERE 在庫 <= 10 AND 在庫 >= 20
1つのフィールドの値が「10以下でなおかつ20以上」という状態は、あり得ないためです。比較演算子の指定を間違えると正しい結果が得られないのは当然ですが、AND演算子で複数の条件をつないで値の範囲を示す場合は、特に注意が必要です。
- OR演算子~どちらか一方の条件を満たす -
OR演算子は、左右の条件の「どちらか一方、あるいは両方を満たしているレコード」だけを抽出します。
テーブル「商品_mr」から「仕入単価が5,000円以上」または「販売単価が10,000円以上」のレコードを抽出する場合、以下の2つの条件のどちらかが満たされていればよいことになります。
仕入単価 >= 5000
販売単価 >= 10000
この2つの条件式をOR演算子でつなぐと、全体で
「仕入単価」フィールドの値が5000以上
または
「販売単価」フィールドの値が10000以上
SQL文は以下のようになります(画面9)。
SELECT * FROM 商品_mr WHERE 仕入単価 >= 5000 OR 販売単価 >= 10000
画面9を見れば、販売単価が9,600円の「551211:スプーン・フォークセットA」や9,850円の「612401:製本棚180」が抽出されています。どちらも仕入単価が5,000円以上だからです。
- NOT演算子~条件の逆を抽出する -
NOT演算子はAND、OR演算子のように2つの条件式をつなぐのではなく、続く条件式を「満たさない」レコードだけを抽出します。
在庫数が「5以下」のレコードを抽出する場合は、「在庫 <= 5」という条件を与えました。
SELECT * FROM 商品_mr WHERE 在庫 <= 5
この条件にNOTを付けて以下のようにすると、「在庫数が5以下でない=在庫数が6以上の」レコードが抽出されます(画面10)。
SELECT * FROM 商品_mr WHERE NOT 在庫 <= 5
NOT演算子は、処理の中で「明示された条件を満たすレコードを省く(除外する)」場合に使用されます。
|
|
|