Step 5:WHERE句で条件指定

🎯 Step 5: WHERE句で条件指定

欲しいデータだけを取り出そう!

📋 このステップで学ぶこと
  • WHERE句とは何か、なぜ必要か
  • 比較演算子の使い方(=, >, <, >=, <=, <>)
  • 複数条件の組み合わせ(AND, OR)
  • 条件の否定(NOT)
  • カッコを使った優先順位の指定

🎯 1. WHERE句とは?

1-1. WHERE句の役割

Step 4では、SELECT * FROM 商品;で全てのデータを取得しました。しかし、実際の業務では「全部」ではなく「条件に合うものだけ」が欲しい場合がほとんどです。

WHERE句(ウェア句)は、「〜という条件に合うデータだけ」を取り出すための機能です。

🛒 ネットショッピングで例えると…

Amazonや楽天で商品を探すとき、こんな絞り込みをしますよね:

  • 「価格が1000円以下」
  • 「評価が★4以上」
  • 「送料無料」
  • 「カテゴリが家電」

WHERE句は、まさにこの「絞り込み機能」をSQLで実現するものです。

1-2. WHERE句の基本構文

📝 WHERE句の基本構文
SELECT 列名 FROM テーブル名 WHERE 条件;
📌 英語の意味を理解しよう
単語 意味 役割
SELECT 選ぶ どの列を取り出すか
FROM 〜から どのテーブルから
WHERE 〜の場所で、〜の条件で どんな条件で絞り込むか

つまり「〇〇テーブルから、△△という条件に合うデータの、□□列を表示して」という意味です。

1-3. WHERE句の処理順序

SQLは書いた順番通りには処理されません。実際の処理順序は以下の通りです。

🔄 SQLの処理順序
  1. FROM – まずテーブルを特定
  2. WHERE – 条件に合う行だけを選ぶ
  3. SELECT – 必要な列だけを取り出す

つまり、「テーブルの中から条件に合う行を見つけて、その中から必要な列を取り出す」という流れです。

📊 2. 練習用テーブルの準備

2-1. テーブルを作成する

Step 4と同じ商品テーブルを使いますが、データを10件に増やします。以下のSQLを順番に実行してください。

ステップ1:テーブルを作成

※横にスクロールできます

CREATE TABLE 商品 ( 商品ID INTEGER PRIMARY KEY, 商品名 TEXT NOT NULL, 価格 INTEGER NOT NULL, カテゴリ TEXT, 在庫数 INTEGER );

ステップ2:データを追加

※横にスクロールできます

INSERT INTO 商品 VALUES (1, ‘ノートPC’, 80000, ‘電化製品’, 5), (2, ‘マウス’, 1500, ‘電化製品’, 20), (3, ‘デスク’, 15000, ‘家具’, 3), (4, ‘チェア’, 12000, ‘家具’, 8), (5, ‘モニター’, 25000, ‘電化製品’, 10), (6, ‘キーボード’, 3000, ‘電化製品’, 15), (7, ‘本棚’, 8000, ‘家具’, 5), (8, ‘ランプ’, 4000, ‘家具’, 12), (9, ‘スピーカー’, 6000, ‘電化製品’, 7), (10, ‘ヘッドホン’, 9000, ‘電化製品’, 18);

2-2. 作成したテーブルの内容

📋 商品テーブル(10件のデータ)
商品ID 商品名 価格 カテゴリ 在庫数
1 ノートPC 80000 電化製品 5
2 マウス 1500 電化製品 20
3 デスク 15000 家具 3
4 チェア 12000 家具 8
5 モニター 25000 電化製品 10
6 キーボード 3000 電化製品 15
7 本棚 8000 家具 5
8 ランプ 4000 家具 12
9 スピーカー 6000 電化製品 7
10 ヘッドホン 9000 電化製品 18

電化製品6件、家具4件のデータです。このテーブルでWHERE句を練習していきましょう!

⚖️ 3. 比較演算子を使う

3-1. 比較演算子とは?

比較演算子は、値を比較するための記号です。「等しい」「より大きい」「以下」などの条件を表現します。

📋 SQLで使える比較演算子一覧
演算子 意味 使用例
= 等しい 価格 = 5000
> より大きい 価格 > 10000
< より小さい 在庫数 < 10
>= 以上 価格 >= 5000
<= 以下 在庫数 <= 10
<> または != 等しくない カテゴリ <> ‘家具’

