CodeGym /コース /SQL SELF /WHERE の使い方 WHERE を使ったデータの更新と削除...

WHERE の使い方 WHERE を使ったデータの更新と削除

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

例えば、君がデータベース管理者で、レコードを変更したり削除したりしなきゃいけないとする。でも、もし間違って 全部 更新や削除しちゃったらどうする?WHERE 演算子は、そんな大惨事を防ぐための「保険」みたいなもの。どの行を対象にするか、ピンポイントで指定できるんだ。

例えば:

UPDATE students
SET status = '卒業';
このクエリは テーブル内の全ての行students で更新しちゃう。もし間違えて「卒業」じゃなくて status = '退学' にしちゃったら…やばいよね?これを防ぐために、必ず WHERE条件 を指定して、どの行を更新・削除するか決めるんだ。

WHERE 条件の書き方

WHERE は、演算子が適用される行をフィルタするために使う。UPDATEDELETE で使えるよ。書き方はこんな感じ:

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;

ちゃんと選択できてるのを確認したら、UPDATEDELETE を実行しよう。

実践例

例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

UPDATEWHERE なしで実行した後:

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 にしちゃうと、違うデータをいじっちゃう。
  • 複雑な条件: ANDOR の優先順位を間違えると、予想外の結果になる。分かりやすくするためにカッコを使おう:
    DELETE FROM students
    WHERE (age > 18 AND course = 'Programming') OR course = 'Mathematics';
    

自分や仲間が分かりやすいようにクエリを書こう。

これで WHERE を使って安全・確実にデータを更新・削除できるようになったね。このツールはデータベース作業の最強の味方。条件は念入りにチェックして、後悔しないようにしよう!

1
アンケート/クイズ
データの挿入と更新、レベル 21、レッスン 4
使用不可
データの挿入と更新
データの挿入と更新
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION