青の統計学-DS Playground-

WHERE: 必要な行だけに絞る

Stage 1 — 第2章 | データ分析基礎カリキュラム 推定学習時間:30〜40分 | 難易度:★☆☆☆☆


この章で学ぶこと

前章では、テーブルから必要な列を取り出す SELECTFROM を学びました。 しかし実務の分析では、すべての行を見ることはほとんどありません。

「完了した注文だけ」「東京都の顧客だけ」「1万円以上の注文だけ」のように、条件に合う行だけを取り出す必要があります。 そのために使うのが WHERE です。

この章を終えると、こんなことができるようになります:

  • 条件に合う行だけを取り出せる
  • 比較演算子、ANDOR を使い分けられる
  • INBETWEENLIKE の基本を説明できる
  • 分析対象を明確に絞るSQLを書ける

1. 実務シナリオ: 売上対象を定義する

あなたは「先月の売上を確認してほしい」と依頼されました。 このとき、すぐに SUM(total_amount) を書くのではなく、まず売上に含める行を決める必要があります。

たとえば、次の行を売上に含めるかどうかで結果は変わります。

行の種類 含めるかを決める理由
完了注文 通常は売上に含める
キャンセル注文 多くの場合は除外する
返品済み注文 売上から差し引くか確認する
テスト注文 実績から除外する
期間外の注文 対象月の定義に合わせて除外する

SQLでは、この判断の多くが WHERE に表れます。 つまり WHERE は、ただ行を減らすための句ではなく、「今回の分析対象は何か」を定義する句です。


2. WHEREは「行」を絞る

SELECT は列を選び、WHERE は行を絞ります。 この違いをまず押さえましょう。

SELECT
            order_id,
            order_date,
            total_amount
          FROM orders
          WHERE status = 'completed';
          

このSQLは、orders テーブルから statuscompleted の注文だけを取り出します。

役割
SELECT どの列を見るか
FROM どのテーブルを見るか
WHERE どの行を残すか

データ分析では、WHERE の条件が分析対象の定義になります。 たとえば「売上」を集計するとき、キャンセル注文を含めるのか除くのかで結果は大きく変わります。


3. 比較演算子で条件を書く

数値や日付、文字列を条件にするときは比較演算子を使います。

演算子 意味
= 等しい status = 'completed'
<> 等しくない status <> 'cancelled'
> より大きい total_amount > 10000
>= 以上 total_amount >= 10000
< より小さい price < 3000
<= 以下 price <= 3000

たとえば、1万円以上の注文だけを取り出すSQLは次のようになります。

SELECT
            order_id,
            customer_id,
            total_amount
          FROM orders
          WHERE total_amount >= 10000;
          

日付も条件にできます。

SELECT
            order_id,
            order_date,
            total_amount
          FROM orders
          WHERE order_date >= '2026-01-01';
          

日付の書き方はデータベースや列の型によって多少変わることがありますが、まずは「日付列にも条件をつけられる」と理解しておけば十分です。


4. ANDで条件を両方満たす行に絞る

複数の条件をすべて満たす行だけを残したいときは AND を使います。

SELECT
            order_id,
            order_date,
            total_amount
          FROM orders
          WHERE status = 'completed'
            AND total_amount >= 10000;
          

これは「完了済み」かつ「1万円以上」の注文だけを取り出します。

AND は分析対象を狭くします。 条件を増やすほど、残る行は少なくなるのが基本です。


5. ORでどちらかを満たす行に絞る

複数の条件のうち、どれか1つでも満たせばよい場合は OR を使います。

SELECT
            customer_id,
            customer_name,
            prefecture
          FROM customers
          WHERE prefecture = '東京都'
             OR prefecture = '神奈川県';
          

これは東京都または神奈川県の顧客を取り出します。

OR は分析対象を広げます。 条件を増やすほど、残る行は多くなるのが基本です。

ANDOR を混ぜるときは、読み間違いを防ぐためにかっこを使うと安全です。

SELECT
            order_id,
            status,
            total_amount
          FROM orders
          WHERE status = 'completed'
            AND (total_amount >= 10000 OR total_amount IS NULL);
          

この例の IS NULL は第5章で詳しく扱います。


6. INで候補リストに含まれる行を取る

同じ列に対して複数の候補を指定するときは、IN を使うと読みやすくなります。

SELECT
            customer_id,
            customer_name,
            prefecture
          FROM customers
          WHERE prefecture IN ('東京都', '神奈川県', '千葉県', '埼玉県');
          

