- SQL で既存のレコードを更新したい
このような方に向けて書きました。
すでにあるテーブルのレコードを書き換えるクエリがUPDATE
です。
分量としてはあまり多くないので、ざっと全体像を俯瞰してマスターしていきましょう。
UPDATE 文の基本
既存のレコードの値を変更するために使われるのがUPDATE
です。
構文は以下の通り。
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
各要素の意味をまとめると以下の通りです。
句 | 効果 |
---|---|
table_name | 更新対象のテーブル名 |
SET column1 = value1 | 更新する列と新しい値を指定 |
WHERE condition | 更新する行の条件 |
最後のWHERE
句を指定しないと、テーブル内の全行が更新されるので注意してください。
また、一度UPDATE
すると元に戻せないので、更新前にバックアップをとりましょう。
UPDATE の具体例
ここからは実際のクエリ例を示しながら、UPDATE
の挙動を確認していきましょう。
単一の列を更新する場合
特定の列だけを更新したい場合には、以下のクエリを実行します。
UPDATE employees
SET salary = 50000
WHERE employee_id = 1;
employees
テーブルのemployee_id=1
のフィールドを取得して、salary
列の値を50000
に変更します。
元々、employees
テーブルが次のようなものだったとします。
employee_id | name | position | salary |
---|---|---|---|
1 | John Smith | Manager | 45000 |
2 | Jane Doe | Developer | 55000 |
3 | Alice Jones | Designer | 48000 |
4 | Bob Brown | Tester | 42000 |
クエリの実行結果は以下になります。
employee_id | name | position | salary |
---|---|---|---|
1 | John Smith | Manager | 50000 |
2 | Jane Doe | Developer | 55000 |
3 | Alice Jones | Designer | 48000 |
4 | Bob Brown | Tester | 42000 |
複数の列を更新する場合
複数列を更新する場合には、,
区切りで列と値の組み合わせを列挙していきます。
UPDATE employees
SET salary = 50000, job_title = 'Senior Developer'
WHERE employee_id = 1;
employees
テーブルのemployee_id=1
のフィールドを取得して、salary
列とjob_title
の値を書き換えます。
クエリ実行前のemployees
テーブルが以下だったとします。
employee_id | name | position | salary |
---|---|---|---|
1 | John Smith | Manager | 45000 |
2 | Jane Doe | Developer | 55000 |
3 | Alice Jones | Designer | 48000 |
4 | Bob Brown | Tester | 42000 |
クエリの実行結果は以下になります。
employee_id | name | position | salary |
---|---|---|---|
1 | John Smith | Manager | 50000 |
2 | Jane Doe | Developer | 55000 |
3 | Alice Jones | Designer | 48000 |
4 | Bob Brown | Tester | 42000 |
全行を更新する場合
全行を更新するには、WHERE
を省略します。
UPDATE employees
SET salary = salary * 1.1;
上記の例では、salary
カラムの全行を10%
分増やします。
クエリ実行前のemployees
テーブルが以下だったとします。
employee_id | name | position | salary |
---|---|---|---|
1 | John Smith | Manager | 45000 |
2 | Jane Doe | Developer | 55000 |
3 | Alice Jones | Designer | 48000 |
4 | Bob Brown | Tester | 42000 |
クエリの実行結果は以下になります。
employee_id | name | position | salary |
---|---|---|---|
1 | John Smith | Manager | 49500 |
2 | Jane Doe | Developer | 60500 |
3 | Alice Jones | Designer | 52800 |
4 | Bob Brown | Tester | 46200 |
コメント