【SQL】WHERE句の使い方:SQL条件指定の基本テクニック

【SQL】WHERE句の使い方:SQL条件指定の基本テクニック

以下のリンクから各セクションにジャンプできます。

はじめに

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句では、特定の範囲やリスト内の値に対して条件を設定するために、BETWEENIN演算子がよく使用されます。

例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 NULLIS NOT NULLを使用しましょう。
  • 論理演算子の優先順位: 複数の条件を組み合わせる際、ANDとORの優先順位に注意し、必要に応じて括弧でグループ化することが大切です。
  • SQLインジェクション: ユーザー入力を直接WHERE句に含める場合は、必ず適切なエスケープ処理やプリペアドステートメントを使用し、安全性を確保しましょう。
  • 全件更新・削除のリスク: WHERE句を省略すると、全レコードが対象となります。特にUPDATEやDELETE文では、条件指定の漏れに十分注意してください。

まとめ

WHERE句は、SQLにおいて非常に基本かつ重要な部分です。
データベースから必要な情報だけを効率よく抽出するためには、WHERE句を正しく理解し活用することが不可欠です。
本記事で紹介した基本構文や各種演算子、応用例を参考に、実際のクエリ作成に挑戦してみてください。
慣れてくると、より複雑な条件指定やサブクエリの利用など、高度なテクニックにも取り組むことができるようになります。

SQLの基本をしっかりと押さえ、安全かつ効率的なデータ操作を行いましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です