B L O G

  1. TOP
  2. BLOG
  3. はじめてのSQL【初級編:WHERE句について①】
プログラミング
2024.06.28

はじめてのSQL【初級編:WHERE句について①】

こんにちは。

スタッフブログ担当の岩でございます。

前回の記事ではSELECT文について説明いたしました。

はじめてのSQL【初心者編:SELECT文について】

前回はテーブルに入っている全ての行を選択していました。

しかし、実際にSELECT文を使うときは毎回全ての行を取り出したいわけではありません。

むしろ、「販売単価が1000円以上」や「商品分類が衣類」など、何らかの条件に合うデータを取り出したいケースがほとんどです。

そのような場合にはWHERE句を使います。

WHEREくん

WHERE句とは

SELECT文で選択したい行の条件をWHERE句で指定します。

WHERE句の使い方は以下の通りです。

SELECT <列名>,...
FROM   <テーブル名>
WHERE  <条件式>;

WHERE句で指定する条件式には様々な書き方があります。

今回は「比較演算子」について説明いたします。

前回の記事と同じShopテーブルを使います。

shohin_id
(商品ID)
shohin_mei
(商品名)
shohin_bunrui
(商品分類)
hanbai_tanka
(販売単価)
shiire_tanka
(仕入単価)
torokubi
(登録日)
0001ボールペン事務用品100502020-10-20
0002おろしがねキッチン用品5003502020-09-07
0003フォークキッチン用品10030
0004圧力鍋キッチン用品500010002020-04-25
0005包丁キッチン用品80002020-07-05
0006カッターシャツ衣類300015002020-06-11
0007穴あけパンチ事務用品4002402020-11-27
0008Tシャツ衣類15002020-03-13
Shopテーブル

   

仕入単価や登録日にデータが入っていない部分があります。

これを「NULL(ヌル)」といいます。

「 」(空白)とは違いデータが無いという意味になりますので、注意してください。

   

比較演算子

まず、比較演算子には以下の種類があります。

比較演算子意味
=~と等しい
<>~と等しくない
>=~以上
>~より大きい
<=~以下
<~より小さい
比較演算子の種類

よく意味を間違えてしまうのは「>=(~以上)」と「>(~より大きい)」、「<=(~以下)」と「<(~より小さい)」です。

「=」が付くか付かないかですが、どのような違いがあるか説明いたします。

  

例えば、「販売単価>=3000」という条件があったとします。

この条件式は、「販売単価が3000以上である」という意味になります。

この条件に当てはまるShopテーブルの行は「カッターシャツ」と「包丁」と「圧力鍋」です。

0001ボールペン事務用品100502020-10-20
0002おろしがねキッチン用品5003502020-09-07
0003フォークキッチン用品10030
0004圧力鍋キッチン用品500010002020-04-25
0005包丁キッチン用品80002020-07-05
0006カッターシャツ衣類300015002020-06-11
0007穴あけパンチ事務用品4002402020-11-27
0008Tシャツ衣類15002020-03-13

「販売単価>=3000」の場合、販売単価が3000円のカッターシャツも当てはまります。

    

しかし、「販売単価>3000」(販売単価が3000より大きい)という条件に当てはまるのは「包丁」と「圧力鍋」のみです。

0001ボールペン事務用品100502020-10-20
0002おろしがねキッチン用品5003502020-09-07
0003フォークキッチン用品10030
0004圧力鍋キッチン用品500010002020-04-25
0005包丁キッチン用品80002020-07-05
0006カッターシャツ衣類300015002020-06-11
0007穴あけパンチ事務用品4002402020-11-27
0008Tシャツ衣類15002020-03-13

「販売単価>3000」の場合、販売単価が3000円のカッターシャツは当てはまりません。

    

このように「=」が付くか付かないかで、条件式で指定した値が含まれるか含まれないかが変わりますので注意してください。

    

比較演算子を使ったSELECT文

それでは実際に比較演算子を使ったSELECT文をみていきましょう。

例1.商品分類が衣類である

SELECT *
FROM Shop
WHERE shohin_bunrui = '衣類';

取り出される行は「カッターシャツ」と「Tシャツ」の2行です。

