CodeGym /コース /SQL SELF /論理演算子 (AND, OR, NOT): 条件の組み合わせ

論理演算子 (AND, OR, NOT): 条件の組み合わせ

SQL SELF
レベル 2 , レッスン 2
使用可能

論理演算子っていうのは、クエリの中で条件を組み合わせて、もっと複雑なデータのフィルタリングができるツールだよ。たぶん、もうプログラミング言語で見たことあると思う。もしクエリをメールのスパムフィルターのプログラムに例えるなら、論理演算子は「スパム」フォルダに入れるか「受信箱」に残すかのルールみたいなもんだね。

SQLはデータの抽出や分析によく使われるツール。論理演算子(ANDORNOT)を使うと、1つのクエリで複数の条件を組み合わせて、例えばこんな複雑な質問にも答えられるようになるよ:

  • 18歳より上かつ成績が「A」の学生は誰?
  • 「エレクトロニクス」または「カデン」のカテゴリに入ってる商品は?
  • どの顧客が購入していない

じゃあ、SQLで使う3つのメイン論理演算子を見ていこう:

  1. AND: 両方の条件がtrueじゃないとダメ。
  2. OR: どっちか1つでもtrueならOK。
  3. NOT: 条件を反転(否定)する。

AND演算子: 両方の条件がtrue

AND演算子は、両方の条件が満たされてる時だけ、その行が結果に入るようにするやつ。

シンタックス

SELECT カラム1, カラム2
FROM テーブル
WHERE 条件 AND 条件2;

例1: 18歳より上かつ成績が「A」の学生をフィルタ

例えば、studentsテーブルがあるとする:

id name age grade
1 Alex 20 A
2 Maria 19 B
3 Otto 17 A
4 Anna 22 A

クエリ:

SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A';

結果:

name age grade
Alex 20 A
Anna 22 A

例2: 「HR」部門かつ給料が50000より上の社員をフィルタ

SELECT name, department, salary
FROM employees
WHERE department = 'HR' AND salary > 50000;

OR演算子: どっちか1つでもtrue

OR演算子は、どっちか1つでも条件を満たしてればその行を選ぶ時に使う。

シンタックス

SELECT カラム1, カラム2
FROM テーブル
WHERE 条件 OR 条件2;

例1: 成績が「A」または「B」の学生をフィルタ

SELECT name, age, grade
FROM students
WHERE grade = 'A' OR grade = 'B';

結果:

name age grade
Alex 20 A
Maria 19 B
Otto 17 A
Anna 22 A

例2: 「エレクトロニクス」カテゴリまたは価格が100未満の商品

productsテーブル:

product_id name category price
1 テレビ エレクトロニクス 300
2 アイロン カデン 50
3 スマートフォン エレクトロニクス 700
4 ケトル カデン 80
SELECT name, category, price
FROM products
WHERE category = 'エレクトロニクス' OR price < 100;

結果:

name category price
テレビ エレクトロニクス 300
アイロン カデン 50
ケトル カデン 80
スマートフォン エレクトロニクス 700

NOT演算子: 条件の反転

ANDORがtrueな条件を指定するのに対して、NOTは逆で、指定した条件がfalseな行を選ぶ。

シンタックス

SELECT カラム1, カラム2
FROM テーブル
WHERE NOT 条件;

例1: 成績が「A」じゃない学生をフィルタ

SELECT name, age, grade
FROM students
WHERE NOT grade = 'A';

結果:

name age grade
Maria 19 B

例2: 「エレクトロニクス」カテゴリじゃない商品を抽出

SELECT name, category, price
FROM products
WHERE NOT category = 'エレクトロニクス';

論理演算子の組み合わせ

論理演算子は組み合わせて、さらに複雑な条件も作れる。例えば、18歳より上かつ成績が「A」または「B」の学生を選びたいなら、ANDORを組み合わせる。

組み合わせのシンタックス

SELECT カラム1, カラム2
FROM テーブル
WHERE (条件1 AND 条件2) OR 条件3;

例: 18歳より上で成績が「A」または成績が「B」の学生

SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR grade = 'B';

結果:

name age grade
Alex 20 A
Anna 22 A
Maria 19 B

演算子の実行優先順位

SQLは論理演算子を次の順番で実行するって覚えておこう:

  1. NOT
  2. AND
  3. OR

カッコを使えば実行順を変えられる。カッコなしだと、思ったのと違う結果になることもあるから注意!

例: カッコあり・なしの比較

このクエリはどうなる?

SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A' OR grade = 'B';

このクエリは次の学生を選ぶ:

  1. 18歳より上かつ成績が「A」の人。
  2. 成績が「B」の人。

演算子の優先順位で、カッコを使った場合と同じ結果になる:

SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR (grade = 'B');

でも、カッコをこう変えると:

SELECT name, age, grade
FROM students
WHERE age > 18 AND (grade = 'A' OR grade = 'B');

今度は「18歳より上で成績が『A』または『B』」の学生だけが選ばれる。カッコって大事!

論理演算子でよくあるミス

  1. カッコの付け忘れ。特にANDORを組み合わせる時は、思わぬ結果になることがある。
  2. NOTを使う時、どの行が除外されるかちゃんと理解してない。
  3. 論理演算子の使い間違い。例えばANDORを逆にしちゃうとか。
  4. 条件が複雑すぎる。ANDORNOTがいっぱいでコメントもないと、読みにくくなる。

これらの演算子は、どんな複雑なクエリでも基本になるやつ。これで、ちゃんと動くだけじゃなくて、欲しいデータをピンポイントで探せるクエリが書けるようになるよ!

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION