SQLを使ってデータを検索するとき、避けて通れないのが「比較演算子」です。
例えば「売上が1000円以上の商品を表示したい」「登録日が今日より前のデータを取り出したい」といった条件は、すべて比較演算子で表現します。
この記事では、SQLの基本的な比較演算子をわかりやすく紹介し、それぞれの使い方や実例を詳しく解説します。
初心者の方でも無理なく理解できる内容なので、ぜひ参考にしてください。
比較演算子って何?

比較演算子の役割
比較演算子とは、SQLで2つの値を比べて条件を決めるための記号です。
主にWHERE句の中で使われ、特定の条件に合うデータだけを取り出すときに使います。
どんなときに使うの?
数値の大小を比べる
- 「価格が1000円以上の商品」
- 「年齢が20歳未満の人」
日付の前後を判定する
- 「今日より前に登録されたデータ」
- 「2024年以降の注文」
文字列が同じかチェックする
- 「名前が田中の人」
- 「ステータスが完了ではないもの」
基本的な構文
SELECT 列名 FROM テーブル名 WHERE 列名 比較演算子 値;
例
SELECT * FROM products WHERE price >= 1000;
この文は「productsテーブルから、価格が1000円以上の商品を全て取り出す」という意味です。
基本の比較演算子一覧

SQLで使える基本的な比較演算子は7つあります。
演算子 | 意味 | 読み方 | 例 |
---|---|---|---|
= | 等しい | イコール | WHERE age = 20 |
<> | 等しくない | ノットイコール | WHERE status <> '完了' |
!= | 等しくない(別の書き方) | ノットイコール | WHERE category != '本' |
> | より大きい | より大きい | WHERE score > 80 |
< | より小さい | より小さい | WHERE stock < 50 |
>= | 以上 | 以上 | WHERE age >= 18 |
<= | 以下 | 以下 | WHERE discount <= 30 |
それぞれの使い方を詳しく見てみよう
=(等しい)
指定した値と完全に同じデータを探します。
数値の場合
SELECT * FROM products WHERE price = 1000;
価格がちょうど1000円の商品を取得
文字列の場合
SELECT * FROM users WHERE name = '田中太郎';
名前が「田中太郎」の人を取得
日付の場合
SELECT * FROM orders WHERE order_date = '2025-06-03';
注文日が2025年6月3日のデータを取得
<>と!=(等しくない)
指定した値と違うデータを探します。<>
と!=
は同じ意味です。
-- どちらも同じ意味
SELECT * FROM products WHERE status <> '売り切れ';
SELECT * FROM products WHERE status != '売り切れ';
実際の使用例
-- 未完了のタスクを取得
SELECT * FROM tasks WHERE status <> '完了';
-- 在庫がある商品を取得
SELECT * FROM products WHERE stock != 0;
>(より大きい)
指定した値より大きいデータを探します。
-- 1000円より高い商品
SELECT * FROM products WHERE price > 1000;
-- 18歳より年上の人
SELECT * FROM users WHERE age > 18;
-- 昨日以降の注文(昨日は含まない)
SELECT * FROM orders WHERE order_date > '2025-06-02';
<(より小さい)
指定した値より小さいデータを探します。
-- 1000円未満の商品
SELECT * FROM products WHERE price < 1000;
-- 在庫が少ない商品(10個未満)
SELECT * FROM products WHERE stock < 10;
-- 今年より前のデータ
SELECT * FROM records WHERE created_date < '2025-01-01';
>=(以上)
指定した値以上(その値も含む)のデータを探します。
-- 1000円以上の商品(1000円も含む)
SELECT * FROM products WHERE price >= 1000;
-- 成人以上の人(18歳も含む)
SELECT * FROM users WHERE age >= 18;
-- 今月以降の予定
SELECT * FROM events WHERE event_date >= '2025-06-01';
<=(以下)
指定した値以下(その値も含む)のデータを探します。
-- 1000円以下の商品(1000円も含む)
SELECT * FROM products WHERE price <= 1000;
-- 高校生以下の人(18歳も含む)
SELECT * FROM users WHERE age <= 18;
-- 今月末までの締切
SELECT * FROM tasks WHERE deadline <= '2025-06-30';
論理演算子と組み合わせる方法