3-2. =(等しい)を使う

=は、指定した値と完全に一致するデータを取得します。

カテゴリが「電化製品」の商品を取得してみましょう。

※横にスクロールできます

SELECT * FROM 商品 WHERE カテゴリ = ‘電化製品’;
📌 このSQLの意味
部分 意味
SELECT * 全ての列を選ぶ
FROM 商品 商品テーブルから
WHERE カテゴリ = '電化製品' カテゴリが「電化製品」に等しい行だけ
📋 実行結果(6件)
商品ID 商品名 価格 カテゴリ 在庫数
1 ノートPC 80000 電化製品 5
2 マウス 1500 電化製品 20
5 モニター 25000 電化製品 10
6 キーボード 3000 電化製品 15
9 スピーカー 6000 電化製品 7
10 ヘッドホン 9000 電化製品 18
⚠️ 重要:文字列はシングルクォートで囲む

文字列(TEXT型)の値を指定するときは、必ず(シングルクォート)で囲みます。

  • 正しい:WHERE カテゴリ = '電化製品'
  • 間違い:WHERE カテゴリ = 電化製品(エラーになる)

数値の場合はクォートは不要です。WHERE 価格 = 5000

3-3. >(より大きい)と <(より小さい)を使う

>は「より大きい」、<は「より小さい」を意味します。

注意:「より大きい」は、その値自体は含まれません

価格が10000円より大きい(10000円を含まない)商品を取得してみましょう。

※横にスクロールできます

SELECT 商品名, 価格 FROM 商品 WHERE 価格 > 10000;
📋 実行結果(4件)
商品名 価格
ノートPC 80000
デスク 15000
チェア 12000
モニター 25000

10000円ちょうどの商品があれば、それは含まれません。

次に、在庫数が10個より少ない商品を取得してみましょう。

※横にスクロールできます

SELECT 商品名, 在庫数 FROM 商品 WHERE 在庫数 < 10;
📋 実行結果(5件)
商品名 在庫数
ノートPC 5
デスク 3
チェア 8
本棚 5
スピーカー 7

在庫数が10個ちょうどの「モニター」は含まれていません。

3-4. >=(以上)と <=(以下)を使う

>=は「以上」、<=は「以下」を意味します。

ポイント:「以上」「以下」は、その値自体も含まれます

価格が10000円以上(10000円を含む)の商品を取得してみましょう。

※横にスクロールできます

SELECT 商品名, 価格 FROM 商品 WHERE 価格 >= 10000;
📋 実行結果(4件)
商品名 価格
ノートPC 80000
デスク 15000
チェア 12000
モニター 25000

10000円ちょうどの商品があれば、それも含まれます。

💡 「より大きい」と「以上」の違い
演算子 意味 10000を条件にした場合
> より大きい 10001以上が対象(10000は含まない)
>= 以上 10000以上が対象(10000も含む)
< より小さい 9999以下が対象(10000は含まない)
<= 以下 10000以下が対象(10000も含む)

3-5. <>(等しくない)を使う

<>は「等しくない」を意味します。!=と書くこともできます。

カテゴリが「電化製品」ではない商品を取得してみましょう。

※横にスクロールできます

SELECT 商品名, カテゴリ FROM 商品 WHERE カテゴリ <> ‘電化製品’;
📋 実行結果(4件)
商品名 カテゴリ
デスク 家具
チェア 家具
本棚 家具
ランプ 家具

電化製品以外、つまり「家具」だけが表示されました。

🔗 4. 複数の条件を組み合わせる(AND)

4-1. ANDとは?

ANDは、「AかつB」という意味で、複数の条件を同時に満たすデータだけを取得します。

🛒 ネットショッピングで例えると…

「価格が5000円以下」かつ「評価が★4以上」で絞り込むと、両方の条件を満たす商品だけが表示されますよね。

ANDはまさにこの「かつ」を表します。

4-2. ANDを使ってみよう

「カテゴリが電化製品」かつ「価格が10000円以下」の商品を取得してみましょう。

※横にスクロールできます

SELECT 商品名, 価格, カテゴリ FROM 商品 WHERE カテゴリ = ‘電化製品’ AND 価格 <= 10000;
📌 このSQLの意味
部分 意味
カテゴリ = '電化製品' 条件1:カテゴリが電化製品
AND かつ(両方満たす)
価格 <= 10000 条件2:価格が10000円以下

