論理演算子っていうのは、クエリの中で条件を組み合わせて、もっと複雑なデータのフィルタリングができるツールだよ。たぶん、もうプログラミング言語で見たことあると思う。もしクエリをメールのスパムフィルターのプログラムに例えるなら、論理演算子は「スパム」フォルダに入れるか「受信箱」に残すかのルールみたいなもんだね。
SQLはデータの抽出や分析によく使われるツール。論理演算子(AND、OR、NOT)を使うと、1つのクエリで複数の条件を組み合わせて、例えばこんな複雑な質問にも答えられるようになるよ:
- 18歳より上かつ成績が「A」の学生は誰?
- 「エレクトロニクス」または「カデン」のカテゴリに入ってる商品は?
- どの顧客が購入していない?
じゃあ、SQLで使う3つのメイン論理演算子を見ていこう:
AND: 両方の条件がtrueじゃないとダメ。OR: どっちか1つでもtrueならOK。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演算子: 条件の反転
ANDやORが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」の学生を選びたいなら、ANDとORを組み合わせる。
組み合わせのシンタックス
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は論理演算子を次の順番で実行するって覚えておこう:
NOTANDOR
カッコを使えば実行順を変えられる。カッコなしだと、思ったのと違う結果になることもあるから注意!
例: カッコあり・なしの比較
このクエリはどうなる?
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A' OR grade = 'B';
このクエリは次の学生を選ぶ:
- 18歳より上かつ成績が「A」の人。
- 成績が「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』」の学生だけが選ばれる。カッコって大事!
論理演算子でよくあるミス
- カッコの付け忘れ。特に
ANDとORを組み合わせる時は、思わぬ結果になることがある。 NOTを使う時、どの行が除外されるかちゃんと理解してない。- 論理演算子の使い間違い。例えば
ANDとORを逆にしちゃうとか。 - 条件が複雑すぎる。
AND、OR、NOTがいっぱいでコメントもないと、読みにくくなる。
これらの演算子は、どんな複雑なクエリでも基本になるやつ。これで、ちゃんと動くだけじゃなくて、欲しいデータをピンポイントで探せるクエリが書けるようになるよ!
GO TO FULL VERSION