🎯 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句の基本構文
SELECT 列名 FROM テーブル名 WHERE 条件;
| 単語 | 意味 | 役割 |
|---|---|---|
| SELECT | 選ぶ | どの列を取り出すか |
| FROM | 〜から | どのテーブルから |
| WHERE | 〜の場所で、〜の条件で | どんな条件で絞り込むか |
つまり「〇〇テーブルから、△△という条件に合うデータの、□□列を表示して」という意味です。
1-3. WHERE句の処理順序
SQLは書いた順番通りには処理されません。実際の処理順序は以下の通りです。
- FROM – まずテーブルを特定
- WHERE – 条件に合う行だけを選ぶ
- SELECT – 必要な列だけを取り出す
つまり、「テーブルの中から条件に合う行を見つけて、その中から必要な列を取り出す」という流れです。
📊 2. 練習用テーブルの準備
2-1. テーブルを作成する
Step 4と同じ商品テーブルを使いますが、データを10件に増やします。以下のSQLを順番に実行してください。
ステップ1:テーブルを作成
※横にスクロールできます
ステップ2:データを追加
※横にスクロールできます
2-2. 作成したテーブルの内容
| 商品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. 比較演算子とは?
比較演算子は、値を比較するための記号です。「等しい」「より大きい」「以下」などの条件を表現します。
| 演算子 | 意味 | 使用例 |
|---|---|---|
| = | 等しい | 価格 = 5000 |
| > | より大きい | 価格 > 10000 |
| < | より小さい | 在庫数 < 10 |
| >= | 以上 | 価格 >= 5000 |
| <= | 以下 | 在庫数 <= 10 |
| <> または != | 等しくない | カテゴリ <> ‘家具’ |
3-2. =(等しい)を使う
=は、指定した値と完全に一致するデータを取得します。
カテゴリが「電化製品」の商品を取得してみましょう。
※横にスクロールできます
| 部分 | 意味 |
|---|---|
SELECT * |
全ての列を選ぶ |
FROM 商品 |
商品テーブルから |
WHERE カテゴリ = '電化製品' |
カテゴリが「電化製品」に等しい行だけ |
| 商品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円を含まない)商品を取得してみましょう。
※横にスクロールできます
| 商品名 | 価格 |
|---|---|
| ノートPC | 80000 |
| デスク | 15000 |
| チェア | 12000 |
| モニター | 25000 |
10000円ちょうどの商品があれば、それは含まれません。
次に、在庫数が10個より少ない商品を取得してみましょう。
※横にスクロールできます
| 商品名 | 在庫数 |
|---|---|
| ノートPC | 5 |
| デスク | 3 |
| チェア | 8 |
| 本棚 | 5 |
| スピーカー | 7 |
在庫数が10個ちょうどの「モニター」は含まれていません。
3-4. >=(以上)と <=(以下)を使う
>=は「以上」、<=は「以下」を意味します。
ポイント:「以上」「以下」は、その値自体も含まれます。
価格が10000円以上(10000円を含む)の商品を取得してみましょう。
※横にスクロールできます
| 商品名 | 価格 |
|---|---|
| ノートPC | 80000 |
| デスク | 15000 |
| チェア | 12000 |
| モニター | 25000 |
10000円ちょうどの商品があれば、それも含まれます。
| 演算子 | 意味 | 10000を条件にした場合 |
|---|---|---|
| > | より大きい | 10001以上が対象(10000は含まない) |
| >= | 以上 | 10000以上が対象(10000も含む) |
| < | より小さい | 9999以下が対象(10000は含まない) |
| <= | 以下 | 10000以下が対象(10000も含む) |
3-5. <>(等しくない)を使う
<>は「等しくない」を意味します。!=と書くこともできます。
カテゴリが「電化製品」ではない商品を取得してみましょう。
※横にスクロールできます
| 商品名 | カテゴリ |
|---|---|
| デスク | 家具 |
| チェア | 家具 |
| 本棚 | 家具 |
| ランプ | 家具 |
電化製品以外、つまり「家具」だけが表示されました。
🔗 4. 複数の条件を組み合わせる(AND)
4-1. ANDとは?
ANDは、「AかつB」という意味で、複数の条件を同時に満たすデータだけを取得します。
「価格が5000円以下」かつ「評価が★4以上」で絞り込むと、両方の条件を満たす商品だけが表示されますよね。
ANDはまさにこの「かつ」を表します。
4-2. ANDを使ってみよう
「カテゴリが電化製品」かつ「価格が10000円以下」の商品を取得してみましょう。
※横にスクロールできます
| 部分 | 意味 |
|---|---|
カテゴリ = '電化製品' |
条件1:カテゴリが電化製品 |
AND |
かつ(両方満たす) |
価格 <= 10000 |
条件2:価格が10000円以下 |
条件1と条件2の両方を満たすデータだけが取得されます。
| 商品名 | 価格 | カテゴリ |
|---|---|---|
| マウス | 1500 | 電化製品 |
| キーボード | 3000 | 電化製品 |
| スピーカー | 6000 | 電化製品 |
| ヘッドホン | 9000 | 電化製品 |
電化製品で、かつ価格が10000円以下のものだけが表示されました。
4-3. 3つ以上の条件をANDでつなぐ
ANDは何個でもつなげられます。3つの条件を指定してみましょう。
※横にスクロールできます
- 条件1:カテゴリが電化製品
- 条件2:価格が5000円以上
- 条件3:在庫数が10個以上
3つ全てを満たすデータだけが取得されます。
| 商品名 | 価格 | カテゴリ | 在庫数 |
|---|---|---|---|
| モニター | 25000 | 電化製品 | 10 |
| ヘッドホン | 9000 | 電化製品 | 18 |
ANDでつないだ条件は、全てをクリアしなければならない関門のようなものです。
1つでもクリアできなければ、そのデータは結果に含まれません。
🔀 5. いずれかの条件を満たす(OR)
5-1. ORとは?
ORは、「AまたはB」という意味で、いずれかの条件を満たすデータを取得します。
「カテゴリがPC周辺機器」または「カテゴリがオーディオ」で絞り込むと、どちらかに該当する商品が表示されますよね。
ORはこの「または」を表します。
5-2. ORを使ってみよう
「価格が3000円以下」または「価格が50000円以上」の商品を取得してみましょう。
※横にスクロールできます
| 部分 | 意味 |
|---|---|
価格 <= 3000 |
条件1:価格が3000円以下 |
OR |
または(どちらかを満たす) |
価格 >= 50000 |
条件2:価格が50000円以上 |
条件1または条件2のどちらかを満たすデータが取得されます。
| 商品名 | 価格 |
|---|---|
| ノートPC | 80000 |
| マウス | 1500 |
| キーボード | 3000 |
「安い商品」と「高い商品」の両方が表示されました。
ORでつないだ条件は、どれか1つでもクリアすればOKです。
複数の条件を満たしていても問題ありません(両方満たすデータも取得されます)。
5-3. ANDとORの違い
| 演算子 | 意味 | 条件の扱い |
|---|---|---|
| AND | かつ | 全ての条件を満たす必要がある |
| OR | または | どれか1つでも満たせばOK |
🔄 6. ANDとORを組み合わせる
6-1. カッコで優先順位を指定する
ANDとORを同時に使う場合、カッコ()で優先順位を明確にすることが重要です。
ANDはORより優先して処理されます。カッコがないと、意図しない結果になることがあります。
6-2. カッコなしの場合の問題
「カテゴリが電化製品で、価格が5000円以下、または在庫数が20個以上」を取得したいとします。
カッコなしで書くとどうなるでしょうか?
※横にスクロールできます
ANDがORより優先されるため、以下のように解釈されます:
「(カテゴリが電化製品 かつ 価格が5000円以下)または(在庫数が20個以上)」
つまり、在庫数が20個以上なら、カテゴリが家具でも取得されてしまいます。
6-3. カッコありの正しい書き方
本来の意図「カテゴリが電化製品で、(価格が5000円以下 または 在庫数が20個以上)」を表現するには、カッコを使います。
※横にスクロールできます
- 条件1:カテゴリが電化製品(必須)
- 条件2:価格が5000円以下 または 在庫数が20個以上(どちらか)
条件1を満たし、かつ条件2のどちらかを満たすデータが取得されます。
| 商品名 | 価格 | カテゴリ | 在庫数 |
|---|---|---|---|
| マウス | 1500 | 電化製品 | 20 |
| キーボード | 3000 | 電化製品 | 15 |
両方とも「電化製品」です。家具は含まれていません。
ANDとORを混在させるときは、迷ったらカッコをつけるのが安全です。
カッコをつけることで、SQLを読む人にも意図が明確に伝わります。
🚫 7. 条件を否定する(NOT)
7-1. NOTとは?
NOTは、条件を反転させます。「〜ではない」という意味です。
7-2. NOTを使ってみよう
カテゴリが「電化製品」ではない商品を取得してみましょう。
※横にスクロールできます
| 商品名 | カテゴリ |
|---|---|
| デスク | 家具 |
| チェア | 家具 |
| 本棚 | 家具 |
| ランプ | 家具 |
以下の2つは同じ意味です:
WHERE NOT カテゴリ = '電化製品'WHERE カテゴリ <> '電化製品'
<>の方が短く書けるので、単純な「等しくない」の場合は<>を使うことが多いです。
7-3. NOTを複雑な条件に使う
NOTはカッコで囲んだ条件全体を否定することもできます。
※横にスクロールできます
| 商品名 | 価格 | カテゴリ |
|---|---|---|
| マウス | 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句を使いこなせるように、たくさん練習しましょう!
家具カテゴリの商品
カテゴリが「家具」の商品を全て表示してください。
※横にスクロールできます
解説:文字列の値は必ずシングルクォートで囲みます。
在庫が15個以上
在庫数が15個以上の商品の商品名と在庫数を表示してください。
※横にスクロールできます
解説:>= は「以上」です。15も含まれます。
価格が10000円未満
価格が10000円未満の商品の商品名と価格を表示してください。
※横にスクロールできます
解説:< は「より小さい」です。10000は含まれません。
商品ID が 5 の商品
商品IDが5の商品を全て表示してください。
※横にスクロールできます
解説:数値の場合はクォートは不要です。
手頃な電化製品
カテゴリが「電化製品」で、かつ価格が10000円以下の商品を表示してください。
※横にスクロールできます
解説:ANDで2つの条件を「かつ」でつなぎます。
価格帯で絞り込み
価格が5000円以上15000円以下の商品を表示してください。
※横にスクロールできます
解説:「〇〇以上△△以下」は、ANDで2つの条件をつなぎます。
高額商品または大量在庫
価格が20000円以上、または在庫数が15個以上の商品を表示してください。
※横にスクロールできます
解説:ORで「または」の条件を表現します。どちらかを満たせばOKです。
電化製品以外
カテゴリが「電化製品」ではない商品を表示してください。
※横にスクロールできます
解説:どちらの書き方でも同じ結果になります。
複雑な条件(カッコを使う)
カテゴリが「電化製品」で、価格が5000円以下または在庫数が15個以上の商品を表示してください。
※横にスクロールできます
解説:ORの部分をカッコで囲むことで、「電化製品の中で、価格が安いか在庫が多いもの」を取得できます。
中価格帯の家具
カテゴリが「家具」で、価格が5000円以上12000円以下の商品を表示してください。
※横にスクロールできます
解説:3つの条件をANDでつなぎます。全てを満たす商品だけが表示されます。
極端な価格帯
価格が3000円以下、または30000円以上の商品を表示してください。
※横にスクロールできます
解説:「安い」か「高い」のどちらかを満たす商品を取得します。
在庫が少ない商品
在庫数が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を検索できません。
※横にスクロールできます
Q5: 複数の値のいずれかに一致するか調べるには?
ORを使う方法もありますが、IN演算子が便利です(Step 7で学習します)。
※横にスクロールできます
Q6: WHEREで指定した条件は、元のテーブルに影響しますか?
影響しません。SELECTは「表示する」だけの命令です。
どんな条件を指定しても、元のテーブルのデータは変わりません。安心して色々試してください。
学習メモ
SQL基礎 - Step 5