条件1と条件2の両方を満たすデータだけが取得されます。

📋 実行結果(4件)
商品名 価格 カテゴリ
マウス 1500 電化製品
キーボード 3000 電化製品
スピーカー 6000 電化製品
ヘッドホン 9000 電化製品

電化製品で、かつ価格が10000円以下のものだけが表示されました。

4-3. 3つ以上の条件をANDでつなぐ

ANDは何個でもつなげられます。3つの条件を指定してみましょう。

※横にスクロールできます

SELECT 商品名, 価格, カテゴリ, 在庫数 FROM 商品 WHERE カテゴリ = '電化製品' AND 価格 >= 5000 AND 在庫数 >= 10;
📌 3つの条件
  • 条件1:カテゴリが電化製品
  • 条件2:価格が5000円以上
  • 条件3:在庫数が10個以上

3つ全てを満たすデータだけが取得されます。

📋 実行結果(2件)
商品名 価格 カテゴリ 在庫数
モニター 25000 電化製品 10
ヘッドホン 9000 電化製品 18
💡 ANDのイメージ

ANDでつないだ条件は、全てをクリアしなければならない関門のようなものです。

1つでもクリアできなければ、そのデータは結果に含まれません。

🔀 5. いずれかの条件を満たす(OR)

5-1. ORとは?

ORは、「AまたはB」という意味で、いずれかの条件を満たすデータを取得します。

🛒 ネットショッピングで例えると...

「カテゴリがPC周辺機器」または「カテゴリがオーディオ」で絞り込むと、どちらかに該当する商品が表示されますよね。

ORはこの「または」を表します。

5-2. ORを使ってみよう

「価格が3000円以下」または「価格が50000円以上」の商品を取得してみましょう。

※横にスクロールできます

SELECT 商品名, 価格 FROM 商品 WHERE 価格 <= 3000 OR 価格 >= 50000;
📌 このSQLの意味
部分 意味
価格 <= 3000 条件1:価格が3000円以下
OR または(どちらかを満たす)
価格 >= 50000 条件2:価格が50000円以上

条件1または条件2のどちらかを満たすデータが取得されます。

📋 実行結果(3件)
商品名 価格
ノートPC 80000
マウス 1500
キーボード 3000

「安い商品」と「高い商品」の両方が表示されました。

💡 ORのイメージ

ORでつないだ条件は、どれか1つでもクリアすればOKです。

複数の条件を満たしていても問題ありません(両方満たすデータも取得されます)。

5-3. ANDとORの違い

📌 ANDとORの比較
演算子 意味 条件の扱い
AND かつ 全ての条件を満たす必要がある
OR または どれか1つでも満たせばOK

🔄 6. ANDとORを組み合わせる

6-1. カッコで優先順位を指定する

ANDとORを同時に使う場合、カッコ()で優先順位を明確にすることが重要です。

⚠️ なぜカッコが必要?

ANDはORより優先して処理されます。カッコがないと、意図しない結果になることがあります。

6-2. カッコなしの場合の問題

「カテゴリが電化製品で、価格が5000円以下、または在庫数が20個以上」を取得したいとします。

カッコなしで書くとどうなるでしょうか?

※横にスクロールできます

-- カッコなし(意図しない結果になる可能性あり) SELECT 商品名, 価格, カテゴリ, 在庫数 FROM 商品 WHERE カテゴリ = '電化製品' AND 価格 <= 5000 OR 在庫数 >= 20;
⚠️ この書き方の問題

ANDがORより優先されるため、以下のように解釈されます:

「(カテゴリが電化製品 かつ 価格が5000円以下)または(在庫数が20個以上)」

つまり、在庫数が20個以上なら、カテゴリが家具でも取得されてしまいます。

6-3. カッコありの正しい書き方

本来の意図「カテゴリが電化製品で、(価格が5000円以下 または 在庫数が20個以上)」を表現するには、カッコを使います。

※横にスクロールできます

-- カッコあり(正しい書き方) SELECT 商品名, 価格, カテゴリ, 在庫数 FROM 商品 WHERE カテゴリ = '電化製品' AND (価格 <= 5000 OR 在庫数 >= 20);
📌 このSQLの意味
  • 条件1:カテゴリが電化製品(必須)
  • 条件2:価格が5000円以下 または 在庫数が20個以上(どちらか)

