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 を使用してください。
複合条件
AND、OR、NOT を括弧と組み合わせて評価順序を制御します:
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条件を使って、チケット検索機能を構築する場面。