SQL WHERE句によるフィルタリング技法

SQL WHERE句の比較演算子、BETWEEN、IN、LIKE、IS NULL、AND/ORによる複合条件を習得し、クエリで正確なデータ抽出を行う方法を解説します。

Query

詳細な説明

SQL WHERE句によるフィルタリング技法

WHERE 句は指定した条件に基づいて行をフィルタリングし、条件を満たすデータのみを取得できるようにします。グルーピングや集約の前に適用されます。

基本的な比較演算子

SELECT * FROM products
WHERE price > 100
  AND category = 'Electronics'
  AND stock <> 0;

使用可能な演算子: =<> または !=<><=>=

BETWEENによる範囲フィルタリング

SELECT * FROM orders
WHERE order_date BETWEEN '2025-01-01' AND '2025-12-31';

BETWEEN は両端を含みます。数値、日付、文字列で使用できます。

INによるセットメンバーシップ

SELECT * FROM employees
WHERE department IN ('Engineering', 'Design', 'Product');

IN は複数の OR 条件よりも簡潔で、サブクエリも受け入れます。

LIKEによるパターンマッチング

SELECT * FROM users
WHERE email LIKE '%@gmail.com'
  AND name LIKE 'J___';

% は任意の文字列に一致し、_ は正確に1文字に一致します。

NULLの処理

SELECT * FROM contacts
WHERE phone IS NOT NULL
  AND fax IS NULL;

= NULL<> NULL は使わず、必ず IS NULL または IS NOT NULL を使用してください。

複合条件

ANDORNOT を括弧と組み合わせて評価順序を制御します:

SELECT * FROM products
WHERE (category = 'Books' OR category = 'Music')
  AND NOT discontinued
  AND price BETWEEN 10 AND 50;

パフォーマンスのヒント

  • インデックスが設定されたカラムを関数でラップすると(WHERE YEAR(date_col) = 2025)、インデックスが使用されなくなるので避ける
  • 大規模なサブクエリでは IN より EXISTS を使用するとパフォーマンスが向上する
  • インデックスの使用を妨げる暗黙的な型変換に注意する
  • 可能であれば、最も選択性の高い条件を先に記述する

WHERE句は行をフィルタリングするための主要な仕組みであり、効率的で正確なSQLクエリを書くために不可欠です。

ユースケース

サポートチームが、ステータス、優先度、日付範囲、担当者による複合WHERE条件を使って、チケット検索機能を構築する場面。

Try It — SQL Formatter

フルツールを開く