【初心者向け】SQLの演算子まとめ|比較・算術・論理など使い方と意味をやさしく解説!

データベース・SQL

SQLでデータベースに問い合わせるとき、必ずといっていいほど出てくる記号やキーワードがあります。

たとえば、こんな感じです:

SELECT * FROM users WHERE age >= 20;

ここで使われている「>=」は、SQLにおける「演算子(operator)」と呼ばれるものです。

演算子とは、値を比較したり、計算したり、条件を組み合わせたりするための記号やキーワードのことです。

この記事では、SQLでよく使われる演算子の種類と使い方を、初心者にも分かりやすく一覧形式+具体例で解説します!

スポンサーリンク

演算子とは?SQLでの役割と種類

演算子とは?

演算子(operator)とは、SQLで「条件式」「計算式」「論理式」などを作るための記号やキーワードのことです。

WHERE句やSELECT句の中で頻繁に登場します。

主な演算子の種類

演算子カテゴリ主な内容用途
比較演算子=, !=, <, >, <=, >=値の大小や一致を比較
算術演算子+, -, *, /, %数値の計算
論理演算子AND, OR, NOT条件の組み合わせ
特殊演算子IN, BETWEEN, LIKE, IS NULL複雑な条件指定

なぜ演算子が必要なの?

例: ユーザーテーブルから「20歳以上」のユーザーを探したい場合

演算子なし(不可能):

SELECT * FROM users WHERE age 20以上;  -- これはエラー

演算子あり(正しい):

SELECT * FROM users WHERE age >= 20;  -- これが正解

ポイント: 演算子は「条件を指定するための言葉」です。分類ごとに意味を覚えるとスムーズに理解できます。

比較演算子|WHERE句の中心になる演算子

主な比較演算子と意味

演算子意味説明
=等しいage = 30年齢が30歳ちょうど
!= または <>等しくないname != 'John'名前がJohnではない
>より大きいsalary > 50000給料が5万円より多い
<より小さいscore < 80スコアが80点未満
>=以上points >= 10ポイントが10以上
<=以下rank <= 5ランクが5位以下

実用的な使用例

例① 条件に合う従業員を検索:

SELECT name, salary FROM employees WHERE salary >= 60000;

結果: 給料が6万円以上の従業員の名前と給料を取得

例② 特定の年齢の顧客を除外:

SELECT * FROM customers WHERE age != 25;

結果: 25歳以外の顧客をすべて取得

例③ 評価点数による絞り込み:

SELECT product_name, rating FROM products WHERE rating > 4.0;

結果: 評価が4.0点より高い商品を取得

文字列の比較もできる

SELECT * FROM users WHERE name = 'Alice';
SELECT * FROM products WHERE category != 'Electronics';

注意: 文字列は必ずシングルクォート(’)で囲みます。

ポイント: 比較演算子は数値や文字列を基準にデータを絞るときに必須の演算子です。

算術演算子|SELECTで数値計算もできる!

主な算術演算子と使い方

演算子意味説明
+加算price + tax価格に税金を足す
-減算stock - sold在庫から売上を引く
*乗算unit_price * quantity単価×数量
/除算total / count合計を個数で割る
%剰余(余り)value % 22で割った余り(偶奇判定など)

実用的な使用例

例① 税込み価格を計算:

SELECT 
    product_name, 
    price, 
    price * 1.1 AS price_with_tax 
FROM products;

結果: 商品名、税抜き価格、税込み価格(10%増し)を表示

例② 平均値を計算:

SELECT 
    student_name,
    (math_score + english_score + science_score) / 3 AS average_score
FROM test_results;

結果: 生徒名と3科目の平均点を表示

例③ 売上金額を計算:

SELECT 
    order_id,
    quantity * unit_price AS total_amount
FROM order_details;

結果: 注文IDと売上金額(数量×単価)を表示

計算の優先順位

SELECT 10 + 5 * 2;  -- 結果:20(5*2=10, 10+10=20)
SELECT (10 + 5) * 2; -- 結果:30(10+5=15, 15*2=30)

ポイント: かっこ()を使って計算順序を明確にしましょう。