条件1を満たし、かつ条件2のどちらかを満たすデータが取得されます。

📋 実行結果(2件)
商品名 価格 カテゴリ 在庫数
マウス 1500 電化製品 20
キーボード 3000 電化製品 15

両方とも「電化製品」です。家具は含まれていません。

💡 カッコを使うコツ

ANDとORを混在させるときは、迷ったらカッコをつけるのが安全です。

カッコをつけることで、SQLを読む人にも意図が明確に伝わります。

🚫 7. 条件を否定する(NOT)

7-1. NOTとは?

NOTは、条件を反転させます。「〜ではない」という意味です。

7-2. NOTを使ってみよう

カテゴリが「電化製品」ではない商品を取得してみましょう。

※横にスクロールできます

SELECT 商品名, カテゴリ FROM 商品 WHERE NOT カテゴリ = '電化製品';
📋 実行結果(4件)
商品名 カテゴリ
デスク 家具
チェア 家具
本棚 家具
ランプ 家具
💡 NOTと<>の関係

以下の2つは同じ意味です:

  • WHERE NOT カテゴリ = '電化製品'
  • WHERE カテゴリ <> '電化製品'

<>の方が短く書けるので、単純な「等しくない」の場合は<>を使うことが多いです。

7-3. NOTを複雑な条件に使う

NOTはカッコで囲んだ条件全体を否定することもできます。

※横にスクロールできます

-- 「電化製品で価格が10000円以上」ではない商品 SELECT 商品名, 価格, カテゴリ FROM 商品 WHERE NOT (カテゴリ = '電化製品' AND 価格 >= 10000);
📋 実行結果(8件)
商品名 価格 カテゴリ
マウス 1500 電化製品
デスク 15000 家具
チェア 12000 家具
キーボード 3000 電化製品
本棚 8000 家具
ランプ 4000 家具
スピーカー 6000 電化製品
ヘッドホン 9000 電化製品

「電化製品で10000円以上」のノートPC、モニターだけが除外されました。

📝 Step 5 のまとめ

✅ このステップで学んだこと
学んだこと 書き方 意味
WHERE句 WHERE 条件 条件に合うデータだけを取得
等しい = 値が一致する
より大きい > 値より大きい(その値は含まない)
より小さい < 値より小さい(その値は含まない)
以上 >= 値以上(その値も含む)
以下 <= 値以下(その値も含む)
等しくない <> または != 値が一致しない
AND 条件1 AND 条件2 両方の条件を満たす
OR 条件1 OR 条件2 どちらかの条件を満たす
NOT NOT 条件 条件を否定する
カッコ (条件) 優先順位を指定する
🎯 次のステップへ

WHERE句で条件指定ができるようになりました!

次のStep 6では、ORDER BYでデータを並び替えたり、LIMITで取得件数を制限したりする方法を学びます。「価格の安い順に10件だけ表示」といった操作ができるようになります。

📝 練習問題

WHERE句を使いこなせるように、たくさん練習しましょう!

問題 1 基本

家具カテゴリの商品

カテゴリが「家具」の商品を全て表示してください。

※横にスクロールできます

SELECT * FROM 商品 WHERE カテゴリ = '家具';

解説:文字列の値は必ずシングルクォートで囲みます。

問題 2 基本

在庫が15個以上

在庫数が15個以上の商品の商品名と在庫数を表示してください。

※横にスクロールできます

SELECT 商品名, 在庫数 FROM 商品 WHERE 在庫数 >= 15;

解説:>= は「以上」です。15も含まれます。

問題 3 基本

価格が10000円未満

価格が10000円未満の商品の商品名と価格を表示してください。

※横にスクロールできます

SELECT 商品名, 価格 FROM 商品 WHERE 価格 < 10000;

解説:< は「より小さい」です。10000は含まれません。

問題 4 基本

商品ID が 5 の商品

商品IDが5の商品を全て表示してください。

※横にスクロールできます

SELECT * FROM 商品 WHERE 商品ID = 5;

解説:数値の場合はクォートは不要です。

問題 5 応用

手頃な電化製品

カテゴリが「電化製品」で、かつ価格が10000円以下の商品を表示してください。

※横にスクロールできます

SELECT * FROM 商品 WHERE カテゴリ = '電化製品' AND 価格 <= 10000;

解説:ANDで2つの条件を「かつ」でつなぎます。

