【SQL】WHERE句の使い方:SQL条件指定の基本テクニック
以下のリンクから各セクションにジャンプできます。
- はじめに
- WHERE句とは?
- WHERE句の基本構文
- 比較演算子の使い方
- 論理演算子(AND, OR, NOT)の活用
- LIKE句によるパターンマッチング
- BETWEEN, INなどの特殊演算子
- NULL値の扱い
- SELECT文での例
- UPDATE・DELETE文での例
- 応用例と注意点
- よくあるミスとベストプラクティス
- まとめ
はじめに
SQL(Structured Query Language)は、データベースからデータを抽出・更新するための強力なツールです。
その中でも「WHERE句」は、特定の条件に合致するレコードを抽出するための基本的かつ重要な機能です。
本記事では、初心者の方にも分かりやすいように、WHERE句の基本から応用までを詳しく解説します。
WHERE句とは?
WHERE句は、SQL文の中で条件を指定してデータを絞り込むために使用されます。
SELECT、UPDATE、DELETEなどの各種SQL文において、どのレコードを対象にするかを決定するためのフィルターの役割を果たします。
例えば、年齢が30歳以上のユーザーだけを取得したい場合に、WHERE句を使用して条件を設定します。
WHERE句の基本構文
WHERE句の基本的な構文は以下の通りです。
SELECT カラム名1, カラム名2, ... FROM テーブル名 WHERE 条件;
条件部分には、比較演算子や論理演算子を組み合わせて、取得したいレコードの条件を記述します。
比較演算子の使い方
WHERE句でよく使われる比較演算子には、以下のようなものがあります。
=
:等しい<>
または!=
:等しくない>
:より大きい<
:より小さい>=
:以上<=
:以下
例えば、商品価格が1000以上のレコードを取得する場合は、以下のようなSQL文になります。
SELECT * FROM products WHERE price >= 1000;
論理演算子(AND, OR, NOT)の活用
複数の条件を組み合わせる場合、論理演算子が役立ちます。
– AND:すべての条件が真である場合に合致
– OR:いずれかの条件が真であれば合致
– NOT:条件を否定する
例1:年齢が25以上かつ都市が「Tokyo」のユーザーを取得する場合
SELECT * FROM users WHERE age >= 25 AND city = 'Tokyo';
例2:ステータスが「active」または「pending」の注文を取得する場合
SELECT * FROM orders WHERE status = 'active' OR status = 'pending';
例3:年齢が30でないユーザーを取得する場合
SELECT * FROM users WHERE NOT age = 30;
LIKE句によるパターンマッチング
WHERE句では、文字列の部分一致検索に「LIKE」句を利用できます。
ワイルドカードとしては、%
(任意の文字列)と_
(任意の1文字)が使用されます。
例1:名前が「山田」で始まるレコードを取得する場合
SELECT * FROM customers WHERE name LIKE '山田%';
例2:メールアドレスに「@example.com」が含まれるレコードを取得する場合
SELECT * FROM users WHERE email LIKE '%@example.com';
BETWEEN, INなどの特殊演算子
WHERE句では、特定の範囲やリスト内の値に対して条件を設定するために、BETWEENやIN演算子がよく使用されます。
例1:価格が500以上1500以下の商品を取得する場合
SELECT * FROM products WHERE price BETWEEN 500 AND 1500;
例2:指定した複数のカテゴリに属する商品を取得する場合
SELECT * FROM products WHERE category IN ('Electronics', 'Books', 'Clothing');
NULL値の扱い
SQLでは、値が存在しないことを示すために「NULL」が使用されます。
NULL値を条件でチェックする場合、=
や<>
ではなく、IS NULL
またはIS NOT NULL
を使います。
例1:電話番号が登録されていないユーザーを取得する場合
SELECT * FROM users WHERE phone IS NULL;
例2:住所が登録されているユーザーを取得する場合
SELECT * FROM users WHERE address IS NOT NULL;
SELECT文での例
WHERE句は主にSELECT文で使用され、特定の条件に一致するレコードのみを抽出します。
ここではいくつかの具体例を紹介します。
例1:全ての「active」なユーザーを取得する
SELECT id, name, status FROM users WHERE status = 'active';
例2:価格が1000以上かつ在庫が10個以上の商品を取得する
SELECT product_id, product_name, price, stock FROM products WHERE price >= 1000 AND stock >= 10;
例3:作成日が2025年1月1日以降の注文を取得する
SELECT order_id, customer_id, order_date FROM orders WHERE order_date >= '2025-01-01';
UPDATE・DELETE文での例
WHERE句は、UPDATEやDELETE文においても非常に重要です。
誤った条件設定により、意図せず全レコードが更新または削除されるリスクがあるため、慎重に使用する必要があります。
例1:特定のユーザーのステータスを「inactive」に更新する
UPDATE users SET status = 'inactive' WHERE user_id = 123;
例2:在庫が0の商品を削除する
DELETE FROM products WHERE stock = 0;
応用例と注意点
WHERE句は基本的な条件指定だけでなく、複雑なクエリでも活用されます。
サブクエリを利用して、別のクエリ結果に基づいた条件を指定することも可能です。
例:他のテーブルの結果に基づいてユーザーを取得する
SELECT * FROM users WHERE department_id IN ( SELECT department_id FROM departments WHERE location = 'Osaka' );
また、複数の条件をグループ化する際は、括弧を用いて優先順位を明確にすることが重要です。
例:条件のグループ化
SELECT * FROM orders WHERE (status = 'pending' OR status = 'processing') AND order_date >= '2025-01-01';
よくあるミスとベストプラクティス
WHERE句を使用する際に初心者が陥りがちなミスと、それを防ぐためのポイントを以下にまとめます。
-
NULL値の比較: NULLは特殊な値であり、
=
や<>
で比較できません。必ずIS NULL
やIS NOT NULL
を使用しましょう。 - 論理演算子の優先順位: 複数の条件を組み合わせる際、ANDとORの優先順位に注意し、必要に応じて括弧でグループ化することが大切です。
- SQLインジェクション: ユーザー入力を直接WHERE句に含める場合は、必ず適切なエスケープ処理やプリペアドステートメントを使用し、安全性を確保しましょう。
- 全件更新・削除のリスク: WHERE句を省略すると、全レコードが対象となります。特にUPDATEやDELETE文では、条件指定の漏れに十分注意してください。
まとめ
WHERE句は、SQLにおいて非常に基本かつ重要な部分です。
データベースから必要な情報だけを効率よく抽出するためには、WHERE句を正しく理解し活用することが不可欠です。
本記事で紹介した基本構文や各種演算子、応用例を参考に、実際のクエリ作成に挑戦してみてください。
慣れてくると、より複雑な条件指定やサブクエリの利用など、高度なテクニックにも取り組むことができるようになります。
SQLの基本をしっかりと押さえ、安全かつ効率的なデータ操作を行いましょう。