重要: SELECT句内で計算できるのがSQLの強み!演算子で手軽に数値処理ができます。

論理演算子|AND/OR/NOTで複雑な条件も自由自在

主な論理演算子

演算子意味説明
ANDすべての条件が真age >= 20 AND gender = 'F'20歳以上かつ女性
ORいずれかの条件が真status = 'active' OR status = 'pending'アクティブまたは保留中
NOT条件の否定NOT (age < 18)18歳未満ではない

実用的な使用例

例① 年齢範囲での絞り込み:

SELECT * FROM users WHERE age >= 18 AND age <= 25;

結果: 18歳以上25歳以下のユーザーを抽出

例② 複数のステータスで検索:

SELECT * FROM orders WHERE status = 'shipped' OR status = 'delivered';

結果: 発送済みまたは配達済みの注文を取得

例③ 特定条件を除外:

SELECT * FROM products WHERE NOT (price > 1000 AND category = 'toy');

結果: 「1000円より高いおもちゃ」以外の商品を取得

複雑な条件の組み合わせ

SELECT * FROM employees 
WHERE (department = 'Sales' OR department = 'Marketing') 
  AND salary >= 50000 
  AND age < 40;

結果: 営業部または市場部で、給料5万円以上、40歳未満の従業員

論理演算子の優先順位

  1. NOT(最優先)
  2. AND
  3. OR(最後)

例:

-- これは「NOT age < 18」AND「gender = 'F'」として解釈される
SELECT * FROM users WHERE NOT age < 18 AND gender = 'F';

-- かっこを使って明確にする
SELECT * FROM users WHERE NOT (age < 18 AND gender = 'F');

ポイント: 論理演算子を使えば、条件を柔軟に組み合わせて検索の幅が広がります

その他の便利な演算子(IN、BETWEEN、LIKEなど)

IN演算子:複数の値に一致するかチェック

基本構文:

SELECT * FROM table_name WHERE column_name IN (値1, 値2, 値3);

使用例:

SELECT * FROM users WHERE country IN ('Japan', 'USA', 'Canada');

結果: 日本、アメリカ、カナダのいずれかの国のユーザーを取得

NOT INも使える:

SELECT * FROM products WHERE category NOT IN ('Electronics', 'Books');

結果: 電子機器と書籍以外のカテゴリの商品を取得

BETWEEN演算子:範囲指定

基本構文:

SELECT * FROM table_name WHERE column_name BETWEEN 開始値 AND 終了値;

使用例:

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

結果: 2024年の注文をすべて取得

数値での範囲指定:

SELECT * FROM products WHERE price BETWEEN 1000 AND 5000;

結果: 価格が1000円から5000円までの商品を取得

LIKE演算子:パターン検索(ワイルドカード)

主なワイルドカード:

ワイルドカード意味
%任意の文字列(0文字以上)'Apple%'→Appleで始まる
_任意の1文字'A_e'→Aとeの間に1文字

使用例:

前方一致検索:

SELECT * FROM products WHERE name LIKE 'Apple%';

結果: 「Apple iPhone」「Apple Watch」など、Appleで始まる商品名

後方一致検索:

SELECT * FROM files WHERE filename LIKE '%.pdf';

結果: 拡張子が.pdfのファイル

部分一致検索:

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

結果: Gmailアドレスのユーザー

任意の1文字:

SELECT * FROM codes WHERE code LIKE 'A_C';

結果: 「ABC」「AXC」「A1C」など、AとCの間に1文字あるコード

IS NULL / IS NOT NULL:NULL値の判定

NULL値とは: データベースで「値が存在しない」ことを表す特別な値

使用例:

NULLの検索:

SELECT * FROM users WHERE email IS NULL;

結果: メールアドレスが未登録のユーザーを取得

NULLではないデータの検索:

SELECT * FROM orders WHERE delivery_date IS NOT NULL;

結果: 配達日が設定されている注文を取得

重要な注意点:

-- ❌ 間違い:NULLは = や != で比較できない
SELECT * FROM users WHERE email = NULL;  -- これは動かない