これは首都圏の顧客を取り出す例です。 OR を何度も書くより、条件の意図がわかりやすくなります。


7. BETWEENで範囲を指定する

数値や日付が一定の範囲に入っているかを見たいときは、BETWEEN を使えます。

SELECT
            order_id,
            order_date,
            total_amount
          FROM orders
          WHERE total_amount BETWEEN 5000 AND 10000;
          

このSQLは、注文金額が5,000円以上10,000円以下の注文を取り出します。 BETWEEN A AND B は、基本的に両端を含む範囲です。

日付範囲にも使えます。

SELECT
            order_id,
            order_date,
            total_amount
          FROM orders
          WHERE order_date BETWEEN '2026-01-01' AND '2026-01-31';
          

ただし、日付時刻型で時刻まで入っている場合は境界の扱いに注意が必要です。 この入門では、まず範囲条件の読み方を押さえましょう。


8. LIKEで文字列パターンを探す

商品名や顧客名の一部に特定の文字が含まれる行を探すときは、LIKE を使います。

SELECT
            product_id,
            product_name,
            category
          FROM products
          WHERE product_name LIKE '%コーヒー%';
          

% は「任意の文字列」を表します。

条件 意味
LIKE 'A%' Aで始まる
LIKE '%A' Aで終わる
LIKE '%A%' Aを含む

文字列検索は便利ですが、大きなデータでは処理が重くなる場合があります。 実務では、検索対象の列やデータ量も意識します。


9. WHEREは分析の前提を決める

たとえば「今月の売上」を見るとします。 このとき、次の条件をどうするかで結果は変わります。

  • キャンセル注文を除くか
  • 返品済みの注文を除くか
  • テスト注文を除くか
  • どの日付列を使うか
  • 税込金額か税抜金額か

SQL上では、こうした判断の多くが WHERE に表れます。

SELECT
            order_id,
            order_date,
            total_amount
          FROM orders
          WHERE status = 'completed'
            AND order_date BETWEEN '2026-01-01' AND '2026-01-31';
          

このSQLは単なる抽出ではなく、「2026年1月の完了注文」という分析対象を定義しています。 データ分析では、条件の意味を言葉で説明できることが重要です。


10. 条件をつけたら件数を確認する

WHERE を書いた後は、対象データが何件残ったかを確認する習慣をつけましょう。 条件が厳しすぎると、分析対象がほとんど残らないことがあります。 逆に条件が緩すぎると、除外すべき行が混ざります。

SELECT COUNT(*) AS completed_order_count
          FROM orders
          WHERE status = 'completed';
          

期間条件も入れるなら、条件ごとに件数を確認すると安全です。

SELECT COUNT(*) AS target_order_count
          FROM orders
          WHERE status = 'completed'
            AND order_date BETWEEN '2026-01-01' AND '2026-01-31';
          

実務では、SQLの結果だけでなく「この条件で何件を対象にしたか」も一緒に報告できると信頼されます。


ミニ演習

次の条件をSQLにしてみましょう。

  1. orders から、完了済みの注文だけを取り出す。
  2. orders から、完了済みで、注文金額が10,000円以上の注文だけを取り出す。
  3. customers から、東京都・神奈川県・千葉県の顧客だけを取り出す。
  4. 3の条件で残った顧客数を target_customer_count として数える。

条件を書いたら、「何を含め、何を除いたか」を1文で説明してみましょう。


まとめ

構文 意味
WHERE 条件に合う行だけを残す WHERE status = 'completed'
AND すべての条件を満たす A AND B
OR いずれかの条件を満たす A OR B
IN 候補リストに含まれる prefecture IN (...)
BETWEEN 範囲に入る amount BETWEEN 5000 AND 10000
LIKE 文字列パターンに合う name LIKE '%コーヒー%'

この章のキーメッセージ: WHERE は、分析対象を決めるための句です。条件を正しく書くだけでなく、「その条件で何を含め、何を除いているか」を説明できるようにしましょう。


この章の確認

  1. SELECTWHERE は、それぞれ列と行のどちらを扱いますか?
  2. 完了済みで、かつ注文金額が5,000円以上の注文を取り出すSQLを書いてください。
  3. prefecture が東京都、神奈川県、千葉県のいずれかである顧客を取り出すには、どの構文を使うと読みやすいですか?
  4. LIKE '%セール%' はどのような文字列に一致しますか?

関連演習