初心者でも理解できる!SQLのWHERE句の使い方と実践的な活用法

データベース・SQL

データベースから必要な情報を取り出すために使う「SQL(エスキューエル)」。

その中でも、特によく使われるのが「WHERE句」です。

でも、実際に使うとなると「どんなときに使うの?」「複雑な条件はどう書けばいいの?」と悩む人も多いはずです。

この記事では、SQLを初めて学ぶ人でもわかるように、WHERE句の基本から応用まで丁寧に説明します。

実際の仕事で使える例や、よくある間違いも紹介するので、読み終わったらすぐに使えるようになりますよ。

スポンサーリンク

SQLの基本とWHERE句について

SQLって何?

SQL(エスキューエル)は、データベースを操作するための言語です。主に次の4つのことができます:

  • データを取得する
  • データを登録する
  • データを更新する
  • データを削除する

WHERE句の役割

WHERE句は、特定の条件に合うデータだけを取り出すときに使います。

例えば、たくさんの会員情報から「20歳以上の人だけ」を取り出したいとき、WHERE句を使って条件を指定します。

基本的な書き方

基本の形

SELECT 列名 FROM テーブル名 WHERE 条件;

実際の例

SELECT * FROM users WHERE age >= 20;

この文は「usersテーブルから、年齢が20歳以上の人のデータを全て取り出す」という意味です。

WHERE句で使える条件の種類

比較演算子

数値や文字を比べるときに使います。

記号意味
=等しいage = 20
<> または !=等しくないage <> 20
>より大きいprice > 1000
<より小さいprice < 1000
>=以上age >= 20
<=以下age <= 65

例:1000円より高い商品を探す

SELECT * FROM products WHERE price > 1000;

論理演算子

複数の条件を組み合わせるときに使います。

AND(かつ) すべての条件を満たすもの

SELECT * FROM users WHERE age >= 20 AND gender = 'female';

(20歳以上で、かつ女性のユーザー)

OR(または) どれかの条件を満たすもの

SELECT * FROM products WHERE category = '家電' OR category = '家具';

(家電または家具のカテゴリの商品)

NOT(〜でない) 条件を否定するとき

SELECT * FROM users WHERE NOT age < 18;

(18歳未満でないユーザー、つまり18歳以上)

特殊な条件

IN(リストから選択) 複数の値から選ぶとき

SELECT * FROM products WHERE category IN ('家電', '家具', '衣類');

BETWEEN(範囲指定) ある範囲内の値を指定するとき

SELECT * FROM sales WHERE date BETWEEN '2023-01-01' AND '2023-12-31';

(2023年1月1日から12月31日まで)

LIKE(あいまい検索) 部分的に一致するものを探すとき

SELECT * FROM employees WHERE name LIKE '佐藤%';

(「佐藤」で始まる名前の社員)

ワイルドカード

  • %:何文字でもOK
  • _:1文字だけ

IS NULL(値なし) データが入っていない項目を探すとき

SELECT * FROM customers WHERE email IS NULL;

実際の仕事で使える例

お客さんの購入履歴を調べる

特定のお客さんが5000円以上買った履歴を見たいとき:

SELECT * FROM purchases 
WHERE customer_id = 123 AND amount >= 5000;

退職した社員の一覧を作る

退職日が入力されている社員を探すとき:

SELECT * FROM employees 
WHERE resignation_date IS NOT NULL;

キャンペーン期間中の売上を確認する

春セールの期間中に売れた商品を調べるとき:

SELECT * FROM sales 
WHERE campaign = '春セール' 
AND sale_date BETWEEN '2025-03-01' AND '2025-03-31';

複数条件を組み合わせる

20代の女性で、東京に住んでいる会員を探すとき:

SELECT * FROM members 
WHERE age >= 20 AND age <= 29 
AND gender = '女性' 
AND address LIKE '%東京%';

よくある間違いと対処法

文字列の書き方を間違える

間違い

SELECT * FROM users WHERE name = 田中;

正しい書き方

SELECT * FROM users WHERE name = '田中';

文字列は必ずシングルクォート(’)で囲みます。

NULLの扱いを間違える

間違い

SELECT * FROM customers WHERE email = NULL;

正しい書き方

SELECT * FROM customers WHERE email IS NULL;

NULLを調べるときは「IS NULL」を使います。

括弧の使い方を間違える

間違い(意図しない結果になる)

SELECT * FROM users 
WHERE age >= 18 AND age <= 25 OR gender = '女性';

正しい書き方

SELECT * FROM users 
WHERE (age >= 18 AND age <= 25) OR gender = '女性';

ANDとORを組み合わせるときは、括弧で優先順位を明確にします。

大文字と小文字を間違える

データベースによって違いがある

  • MySQLでは通常、大文字と小文字を区別しない
  • PostgreSQLでは大文字と小文字を区別する

確実にするには、UPPER関数やLOWER関数を使います:

SELECT * FROM users WHERE UPPER(name) = UPPER('田中');

実践的なテクニック

複雑な条件を読みやすく書く

長い条件は改行して見やすくします:

SELECT * FROM orders 
WHERE (status = '発送済み' OR status = '配達完了') 
  AND order_date >= '2025-01-01' 
  AND total_amount > 10000;

パフォーマンスを考えた書き方

よく検索される列にはインデックスを付けて、検索を高速化します。

-- customer_idにインデックスがある場合は高速
SELECT * FROM orders WHERE customer_id = 123;

日付の範囲検索

日付を扱うときは、時間も考慮します:

-- その日の0時から23時59分まで
SELECT * FROM orders 
WHERE order_date >= '2025-01-01' 
  AND order_date < '2025-01-02';

まとめ

WHERE句は、SQLの中でも特に重要な機能です。シンプルな条件から複雑な組み合わせまで、さまざまな場面で活用できます。

覚えておきたいポイント

  • 文字列はシングルクォートで囲む
  • NULLの確認は「IS NULL」を使う
  • 複雑な条件は括弧で優先順位を明確にする
  • 実際のデータで試しながら覚える

この記事を参考に、ぜひ実際のデータベースでWHERE句を使ってみてください。

最初は簡単な条件から始めて、少しずつ複雑な条件にチャレンジしていけば、必ず使いこなせるようになります。

コメント

タイトルとURLをコピーしました