22章 データ更新
では、次はデータの更新方法を確認していきましょう。
データの変更は既存のデータに対する変更を行います。
1つの列を更新するだけでなく、複数の列を同時に変更することも可能です。
では基本構文です。
[構文] 行の更新
UPDATE 表名
SET 列名 = 値 [ ,列名 = 値 …]
[WHERE 条件式];
SET句には更新したい列名と値を指定します。
WHERE句を使用して特定の行のみ更新することができます。
WHERE句を指定しなかった場合は、すべてのレコードが更新対象となります。
また複数の列を同時に更新した場合は、カンマを指定し、
列名を追加することで複数列を更新することができます。
では実行例を見ていきましょう。
SQL> SELECT emp_id,first_name,tel
2 FROM employees WHERE emp_id = 15;
EMP_ID FIRST_NAME TEL
---------- ---------------- ------------
15 Kato 03-XXXX-XXXX
SQL> UPDATE employees
2 SET TEL = '03-AAAA-BBBB'
3 WHERE emp_id = 15;
1 row updated.
SQL> SELECT emp_id,first_name,tel
2> FROM employees WHERE emp_id = 15;
EMP_ID FIRST_NAME TEL
---------- ---------------- ------------
15 Kato 03-AAAA-BBBB
WHERE句を指定し、emp_idが15のTELの値を変更しました。
また、NULLに変換する場合は、以下のコマンドで変更できます。
SQL> UPDATE employees
2 SET TEL = NULL
3 WHERE emp_id = 15;
1 row updated.
次に平均給与を給与の値に適用したい場合はどうでしょうか。
SQL> UPDATE employees SET salary = AVG(salry)
2> WHERE emp_id = 15;
*
ERROR at line 1:
ORA-00934: group function is not allowed here
上記のコマンドではエラーとなってしまいました。
関数を使用したい場合は直接、値を指定することは出来ません。
この時は副問合せを使用します。
SQL> UPDATE employees
2 SET salary = (SELECT AVG(salary) FROM employees)
3 WHERE emp_id = 15;
1 row updated.
今度はエラーなく更新が行えました。このように関数を使用する場合は副問合せを使用します。
では次に複数列の更新の場合も確認していきましょう。
SQL> SELECT emp_id,first_name,tel,address
2 FROM employees WHERE emp_id = 15;
EMP_ID FIRST_NAME TEL ADDRESS
---------- ------------------ ------------ ------------------
15 Kato 03-XXXX-XXX AA-X3XW-SEF
SQL> UPDATE employees
2 SET TEL = '03-AAAA-BBBB' , ADDRESS = 'SAITAMA'
3 WHERE emp_id = 15;
1 row updated.
SQL> SELECT emp_id,first_name,tel,address FROM employees
2 WHERE emp_id = 15;
EMP_ID FIRST_NAME TEL ADDRESS
---------- ------------------ ------------ ------------------
15 Kato 03-AAAA-BBBB SAITAMA
次に平均給与よりも少ない従業員の給与を550万に変更する方法を考えてみましょう。
まず、平均給与が分からないので、平均給与を求める必要があります。
平均を求める関数はAVGですね。
では、実行例を確認していきましょう。
SQL> SELECT emp_id,first_name,salary FROM employees
2 WHERE salary < ( SELECT AVG(salary) FROM employees);
EMP_ID FIRST_NAME SALARY
---------- ------------------------------ ----------
3 Yamamoto 5000000
5 Watanabe 5500000
11 Sato 5400000
12 Tao 5400000
13 Kaneko 5400000
14 Totsuka 5400000
17 Kuroda 4000000
18 Nakamura 4000000
19 Kamata 4000000
9 rows selected.
SQL> UPDATE employees SET salary = 5500000
2 WHERE salary < ( SELECT AVG(salary) FROM employees);
9 rows updated.
今回はWHERE句に副問合せを使用し、
そのSELECTでは平均給与を求めるSELECT文を指定しました。
結果、平均給与より少ない従業員に対し、
給与を550万円に変更することができるようになりました。
以上がUPDATEによるデータ変更についてでした。