問題 6 応用

価格帯で絞り込み

価格が5000円以上15000円以下の商品を表示してください。

※横にスクロールできます

SELECT * FROM 商品 WHERE 価格 >= 5000 AND 価格 <= 15000;

解説:「〇〇以上△△以下」は、ANDで2つの条件をつなぎます。

問題 7 応用

高額商品または大量在庫

価格が20000円以上、または在庫数が15個以上の商品を表示してください。

※横にスクロールできます

SELECT * FROM 商品 WHERE 価格 >= 20000 OR 在庫数 >= 15;

解説:ORで「または」の条件を表現します。どちらかを満たせばOKです。

問題 8 応用

電化製品以外

カテゴリが「電化製品」ではない商品を表示してください。

※横にスクロールできます

-- 方法1: <>を使う SELECT * FROM 商品 WHERE カテゴリ <> '電化製品'; -- 方法2: NOTを使う SELECT * FROM 商品 WHERE NOT カテゴリ = '電化製品';

解説:どちらの書き方でも同じ結果になります。

問題 9 チャレンジ

複雑な条件(カッコを使う)

カテゴリが「電化製品」で、価格が5000円以下または在庫数が15個以上の商品を表示してください。

※横にスクロールできます

SELECT * FROM 商品 WHERE カテゴリ = '電化製品' AND (価格 <= 5000 OR 在庫数 >= 15);

解説:ORの部分をカッコで囲むことで、「電化製品の中で、価格が安いか在庫が多いもの」を取得できます。

問題 10 チャレンジ

中価格帯の家具

カテゴリが「家具」で、価格が5000円以上12000円以下の商品を表示してください。

※横にスクロールできます

SELECT * FROM 商品 WHERE カテゴリ = '家具' AND 価格 >= 5000 AND 価格 <= 12000;

解説:3つの条件をANDでつなぎます。全てを満たす商品だけが表示されます。

問題 11 チャレンジ

極端な価格帯

価格が3000円以下、または30000円以上の商品を表示してください。

※横にスクロールできます

SELECT * FROM 商品 WHERE 価格 <= 3000 OR 価格 >= 30000;

解説:「安い」か「高い」のどちらかを満たす商品を取得します。

問題 12 チャレンジ

在庫が少ない商品

在庫数が5個以下の商品の商品名、カテゴリ、在庫数を表示してください。

※横にスクロールできます

SELECT 商品名, カテゴリ, 在庫数 FROM 商品 WHERE 在庫数 <= 5;

解説:在庫管理でよく使う条件です。発注が必要な商品を見つけられます。

❓ よくある質問

Q1: WHEREとSELECTの順番は決まっていますか?

はい、決まっています。必ずSELECT → FROM → WHEREの順番で書きます。

WHEREをSELECTの前に書くとエラーになります。

Q2: 文字列の比較で大文字小文字は区別されますか?

SQLiteでは区別されません。'ABC'と'abc'は同じと見なされます。

ただし、他のデータベース(MySQL、PostgreSQLなど)では区別される場合があるので、注意が必要です。

Q3: ANDとORを混在させるとき、カッコは必須ですか?

必須ではありませんが、強く推奨します。

ANDはORより優先されるため、カッコがないと意図しない結果になることがあります。迷ったらカッコをつけましょう。

Q4: NULLの値を検索するにはどうすればいいですか?

IS NULLを使います。=ではNULLを検索できません。

※横にスクロールできます

-- NULLの行を検索 SELECT * FROM 商品 WHERE カテゴリ IS NULL; -- NULLではない行を検索 SELECT * FROM 商品 WHERE カテゴリ IS NOT NULL;

Q5: 複数の値のいずれかに一致するか調べるには?

ORを使う方法もありますが、IN演算子が便利です(Step 7で学習します)。

※横にスクロールできます

-- ORを使う方法 SELECT * FROM 商品 WHERE 商品ID = 1 OR 商品ID = 3 OR 商品ID = 5; -- INを使う方法(次のステップで学習) SELECT * FROM 商品 WHERE 商品ID IN (1, 3, 5);

Q6: WHEREで指定した条件は、元のテーブルに影響しますか?

影響しません。SELECTは「表示する」だけの命令です。

どんな条件を指定しても、元のテーブルのデータは変わりません。安心して色々試してください。

📝

学習メモ

SQL基礎 - Step 5

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE