はじめてのSQL【初級編:WHERE句について①】
こんにちは。
スタッフブログ担当の岩でございます。
前回の記事ではSELECT文について説明いたしました。
前回はテーブルに入っている全ての行を選択していました。
しかし、実際にSELECT文を使うときは毎回全ての行を取り出したいわけではありません。
むしろ、「販売単価が1000円以上」や「商品分類が衣類」など、何らかの条件に合うデータを取り出したいケースがほとんどです。
そのような場合にはWHERE句を使います。
WHERE句とは
SELECT文で選択したい行の条件をWHERE句で指定します。
WHERE句の使い方は以下の通りです。
SELECT <列名>,...
FROM <テーブル名>
WHERE <条件式>;
WHERE句で指定する条件式には様々な書き方があります。
今回は「比較演算子」について説明いたします。
前回の記事と同じShopテーブルを使います。
shohin_id (商品ID) | shohin_mei (商品名) | shohin_bunrui (商品分類) | hanbai_tanka (販売単価) | shiire_tanka (仕入単価) | torokubi (登録日) |
0001 | ボールペン | 事務用品 | 100 | 50 | 2020-10-20 |
0002 | おろしがね | キッチン用品 | 500 | 350 | 2020-09-07 |
0003 | フォーク | キッチン用品 | 100 | 30 | |
0004 | 圧力鍋 | キッチン用品 | 5000 | 1000 | 2020-04-25 |
0005 | 包丁 | キッチン用品 | 8000 | | 2020-07-05 |
0006 | カッターシャツ | 衣類 | 3000 | 1500 | 2020-06-11 |
0007 | 穴あけパンチ | 事務用品 | 400 | 240 | 2020-11-27 |
0008 | Tシャツ | 衣類 | 1500 | | 2020-03-13 |
仕入単価や登録日にデータが入っていない部分があります。
これを「NULL(ヌル)」といいます。
「 」(空白)とは違いデータが無いという意味になりますので、注意してください。
比較演算子
まず、比較演算子には以下の種類があります。
比較演算子 | 意味 |
= | ~と等しい |
<> | ~と等しくない |
>= | ~以上 |
> | ~より大きい |
<= | ~以下 |
< | ~より小さい |
よく意味を間違えてしまうのは「>=(~以上)」と「>(~より大きい)」、「<=(~以下)」と「<(~より小さい)」です。
「=」が付くか付かないかですが、どのような違いがあるか説明いたします。
例えば、「販売単価>=3000」という条件があったとします。
この条件式は、「販売単価が3000以上である」という意味になります。
この条件に当てはまるShopテーブルの行は「カッターシャツ」と「包丁」と「圧力鍋」です。
| |||||
0004 | 圧力鍋 | キッチン用品 | 5000 | 1000 | 2020-04-25 |
0005 | 包丁 | キッチン用品 | 8000 | | 2020-07-05 |
0006 | カッターシャツ | 衣類 | 3000 | 1500 | 2020-06-11 |
|
「販売単価>=3000」の場合、販売単価が3000円のカッターシャツも当てはまります。
しかし、「販売単価>3000」(販売単価が3000より大きい)という条件に当てはまるのは「包丁」と「圧力鍋」のみです。
| |||||
0004 | 圧力鍋 | キッチン用品 | 5000 | 1000 | 2020-04-25 |
0005 | 包丁 | キッチン用品 | 8000 | | 2020-07-05 |
|
「販売単価>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 | カッターシャツ | 衣類 | 3000 | 1500 | 2020-06-11 |
0008 | Tシャツ | 衣類 | 1500 | 2020-03-13 |
例2.商品分類がキッチン用品でない
SELECT *
FROM Shop
WHERE shohin_bunrui <> 'キッチン用品';
取り出される行は「ボールペン」、「カッターシャツ」、「穴あけパンチ」、「Tシャツ」の4行です。
shohin_id (商品ID) | shohin_mei (商品名) | shohin_bunrui (商品分類) | hanbai_tanka (販売単価) | shiire_tanka (仕入単価) | torokubi (登録日) |
0001 | ボールペン | 事務用品 | 100 | 50 | 2020-10-20 |
0006 | カッターシャツ | 衣類 | 3000 | 1500 | 2020-06-11 |
0007 | 穴あけパンチ | 事務用品 | 400 | 240 | 2020-11-27 |
0008 | Tシャツ | 衣類 | 1500 | 2020-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 | ボールペン | 事務用品 | 100 | 50 | 2020-10-20 |
0007 | 穴あけパンチ | 事務用品 | 400 | 240 | 2020-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 | カッターシャツ | 衣類 | 3000 | 1500 | 2020-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 | ボールペン | 事務用品 | 100 | 50 | 2020-10-20 |
0003 | フォーク | キッチン用品 | 100 | 30 | |
0007 | 穴あけパンチ | 事務用品 | 400 | 240 | 2020-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 (登録日) |
0008 | Tシャツ | 衣類 | 1500 | 2020-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専用の演算子がある。
ということを覚えていてください。
まとめ
初めて条件式を書くときは、どのように書けばよいかいいか分からなくなり混乱することも多いと思います。
そうなったときは、今回の記事の例を参考にしていただければ幸いです。
最後まで読んでくださりありがとうございました。
次回は算術演算子について説明いたします。
どうぞよろしくお願いいたします。