例えば、君がデータベース管理者で、レコードを変更したり削除したりしなきゃいけないとする。でも、もし間違って 全部 更新や削除しちゃったらどうする?WHERE 演算子は、そんな大惨事を防ぐための「保険」みたいなもの。どの行を対象にするか、ピンポイントで指定できるんだ。
例えば:
UPDATE students
SET status = '卒業';
このクエリは
テーブル内の全ての行 を
students で更新しちゃう。もし間違えて「卒業」じゃなくて
status = '退学' にしちゃったら…やばいよね?これを防ぐために、必ず
WHERE で
条件 を指定して、どの行を更新・削除するか決めるんだ。
WHERE 条件の書き方
WHERE は、演算子が適用される行をフィルタするために使う。UPDATE や DELETE で使えるよ。書き方はこんな感じ:
UPDATE の場合:
UPDATE テーブル
SET column1 = value1, column2 = value2
WHERE 条件;
DELETE の場合:
DELETE FROM テーブル
WHERE 条件;
WHERE を書かないと、テーブルの全行が対象になっちゃう。だから、いじりたくないデータまで変えちゃわないように、必ず条件をつけよう。
比較演算子の使い方
WHERE の条件を作るには、比較演算子を使うよ。主なものを見てみよう:
| 演算子 | 説明 | 例 |
|---|---|---|
= |
等しい | age = 18 |
<> |
等しくない | age <> 18 |
> |
より大きい | age > 18 |
< |
より小さい | age < 18 |
>= |
以上 | age >= 18 |
<= |
以下 | age <= 18 |
例:学生のステータスを更新する
21歳より上の学生を「卒業生」としてマークしたい場合はこう:
UPDATE students
SET status = '卒業'
WHERE age > 21;
例:18歳未満の学生を削除する
もし未成年の学生が間違って登録されてたら、こうやって削除できる:
DELETE FROM students
WHERE age < 18;
論理演算子で複雑な条件を作る
複数の条件で行をフィルタしたいこともよくある。例えば、18歳より上で、かつプログラミングコースの学生だけを更新したいとき。そんな時は論理演算子 AND, OR, NOT を使うよ。
論理演算子:
| 演算子 | 説明 | 例 |
|---|---|---|
AND |
全ての条件 が真のとき実行 | age > 18 AND course = 'Programming' |
OR |
どれか1つでも条件 が真なら実行 | age > 18 OR course = 'Programming' |
NOT |
反転(条件の結果を逆にする) | NOT (age < 18) |
例:18歳以上のプログラミング学生だけを更新
UPDATE students
SET status = '上級'
WHERE age > 18 AND course = 'Programming';
例:18歳未満または「歌」コースの学生を削除
DELETE FROM students
WHERE age < 18 OR course = 'Singing';
大惨事を防ぐために
実行前に必ず条件を確認しよう!
WHERE なしでクエリを書くと、PostgreSQL は テーブルの全行 に対して実行しちゃう。例えば:
DELETE FROM students;
-- うわ!studentsテーブルの全レコードが消えた!
こんな事態を防ぐには、WHERE をつけよう:
DELETE FROM students
WHERE student_id = 123;
アドバイス:条件がどんな影響を与えるか不安なときは、まず SELECT で確認しよう。例えば:
SELECT * FROM students
WHERE student_id = 123;
ちゃんと選択できてるのを確認したら、UPDATE や DELETE を実行しよう。
実践例
例1:学生のステータスを更新
例えば、こんな students テーブルがあるとする:
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Beginner |
| 2 | Maria Chi | 22 | Mathematics | Graduated |
| 3 | Eva Gram | 19 | Programming | Beginner |
18歳より上のプログラミング学生を「Intermediate」にしたい:
UPDATE students
SET status = 'Intermediate'
WHERE age > 18 AND course = 'Programming';
結果:
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Intermediate |
| 2 | Maria Chi | 22 | Mathematics | Graduated |
| 3 | Eva Gram | 19 | Programming | Beginner |
例2:退学した学生を削除
今度は、特定のコースの学生を削除したいとする。例えば「History of Arts」コースの学生。テーブルは:
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Intermediate |
| 4 | Alex Ming | 21 | History of Arts | Expelled |
「History of Arts」コースの学生を削除:
DELETE FROM students
WHERE course = 'History of Arts';
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Intermediate |
例3:条件なしで更新(なぜ危険か)
もしこう書いたら:
UPDATE students
SET status = '卒業生';
全員 が卒業生になっちゃう。だから WHERE は絶対使おう!
もともとこんなテーブルだったとする:
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | Intermediate |
| 2 | Maria Chi | 22 | Mathematics | Graduated |
| 3 | Eva Gram | 19 | Programming | Beginner |
UPDATE を WHERE なしで実行した後:
| student_id | name | age | course | status |
|---|---|---|---|---|
| 1 | Otto Lin | 20 | Programming | 卒業生 |
| 2 | Maria Chi | 22 | Mathematics | 卒業生 |
| 3 | Eva Gram | 19 | Programming | 卒業生 |
😬 ね?全員のステータスが変わっちゃった。バックアップがなかったら取り返しがつかないことも。だから WHERE はマジで大事!
注意点と落とし穴
WHERE は超便利だけど、初心者がやりがちなミスもある:
- 条件なし:
WHEREを忘れると全行が対象になる。 - 間違った条件: 例えば
age = 19と書くべきところをage < 19にしちゃうと、違うデータをいじっちゃう。 - 複雑な条件:
ANDとORの優先順位を間違えると、予想外の結果になる。分かりやすくするためにカッコを使おう:DELETE FROM students WHERE (age > 18 AND course = 'Programming') OR course = 'Mathematics';
自分や仲間が分かりやすいようにクエリを書こう。
これで WHERE を使って安全・確実にデータを更新・削除できるようになったね。このツールはデータベース作業の最強の味方。条件は念入りにチェックして、後悔しないようにしよう!
GO TO FULL VERSION