【SQL】比較演算子とAND・OR・NOTの使い方

SQL

こんにちは、かつコーチです。
今回は、WHERE句で条件を組み立てるときに欠かせない比較演算子(値同士の大小や一致を比べる記号)と、論理演算子(複数の条件を組み合わせる言葉)のAND・OR・NOTを解説します。
「30代の女性だけ抽出したい」「未購入か退会済みのユーザーを除外したい」といった、複数条件の絞り込みができるようになります。

比較演算子とは?

6種類の比較演算子を押さえる

比較演算子は、カラムの値と指定した値を比べて、条件に合う行だけを取り出すための記号です。
主なものは次の6つです。

演算子意味
=等しい
<> または !=等しくない
>より大きい
<より小さい
>=以上
<=以下

例えば、usersテーブルから年齢が20以上の人を取得するには、次のように書きます。

SELECT name, age
FROM users
WHERE age >= 20;

なぜ論理演算子が必要なのか

比較演算子だけでは「1つの条件」しか表現できません。
しかし実務では「20歳以上30歳未満」「東京か大阪に住んでいる」のように、複数の条件を組み合わせたい場面がほとんどです。
そこで使うのが、AND・OR・NOTの論理演算子です。

AND・OR・NOTの基本の書き方

AND:すべての条件を満たす行を取得する

ANDは、複数の条件をすべて満たす行だけを絞り込みます。

SELECT name, age, prefecture
FROM users
WHERE age >= 20 AND prefecture = '東京都';

このクエリは「年齢が20歳以上」かつ「都道府県が東京都」の両方を満たす行だけを返します。
片方しか満たさない行はヒットしません。

OR:いずれかの条件を満たす行を取得する

ORは、複数の条件のうちどれか1つでも満たせば行を取得します。

SELECT name, prefecture
FROM users
WHERE prefecture = '東京都' OR prefecture = '大阪府';

東京都在住の人と大阪府在住の人の両方が結果に含まれます。

NOT:条件を否定する

NOTは、条件の結果を反転させます。

SELECT name, status
FROM orders
WHERE NOT status = 'canceled';

status = 'canceled'ではない行、つまりキャンセルされていない注文だけを取得できます。

つまずきやすい設定・注意点

ANDとORを混在させるときは括弧が必須

ANDとORを一緒に使うとき、括弧をつけずに書くと意図しない結果になることがあります。
これは、SQLがANDをORより先に評価する(優先順位が高い)ためです。

❌ Before(括弧なし。意図と違う結果になる)

SELECT name, age, prefecture
FROM users
WHERE prefecture = '東京都' OR prefecture = '大阪府' AND age >= 20;

このクエリは「東京都在住(年齢問わず)」または「大阪府在住かつ20歳以上」という意味になってしまいます。
「東京都か大阪府に住んでいて、かつ20歳以上」を意図していた場合、東京都在住の未成年まで含まれてしまうバグになります。

✅ After(括弧で優先順位を明示する)

SELECT name, age, prefecture
FROM users
WHERE (prefecture = '東京都' OR prefecture = '大阪府') AND age >= 20;

私も駆け出しの頃、この括弧忘れが原因で「なぜか未成年が集計対象に混ざる」というバグを本番の集計クエリで出したことがあります。
ANDとORを混ぜるときは、意図を明確にするために必ず括弧をつける、とルール化してしまうのがおすすめです。

文字列の比較は引用符を忘れない

文字列の値を比較するときは、シングルクォート(')で囲む必要があります。
数値と混同して引用符を忘れると、エラーになったり別のカラム名として誤解釈されたりします。

-- ❌ エラーになりやすい
WHERE prefecture = 東京都

-- ✅ 正しい書き方
WHERE prefecture = '東京都'

応用・一歩先の使い方

NOT INやNOT LIKEとの組み合わせ

NOTは単独の条件だけでなく、後述するIN・LIKE・BETWEENといった演算子の前にもつけられます。

SELECT name, status
FROM orders
WHERE status NOT IN ('canceled', 'refunded');

「キャンセル」でも「返金済み」でもない注文だけを一度に除外できるため、条件が多いときはこちらのほうがANDを何個も並べるより読みやすくなります。

複数条件が増えてきたらCASE式も検討する

AND・ORの組み合わせが5つ、6つと増えてくると、WHERE句だけでは可読性が落ちてきます。
そうしたケースでは、条件分岐をCASE式で整理する方法もありますが、これは応用編として別記事で扱います。
まずはAND・OR・NOTの基本を、括弧の使い方とセットで体に覚えさせましょう。

まとめ

この記事のポイント

  • 比較演算子(=<>><>=<=)で1つの条件を表現できる
  • ANDは「すべて満たす」、ORは「いずれか満たす」、NOTは「否定」という意味
  • ANDとORを混在させるときは、優先順位のズレを防ぐために括弧を必ずつける
  • 文字列の比較にはシングルクォートを忘れずに

次に読むべき記事

  • SQL LIKE演算子であいまい検索をする
  • SQL IN・BETWEENで複数条件・範囲を指定する
  • SQL WHERE句で条件を指定して絞り込む

タグ: SQL, 初心者向け, 基本文法

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