比較演算子だけでは1つの条件しか指定できませんが、論理演算子と組み合わせることで、複雑な条件を作れます。
AND(かつ):すべての条件を満たす
-- 20歳以上で、かつ女性のユーザー
SELECT * FROM users
WHERE age >= 20 AND gender = '女性';
-- 価格が1000円以上で、かつ在庫が10個以上の商品
SELECT * FROM products
WHERE price >= 1000 AND stock >= 10;
-- 今年のデータで、かつステータスが完了のもの
SELECT * FROM orders
WHERE order_date >= '2025-01-01' AND status = '完了';
OR(または):どれかの条件を満たす
-- カテゴリが「本」または「雑誌」の商品
SELECT * FROM products
WHERE category = '本' OR category = '雑誌';
-- 価格が500円以下、または割引率が50%以上の商品
SELECT * FROM products
WHERE price <= 500 OR discount >= 50;
-- 優先度が「高」または「緊急」のタスク
SELECT * FROM tasks
WHERE priority = '高' OR priority = '緊急';
NOT(〜でない):条件を否定する
-- 価格が0円でない商品
SELECT * FROM products
WHERE NOT price = 0;
-- ステータスが「完了」でないタスク
SELECT * FROM tasks
WHERE NOT status = '完了';
括弧を使って優先順位を明確にする
複数の条件を組み合わせるときは、括弧を使って優先順位をはっきりさせましょう。
-- 発送済みまたは完了で、かつ今月の注文
SELECT * FROM orders
WHERE (status = '発送済み' OR status = '完了')
AND order_date >= '2025-06-01';
-- 安い商品(500円以下)または高割引商品(30%以上)で、在庫があるもの
SELECT * FROM products
WHERE (price <= 500 OR discount >= 30)
AND stock > 0;
実際の仕事で使える例
ECサイトの商品検索
-- セール対象商品を検索
-- (定価1000円以上で、割引率20%以上、在庫あり)
SELECT product_name, price, discount, stock
FROM products
WHERE price >= 1000
AND discount >= 20
AND stock > 0;
顧客管理システム
-- アクティブな顧客を検索
-- (最終ログインが30日以内で、購入回数が5回以上)
SELECT customer_name, last_login, purchase_count
FROM customers
WHERE last_login >= '2025-05-04' -- 30日前
AND purchase_count >= 5;
売上分析
-- 高額取引を分析
-- (今年の売上で、10万円以上の取引)
SELECT order_id, customer_name, total_amount, order_date
FROM orders
WHERE order_date >= '2025-01-01'
AND total_amount >= 100000
ORDER BY total_amount DESC;
在庫管理
-- 補充が必要な商品をチェック
-- (在庫が10個以下で、人気商品(月間売上50個以上))
SELECT product_name, stock, monthly_sales
FROM products
WHERE stock <= 10
AND monthly_sales >= 50
ORDER BY stock ASC;
よくある間違いと注意点

=と==を混同する
間違い
-- これはエラーになります
SELECT * FROM users WHERE age == 20;
正しい書き方
SELECT * FROM users WHERE age = 20;
SQLでは等号は=
ひとつだけです。プログラミング言語の==
と混同しないよう注意しましょう。
NULLの扱い方を間違える
間違い
-- これは正しく動きません
SELECT * FROM users WHERE email = NULL;
正しい書き方
-- NULLをチェックするときは IS NULL を使う
SELECT * FROM users WHERE email IS NULL;
-- NULLでないことをチェックするときは IS NOT NULL
SELECT * FROM users WHERE email IS NOT NULL;
なぜ= NULL
がダメなのか?
NULLは「値が存在しない」という特別な状態なので、普通の比較演算子では比較できません。
文字列の大文字・小文字に注意
データベースによって、大文字と小文字の扱いが違います。
MySQLの場合(通常は区別しない)
-- これらは同じ結果になることが多い
SELECT * FROM users WHERE name = 'TANAKA';
SELECT * FROM users WHERE name = 'tanaka';
PostgreSQLの場合(区別する)
-- これらは違う結果になる
SELECT * FROM users WHERE name = 'TANAKA'; -- 大文字のTANAKAだけ
SELECT * FROM users WHERE name = 'tanaka'; -- 小文字のtanakaだけ
安全な書き方
-- 大文字に統一して比較
SELECT * FROM users WHERE UPPER(name) = UPPER('tanaka');
日付の書き方に注意
日付を文字列で指定するとき、フォーマットに気をつけましょう。
推奨される書き方
-- 国際標準形式(YYYY-MM-DD)
SELECT * FROM orders WHERE order_date >= '2025-06-03';
避けたい書き方
-- 地域によって解釈が変わる可能性がある
SELECT * FROM orders WHERE order_date >= '06/03/2025';
数値と文字列の比較
数値を文字列として比較すると、予想外の結果になることがあります。
問題のある例
-- 文字列として比較されると '9' > '10' になってしまう
SELECT * FROM products WHERE price_text > '10';
正しい例
-- 数値として比較する
SELECT * FROM products WHERE CAST(price_text AS INTEGER) > 10;
パフォーマンスを考えた書き方
インデックスを活用する
よく検索される列にはインデックスを付けて、検索を高速化しましょう。
-- よく使われる検索パターン
SELECT * FROM orders WHERE customer_id = 123;
SELECT * FROM products WHERE category = '家電';
-- これらの列にインデックスを付けると検索が早くなる
CREATE INDEX idx_customer_id ON orders(customer_id);
CREATE INDEX idx_category ON products(category);
効率的な条件の順番
-- インデックスがある列を最初に書く
SELECT * FROM orders
WHERE customer_id = 123 -- インデックスあり(早い)
AND order_date >= '2025-01-01' -- インデックスなし(遅い)
AND total_amount > 10000; -- インデックスなし(遅い)
不要な検索を避ける
-- 悪い例:全件検索してから絞り込み
SELECT * FROM products WHERE 1=1; -- 全件取得(遅い)
-- 良い例:最初から条件を指定
SELECT * FROM products WHERE category = '家電'; -- 必要な分だけ(早い)
応用テクニック

