Oracle Database(以下Oracle DB)は世界でもトップクラスのシェアを誇るDBです。
今回は、Oracle DBでのUPDATE文についてご紹介します。
SQL文の知識は他のDBでも使えることが多いです。
また、プログラミング言語と比べて変化も速くないので、ここで身に付けたことは今後も活かせるでしょう。
実務では、UPDATE文でテストデータを更新して、改修が上手くいってるか見たりするで!
記事の信頼性:未経験からIT企業の受託企業へ転職に成功。現役プログラマーの「しう」がOracle DBのUPDATE文について書いています。
UPDATE文【行の更新】
UPDATE文での行の更新方法について、ご紹介します!
UPDATEで更新する場合、簡単な書き方から複雑な書き方まであります。
今回は
- UPDATE文の構文
- UPDATE文で複数の列の更新
- サブクエリの利用
- 相関問い合わせの利用
- UPDATE文の注意点【全件更新】
の順でご紹介します。
UPDATE文の構文
UPDATE文の構文は、次のようになっています。
UPDATE <表名> SET <列名>=<値> [WHERE 条件式];
SET ~ の部分で行をどのような値で更新するか指定します。
また、WHEREでどの行を更新するかを指定できます。
例として、次のテーブルを更新してみます。
SELECT * FROM student;
UPDATE文の具体例としては次のようになります。
UPDATE student
SET student_hight = 175
WHERE student_nm = '安藤';
更新の実行結果をSELECT文で表示した場合、次のようになります。
6行目の安藤さんのstudent_hightの項目が更新されたことが確認できますね。
UPDATE文で複数の列の更新
UPDATE文では、複数の列の更新をすることができます!
具体例としては次のような文になります。
UPDATE student
SET student_score = 50,
student_hight = 175
WHERE student_nm = '安藤';
更新の実行結果としては、次のようになります。
ちなみに、「student_score = 50」と「student_hight = 175」の順番を入れ替えた場合も正常に実行できます。
サブクエリの利用
UPDATE文でもサブクエリ(副問い合わせ)の利用ができます!
具体的には次のような文になります。
UPDATE student
SET student_hight = 185
WHERE student_score > (
SELECT student_score
FROM student
WHERE student_nm = '斎藤'
);
更新を実行した結果としては、次のようになります。
初めに
SELECT student_score
FROM student
WHERE student_nm = '斎藤'
の部分で、斎藤さんのstudent_score(=80)を選択しています。
その後にstudentテーブルのstudent_scoreが80より大きい生徒のstudent_hightを185に更新しています。
今回は、student_scoreが80より大きい生徒は田中さんだけなので、田中さんのstudent_hightを185に更新しています。
相関問い合わせの利用
UPDATE文では、相関問い合わせも利用できます!
次のような2つのテーブルがあります。
SELECT * FROM student;
SELECT * FROM student_score;
相関問い合わせの文は具体的には次のようになります。
UPDATE student s
SET student_score = (
SELECT student_score
FROM student_score sscore
WHERE s.student_nm = sscore.student_nm
);
このようにすることで、studentテーブルとstudent_scoreテーブルのstudent_nmが同じ行のstudent_scoreを更新することができます。
実行結果をSELECT文で表示した場合、次のようになります。
student_nmが同じ斎藤さん、田中さんのスコアが更新されていることが確認できます。
【注意点】
student_nmが同じでない部分のスコアがnullに更新されている部分に注意が必要です。
UPDATEで相関問い合わせを利用した場合、該当するものがない列はnullに更新されます。
気をつけるようにしましょう。
UPDATE文の注意点【全件更新】
UPDATE文の注意点としては、WHERE句でどの行を更新するか指定しないと全件更新してしまうことです!
具体的な文としては次のようになります。
UPDATE student
SET student_hight = 175;
この文を実行してしまうと、studentテーブルすべてのデータのstudent_hight =が175に更新されてしまいます。
COMMIT前であればロールバックでデータを戻せます。
しかし、COMMITした後であれば変更を戻すことができません。
データ数が多い場合は、戻す作業が大変になるので気をつけてくださいね。
実務の場合はバックアップを取ってることも多いねんけどな。
ただ、先輩にバックアップから戻すお願いをするのは申し訳ないから、ミスしないように気をつけよな!
まとめ
いかがでしたか?
今回は、Oracle DBのUPDATE文について
- UPDATE文【行の更新】
- UPDATE文の構文
- UPDATE文で複数の列の更新
- サブクエリの利用
- 相関問い合わせの利用
- UPDATE文の注意点【全件更新】
の順番でご紹介しました!
UPDATE文はOracle DB以外でも利用します。
ぜひ、身に付けてみてくださいね!
☟あわせて読みたい 「しう」のオススメブログ
コメント