SQLを使用してデータベースから特定の条件に合致するデータを抽出する際、欠かせないのが「比較演算子」です。
比較演算子を正しく使いこなすことで、膨大なデータの中から必要な情報を効率よく取得できるようになります。
本記事では、SQLの基本である比較演算子の種類から、実務で役立つ具体的な書き方、さらには応用的な活用方法までを詳しく解説します。
初心者の方はもちろん、基礎を再確認したいエンジニアの方も、ぜひ最後までお読みください。
SQL比較演算子の基本概念と役割
SQLの比較演算子とは、2つの値を比較してその結果を真(True)、偽(False)、または不明(Unknown)で返す記号のことです。
主にSELECT文のWHERE句で使用され、抽出したいデータの条件を指定するために用いられます。
例えば、「売上が10,000円以上のレコードのみを取得する」といった条件指定を行う際に比較演算子が必要となります。
比較演算子は、数値だけでなく文字列や日付の比較にも使用されるため、その特性を理解しておくことが重要です。
データベースの操作において、条件分岐やデータの絞り込みは最も頻繁に行われる作業の一つです。
まずは基本となる比較演算子の種類を一覧表で確認していきましょう。
主要なSQL比較演算子の一覧
SQLで標準的に使用される比較演算子を以下の表にまとめました。
| 演算子 | 意味 | 使用例 |
|---|---|---|
= | 等しい | age = 20 |
<> または != | 等しくない | status <> 'inactive' |
< | より小さい(未満) | price < 1000 |
> | より大きい(超過) | score > 80 |
<= | 以下 | stock <= 10 |
>= | 以上 | created_at >= '2026-01-01' |
多くのデータベースシステムでは、「等しくない」を表す際に <> が推奨されますが、!= も広くサポートされています。
等号演算子(=)の使い方
もっとも頻繁に使用されるのが、左辺と右辺が等しいかどうかを判定する = 演算子です。
特定のIDを持つユーザーの情報を取得したり、特定のカテゴリに属する商品を抽出したりする場合に使用します。
-- 社員IDが101の社員を検索する
SELECT employee_name, department
FROM employees
WHERE employee_id = 101;
employee_name | department
--------------+------------
田中 太郎 | 営業部
文字列を比較する際には、値を ' ' (シングルクォーテーション) で囲む必要がある点に注意してください。
不等号演算子(<> , !=)の使い方
「~ではない」という条件を指定したい場合には、<> または != を使用します。
例えば、「退職者以外の社員リスト」を取得する場合などに非常に便利です。
-- 部署が '総務部' ではない社員を検索する
SELECT employee_name, department
FROM employees
WHERE department <> '総務部';
employee_name | department
--------------+------------
佐藤 花子 | 開発部
鈴木 一郎 | 営業部
SQLの標準規格では <> が採用されているため、移植性を考慮する場合は <> を優先して使うのが一般的です。
大小比較演算子(<, >, <=, >=)の使い方
数値や日付の範囲を指定する際には、大小比較演算子が活躍します。
「1,000円以上の商品」や「昨日の12時以降に登録されたユーザー」といった条件を記述できます。
-- 価格が500円以上の商品名を取得する
SELECT product_name, price
FROM products
WHERE price >= 500;
product_name | price
-------------+-------
ランチBセット | 850
コーヒー | 500
「以上・以下」にはその数値自体が含まれ、「より大きい・より小さい」にはその数値が含まれないという違いを意識しましょう。
NULL値と比較演算子の注意点
SQLを扱う上で非常に重要なのが、NULL値は通常の比較演算子では判定できないという点です。
例えば、WHERE column = NULL と記述しても、期待した結果は得られません。
NULLは「値が存在しない状態」を指すため、等しいかどうかの比較ができないからです。
IS NULL と IS NOT NULL
NULL値を判定するためには、専用の演算子である IS NULL または IS NOT NULL を使用します。
-- 電話番号が登録されていない(NULLの)顧客を検索する
SELECT customer_name
FROM customers
WHERE phone_number IS NULL;
逆に、値が入っているデータだけを取得したい場合は IS NOT NULL を指定します。
-- メールアドレスが登録されている顧客のみを取得する
SELECT customer_name, email
FROM customers
WHERE email IS NOT NULL;
比較演算子の = や <> を使ってしまうと、文法エラーにはならなくても検索結果が0件になってしまうため、初心者が陥りやすいミスの一つです。
文字列と比較演算子の応用
比較演算子は数値だけでなく、文字列に対しても適用可能です。
文字列に < や > を使用すると、辞書順(五十音順やアルファベット順)で比較が行われます。
文字列の範囲検索
例えば、名前が「さ」から「そ」で始まるユーザーを抽出したい場合、以下のような記述が可能です。
-- 氏名が 'さ' 以降で始まるユーザーを検索する
SELECT user_name
FROM users
WHERE user_name >= 'さ';
ただし、文字列の比較ルールはデータベースの「コレーション(照合順序)」の設定に依存します。
大文字と小文字を区別するかどうか、濁音や半濁音をどう扱うかは環境によって異なるため注意してください。
日付と比較演算子の活用
実務で非常によく使われるのが、日付データの比較です。
最新の注文データだけを抽出したり、特定の期間内のログを分析したりする際に不可欠です。
-- 2026年5月1日以降の注文一覧を取得する
SELECT order_id, order_date
FROM orders
WHERE order_date >= '2026-05-01';
日付を指定する際も文字列と同様に ' ' で囲みます。
データベース製品によっては TO_DATE 関数の使用が推奨されることもありますが、基本的な比較演算子の使い方は変わりません。
複数の条件を組み合わせる論理演算子
比較演算子は、単独で使用するだけでなく、論理演算子(AND, OR, NOT)と組み合わせて複雑な条件を作成することが一般的です。
AND演算子による条件の絞り込み
複数の条件をすべて満たすデータを取得したい場合に AND を使います。
-- カテゴリが '家電' かつ 価格が 50000円以上の商品を検索する
SELECT product_name
FROM products
WHERE category = '家電'
AND price >= 50000;
OR演算子による条件の拡大
いずれかの条件を満たせば良い場合には OR を使います。
-- 部署が '開発部' または 'デザイン部' の社員を検索する
SELECT employee_name
FROM employees
WHERE department = '開発部'
OR department = 'デザイン部';
条件が複雑になる場合は、( ) を使って優先順位を明確にすることが、バグを防ぐコツです。
比較演算子に関連する便利な演算子
比較演算子の記述をよりシンプルにするための「特殊な比較演算子」も存在します。
BETWEEN演算子
「A以上B以下」という範囲を指定する場合、>= と <= を AND で繋ぐ代わりに BETWEEN を使用できます。
-- 価格が1000円から3000円の間の商品を取得する
SELECT product_name, price
FROM products
WHERE price BETWEEN 1000 AND 3000;
この書き方は直感的で読みやすいため、範囲指定の際によく好まれます。
IN演算子
特定の複数の値のいずれかに一致するかを判定する場合、OR を並べる代わりに IN を使います。
-- 複数のIDをまとめて指定して検索する
SELECT user_name
FROM users
WHERE user_id IN (1, 5, 10, 15);
IN演算子の中にサブクエリ(副問合せ)を記述する手法は、SQLの応用テクニックとして非常に強力です。
パフォーマンスを意識した比較演算子の使い方
大量のデータを扱うデータベースでは、比較演算子の使い方がクエリの実行速度に直結することがあります。
インデックスが貼られているカラムに対して比較を行う場合、一般的に = や < などの単純な比較演算子は非常に高速です。
しかし、左辺のカラムに対して関数を適用してしまうと、インデックスが効かなくなるため注意が必要です。
-- NG例:インデックスが使われない可能性がある
WHERE YEAR(registration_date) = 2026;
-- OK例:インデックスを有効活用できる
WHERE registration_date >= '2026-01-01' AND registration_date < '2027-01-01';
パフォーマンスを最適化するためには、「カラムそのものを加工せずに比較する」ことが鉄則です。
まとめ
SQLの比較演算子は、データベース操作におけるもっとも基本的かつ重要な要素です。
= や <> などの単純な記号から始まり、NULL値の特殊な扱い、文字列や日付の比較ルールまで、多岐にわたる知識が求められます。
また、実務においては BETWEEN や IN などの便利な演算子と論理演算子を組み合わせることで、より高度なデータ抽出が可能になります。
まずは基本の6種類を確実にマスターし、実際のクエリを書きながらその挙動を体感してみてください。
正しく比較演算子を使いこなせるようになれば、データの分析やアプリケーション開発の効率は劇的に向上するはずです。
今後さらに複雑なクエリに挑戦する際も、この基本を忘れずに活用していきましょう。