範囲検索の書き方
年齢の範囲
-- 20代の人(20歳以上30歳未満)
SELECT * FROM users
WHERE age >= 20 AND age < 30;
-- または
SELECT * FROM users
WHERE age BETWEEN 20 AND 29;
期間の範囲
-- 今月のデータ
SELECT * FROM orders
WHERE order_date >= '2025-06-01'
AND order_date < '2025-07-01';
複数の値から選択
-- 特定のカテゴリの商品
SELECT * FROM products
WHERE category = '家電'
OR category = '家具'
OR category = '衣類';
-- INを使ってもっと簡潔に
SELECT * FROM products
WHERE category IN ('家電', '家具', '衣類');
あいまい検索
-- 名前に「田中」が含まれる人
SELECT * FROM users
WHERE name LIKE '%田中%';
-- 「A」で始まる商品
SELECT * FROM products
WHERE product_name LIKE 'A%';
トラブルシューティング
期待した結果が返ってこないとき
データ型を確認
-- 列のデータ型を確認
DESCRIBE products; -- MySQL
\d products; -- PostgreSQL
実際のデータを確認
-- サンプルデータを見てみる
SELECT * FROM products LIMIT 5;
条件を段階的に確認
-- まず全件取得
SELECT COUNT(*) FROM products;
-- 条件を1つずつ追加
SELECT COUNT(*) FROM products WHERE price >= 1000;
SELECT COUNT(*) FROM products WHERE price >= 1000 AND stock > 0;
エラーが出るとき
よくあるエラーメッセージ
Column 'xxx' doesn't exist
→ 列名が間違っているか、存在しない
You have an error in your SQL syntax
→ SQL文の書き方が間違っている
Data truncated for column
→ データ型が合っていない
まとめ
比較演算子は、SQLのWHERE句で使う最も基本的で重要な要素です。
数値の大小判断、文字列の一致確認、日付の前後比較など、日常的に必要な条件をすべて表現できます。
重要なポイント
- 基本の7つの演算子:
=
,<>
,!=
,>
,<
,>=
,<=
- 論理演算子との組み合わせ:AND、OR、NOTで複雑な条件を作成
- NULLの扱い:
IS NULL
とIS NOT NULL
を正しく使う - データ型に注意:数値、文字列、日付それぞれに適した比較方法
- パフォーマンスを考慮:インデックスの活用と効率的な条件設定
覚え方のコツ
- まずは基本の7つの演算子を覚える
- 簡単な例から始めて、少しずつ複雑な条件にチャレンジ
- 実際のデータで試しながら理解を深める
- エラーが出ても焦らず、一つずつ確認する
これらの比較演算子を使いこなせるようになると、データベースから必要な情報を正確に取り出せるようになります。
SQLスキルの向上に向けて、ぜひこの記事を参考にして練習してみてください!
コメント