shohin_id
(商品ID)
shohin_mei
(商品名)
shohin_bunrui
(商品分類)
hanbai_tanka
(販売単価)
shiire_tanka
(仕入単価)
torokubi
(登録日)
0006カッターシャツ衣類300015002020-06-11
0008Tシャツ衣類15002020-03-13

     

例2.商品分類がキッチン用品でない

SELECT *
FROM Shop
WHERE shohin_bunrui <> 'キッチン用品';

取り出される行は「ボールペン」、「カッターシャツ」、「穴あけパンチ」、「Tシャツ」の4行です。

shohin_id
(商品ID)
shohin_mei
(商品名)
shohin_bunrui
(商品分類)
hanbai_tanka
(販売単価)
shiire_tanka
(仕入単価)
torokubi
(登録日)
0001ボールペン事務用品100502020-10-20
0006カッターシャツ衣類300015002020-06-11
0007穴あけパンチ事務用品4002402020-11-27
0008Tシャツ衣類15002020-03-13

       

例3.登録日が2020年10月20日以降である

SELECT *
FROM Shop
WHERE torokubi >= '2020-10-20';

取り出される行は「ボールペン」と「穴あけパンチ」の2行です。

shohin_id
(商品ID)
shohin_mei
(商品名)
shohin_bunrui
(商品分類)
hanbai_tanka
(販売単価)
shiire_tanka
(仕入単価)
torokubi
(登録日)
0001ボールペン事務用品100502020-10-20
0007穴あけパンチ事務用品4002402020-11-27

       

例4.仕入単価が1000より大きい

SELECT *
FROM Shop
WHERE shiire_tanka > 1000;

取り出される行は「カッターシャツ」の1行です。

shohin_id
(商品ID)
shohin_mei
(商品名)
shohin_bunrui
(商品分類)
hanbai_tanka
(販売単価)
shiire_tanka
(仕入単価)
torokubi
(登録日)
0006カッターシャツ衣類300015002020-06-11

       

例5.仕入単価が240以下である

SELECT *
FROM Shop
WHERE shiire_tanka <= 240;

取り出される行は「ボールペン」、「フォーク」、「穴あけパンチ」の3行です。

shohin_id
(商品ID)
shohin_mei
(商品名)
shohin_bunrui
(商品分類)
hanbai_tanka
(販売単価)
shiire_tanka
(仕入単価)
torokubi
(登録日)
0001ボールペン事務用品100502020-10-20
0003フォークキッチン用品10030
0007穴あけパンチ事務用品4002402020-11-27

      

例6.登録日が2020年4月25日より前である

SELECT *
FROM Shop
WHERE torokubi < '2020-04-25';

取り出される行は「Tシャツ」の1行です。

shohin_id
(商品ID)
shohin_mei
(商品名)
shohin_bunrui
(商品分類)
hanbai_tanka
(販売単価)
shiire_tanka
(仕入単価)
torokubi
(登録日)
0008Tシャツ衣類15002020-03-13

        

NULLの比較

データにNULLが含まれている場合、比較演算子を使うときに注意しなければなりません。

Shopテーブルでは「包丁」と「Tシャツ」の仕入単価がNULLとなっています。

表はこちらを参照してください。

仕入単価がNULLのデータを取り出そうとして以下のようなSELECT文を実行するとエラーとなります。

SELECT *
FROM Shop
WHERE shiire_tanka = NULL;

NULLには全ての比較演算子が使えません。

仕入単価がNULLのデータを取り出したい場合は、「IS NULL」演算子を使用します。

SELECT *
FROM Shop
WHERE shiire_tanka IS NULL;

また、仕入単価がNULLではないデータを取り出したい場合は「IS NOT NULL」演算子を使用します。

SELECT *
FROM Shop
WHERE shiire_tanka IS NOT NULL;

NULLに比較演算子は使えない、NULL専用の演算子がある。

ということを覚えていてください。

まとめ

初めて条件式を書くときは、どのように書けばよいかいいか分からなくなり混乱することも多いと思います。

そうなったときは、今回の記事のを参考にしていただければ幸いです。

最後まで読んでくださりありがとうございました。

次回は算術演算子について説明いたします。

どうぞよろしくお願いいたします。