-- ✅ 正しい:IS NULL または IS NOT NULL を使う
SELECT * FROM users WHERE email IS NULL;  -- これが正解

EXISTS演算子:サブクエリの存在チェック

使用例:

SELECT * FROM customers c
WHERE EXISTS (
    SELECT 1 FROM orders o 
    WHERE o.customer_id = c.customer_id
);

結果: 注文履歴があるお客様だけを取得

ポイント: これらの特殊演算子を知っていると、複雑な検索が短く・分かりやすく書けます!

演算子の優先順位と組み合わせのコツ

演算子の優先順位(高い順)

  1. 算術演算子*, /, %
  2. 算術演算子+, -
  3. 比較演算子=, !=, <, >, <=, >=, LIKE, IN, BETWEEN
  4. 論理演算子NOT
  5. 論理演算子AND
  6. 論理演算子OR

実践的な組み合わせ例

複雑な条件を整理して書く:

SELECT * FROM products 
WHERE (category = 'Electronics' OR category = 'Computers')
  AND price BETWEEN 10000 AND 50000
  AND name NOT LIKE '%used%'
  AND stock > 0;

解説:

  • エレクトロニクスまたはコンピューター
  • 価格が1万円から5万円
  • 商品名に「used」が含まれない
  • 在庫がある

可読性を高めるコツ

改行とインデントを活用:

SELECT 
    product_id,
    name,
    price * 1.1 AS price_with_tax
FROM products 
WHERE category IN ('Electronics', 'Computers', 'Phones')
  AND price >= 5000
  AND (
      brand = 'Apple' 
      OR brand = 'Samsung'
      OR brand = 'Sony'
  )
ORDER BY price DESC;

よくある間違いと対処法

間違い① NULLの比較

-- ❌ 間違い
SELECT * FROM users WHERE age = NULL;

-- ✅ 正しい
SELECT * FROM users WHERE age IS NULL;

間違い② 文字列のクォート忘れ

-- ❌ 間違い
SELECT * FROM users WHERE name = Alice;

-- ✅ 正しい
SELECT * FROM users WHERE name = 'Alice';

間違い③ 論理演算子の優先順位

-- ❌ 意図しない結果
SELECT * FROM users WHERE age > 18 OR age < 65 AND gender = 'F';
-- これは「age > 18」OR「(age < 65 AND gender = 'F')」として解釈される

-- ✅ 意図を明確にする
SELECT * FROM users WHERE (age > 18 OR age < 65) AND gender = 'F';

間違い④ LIKEでのワイルドカード忘れ

-- ❌ 完全一致になってしまう
SELECT * FROM products WHERE name LIKE 'Apple';

-- ✅ 部分一致
SELECT * FROM products WHERE name LIKE '%Apple%';

実践練習問題

練習問題1:基本的な検索

以下の条件でユーザーを検索するSQL文を書いてください:

  • 年齢が25歳以上35歳以下
  • 性別が女性(’F’)
  • メールアドレスが登録されている

解答例:

SELECT * FROM users 
WHERE age BETWEEN 25 AND 35 
  AND gender = 'F' 
  AND email IS NOT NULL;

練習問題2:計算を含む検索

商品テーブルから以下を取得してください:

  • 商品名、価格、税込み価格(消費税10%)
  • 価格が1000円以上の商品のみ
  • 税込み価格の高い順に並び替え

解答例:

SELECT 
    name,
    price,
    price * 1.1 AS price_with_tax
FROM products 
WHERE price >= 1000
ORDER BY price * 1.1 DESC;

まとめ:SQLの演算子を使いこなして、自由自在なデータ操作を!

今回学んだ演算子の種類:

  • 比較演算子:データの大小や一致を判定
  • 算術演算子:数値計算で新しい値を作成
  • 論理演算子:複数の条件を組み合わせ
  • 特殊演算子:複雑な条件を簡潔に表現

実際に使ってみよう:

  1. 簡単な比較から始めてみる(=, >, < など)
  2. AND, ORで条件を組み合わせる
  3. IN, LIKEで効率的な検索を体験
  4. 算術演算子で計算結果を表示

コメント

タイトルとURLをコピーしました