SQLのUPDATE文を完全ガイド!初心者でもわかるデータの更新方法
新人
「データベースの情報を変更するにはどうしたらいいですか?」
先輩
「データを更新するには、SQLのUPDATE文を使うよ。」
新人
「UPDATE文って何ですか?」
先輩
「UPDATE文を使うと、既存のデータを変更できるんだ。まずは、使用するテーブルを確認してみよう!」
1. 今回使用するテーブルデータ
今回のSQLの解説では、社員情報を管理するemployeeテーブルを使用します。このテーブルには、社員のid、name、age、department、salaryの情報が格納されています。
| id | name | age | department | salary |
|---|---|---|---|---|
| 1 | 田中 太郎 | 30 | 営業 | 5000000 |
| 2 | 佐藤 花子 | 25 | マーケティング | 4200000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 6000000 |
| 4 | 高橋 直子 | 28 | 人事 | 4800000 |
| 5 | 山本 健太 | 40 | 経理 | 5500000 |
2. UPDATE文の基本
SQLのUPDATE文を使うと、既存のデータを変更することができます。基本の構文は次のようになります。
UPDATE employee
SET salary = 5200000
WHERE id = 1;
このSQL文は、employeeテーブルのidが1の社員のsalary(給与)を5200000に変更します。
このSQLを実行すると、データが変更され、テーブルの内容は以下のようになります。
| id | name | age | department | salary |
|---|---|---|---|---|
| 1 | 田中 太郎 | 30 | 営業 | 5200000 |
| 2 | 佐藤 花子 | 25 | マーケティング | 4200000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 6000000 |
| 4 | 高橋 直子 | 28 | 人事 | 4800000 |
| 5 | 山本 健太 | 40 | 経理 | 5500000 |
このように、UPDATE文を使うことで、特定のデータを簡単に変更できます。
3. 複数のカラムを同時に更新する方法
SQLのUPDATE文では、複数のカラムを同時に更新することができます。更新したいカラムをカンマ,で区切って指定します。
UPDATE employee
SET age = 31, salary = 5300000
WHERE id = 1;
このSQLを実行すると、id=1の社員の年齢を31に、給与を5300000に変更します。
| id | name | age | department | salary |
|---|---|---|---|---|
| 1 | 田中 太郎 | 31 | 営業 | 5300000 |
| 2 | 佐藤 花子 | 25 | マーケティング | 4200000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 6000000 |
| 4 | 高橋 直子 | 28 | 人事 | 4800000 |
| 5 | 山本 健太 | 40 | 経理 | 5500000 |
このように、複数のカラムを同時に更新することで、データの変更を効率よく行えます。
4. WHERE句を活用して特定の行のみ更新する
データを更新する際に、WHERE句を使用すると、特定の条件に一致する行だけを更新できます。
UPDATE employee
SET salary = 5600000
WHERE department = '開発';
このSQLを実行すると、開発部門の社員の給与を5600000に更新します。
| id | name | age | department | salary |
|---|---|---|---|---|
| 1 | 田中 太郎 | 31 | 営業 | 5300000 |
| 2 | 佐藤 花子 | 25 | マーケティング | 4200000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 5600000 |
| 4 | 高橋 直子 | 28 | 人事 | 4800000 |
| 5 | 山本 健太 | 40 | 経理 | 5500000 |
このように、WHERE句を活用することで、特定の条件に一致するデータのみを変更できます。
5. 全ての行を一括更新する方法
テーブル内のすべてのデータを更新したい場合は、WHERE句を省略します。これにより、テーブル内のすべての行が更新されます。
UPDATE employee
SET salary = salary + 100000;
このSQL文は、全社員の給与を100000円増加させます。
| id | name | age | department | salary |
|---|---|---|---|---|
| 1 | 田中 太郎 | 31 | 営業 | 5400000 |
| 2 | 佐藤 花子 | 25 | マーケティング | 4300000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 5700000 |
| 4 | 高橋 直子 | 28 | 人事 | 4900000 |
| 5 | 山本 健太 | 40 | 経理 | 5600000 |
このように、WHERE句を省略すると、全データが一括で更新されるため、注意が必要です。
6. よくあるエラーと対策
初心者がSQLのUPDATE文を使う際に、よく発生するエラーとその対策を紹介します。
1. WHERE句を忘れて全データを更新してしまう
間違えてWHERE句を指定しないと、テーブル内のすべてのデータが更新されてしまいます。
UPDATE employee SET salary = 6000000;
エラー内容: 全社員の給与が6000000に変更されてしまう。
対策: WHERE句を必ず指定する。
UPDATE employee SET salary = 6000000 WHERE id = 3;
2. 存在しないカラムを指定してしまう
誤ったカラム名を指定するとエラーになります。
UPDATE employee SET salry = 6000000 WHERE id = 3;
エラー内容: ERROR: Unknown column 'salry' in 'field list'
対策: カラム名が正しいか確認する。
UPDATE employee SET salary = 6000000 WHERE id = 3;
7. UPDATEとJOINを組み合わせた更新
別のテーブルの情報を使ってデータを更新する場合、JOINを活用することができます。
例えば、新しくsalary_updateというテーブルがあり、社員の給与が変更された場合を考えます。
| id | new_salary |
|---|---|
| 1 | 5500000 |
| 3 | 6300000 |
このsalary_updateテーブルを使って、employeeテーブルのsalaryを更新するには、次のように記述します。
UPDATE employee
JOIN salary_update ON employee.id = salary_update.id
SET employee.salary = salary_update.new_salary;
このSQLを実行すると、対象の社員の給与が新しい金額に更新されます。
| id | name | age | department | salary |
|---|---|---|---|---|
| 1 | 田中 太郎 | 31 | 営業 | 5500000 |
| 2 | 佐藤 花子 | 25 | マーケティング | 4300000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 6300000 |
| 4 | 高橋 直子 | 28 | 人事 | 4900000 |
| 5 | 山本 健太 | 40 | 経理 | 5600000 |
このように、JOINを使うと、別のテーブルのデータをもとに更新が可能になります。
8. サブクエリを利用したUPDATE
サブクエリ(入れ子のSQL)を使用すると、特定の条件に一致するデータを別のテーブルから取得して更新できます。
例えば、employeeテーブルの中で、給与の平均値より低い社員の給与を、平均値に合わせるとします。
UPDATE employee
SET salary = (SELECT AVG(salary) FROM employee)
WHERE salary < (SELECT AVG(salary) FROM employee);
このSQLを実行すると、給与が平均以下の社員の給与が平均値に更新されます。
| id | name | age | department | salary |
|---|---|---|---|---|
| 1 | 田中 太郎 | 31 | 営業 | 5300000 |
| 2 | 佐藤 花子 | 25 | マーケティング | 5300000 |
| 3 | 鈴木 一郎 | 35 | 開発 | 6300000 |
| 4 | 高橋 直子 | 28 | 人事 | 5300000 |
| 5 | 山本 健太 | 40 | 経理 | 5600000 |
このように、サブクエリを利用すると、複雑な条件を満たすデータを抽出して更新できます。