SQLのORとANDで複数条件を指定する基本と応用的な使い方

SQLのOR演算子とAND演算子を使った複数条件の指定方法について、基本的な使い方から実践的なテクニックまで解説します。あなたのクエリはもっと効率的に書けるかも?

SQLのORとANDによる複数条件の指定方法

SQLの論理演算子
🔍
OR演算子の特徴

条件AまたはBのいずれかを満たすデータを抽出できます

🔄
AND演算子の特徴

条件AとBの両方を満たすデータを抽出します

パフォーマンスの違い

OR演算子はAND演算子と比べて処理が遅くなる傾向があります

SQLのOR演算子の基本的な使い方

OR演算子を使用すると、複数の条件のうちいずれかを満たすレコードを抽出することができます。以下のような構文で使用します:


SELECT * FROM テーブル名
WHERE 条件1 OR 条件2

 

具体的な例として、ユーザーテーブルから東京在住または30歳以上のユーザーを抽出する場合:


SELECT * FROM users
WHERE address = '東京' OR age >= 30

SQLのAND演算子との組み合わせテクニック

ANDとORを組み合わせる場合は、優先順位に注意が必要です。ANDはORよりも優先して評価されます。


SELECT * FROM products
WHERE (category = 'A' OR category = 'B')
AND price >= 1000

 

括弧を使用することで、意図した順序で条件を評価させることができます。

SQLのORを使用した効率的なIN句への書き換え

複数のOR条件を使用する場合、IN句を使用することでよりシンプルに記述できます:


-- OR演算子を使用した場合
SELECT * FROM products
WHERE category = 'A' 
   OR category = 'B'
   OR category = 'C'
-- IN句を使用した場合
SELECT * FROM products
WHERE category IN ('A', 'B', 'C')

SQLのORとNULL値の関係性と注意点

NULL値を含む条件をOR演算子で扱う場合は特別な注意が必要です。以下のような場合:


SELECT * FROM employees
WHERE department = 'Sales' 
   OR manager_id IS NULL

 

IS NULLを使用する必要があり、単純な等価比較(= NULL)では期待した結果が得られません。

SQLのORを使用したサブクエリの最適化テクニック

OR条件を含むクエリのパフォーマンスを向上させるためには、以下のような方法があります:


-- 非効率な方法
SELECT * FROM orders
WHERE status = 'pending' 
   OR (amount > 10000 AND priority = 'high')
-- 最適化した方法
SELECT * FROM orders
WHERE status = 'pending'
UNION
SELECT * FROM orders
WHERE amount > 10000 
  AND priority = 'high'

 

UNIONを使用することで、各条件を個別に評価し、インデックスを効率的に活用することができます。

 

このアプローチは特に大規模なデータセットを扱う場合に効果的です。