2024.06.21
【SQL】UPDATE文の基本と使い方!複数レコードの更新方法
UPDATE文は、SQLを学ぶうえで必要になる知識です。新人エンジニアから卒業するためには、身につけておかなければいけません。
そこで本記事では、UPDATE文の基本や使い方、注意点などを例文を挙げて解説します。今現在、UPDATE文を学んでいるエンジニアはぜひ参考にしてください。
目次
SQL|UPDATE文の基本
SQLのUPDATE文とは、データベース内にあるデータを後から変更する際に用いるコマンドです。身の回りのシステムでたとえると、一度投稿した文章を書き換えるときなどに用いられます。以下の値や条件などを指定することで、どの部分をどのように処理するのかを細かく設定できます。
この章ではそれぞれどのような役割があるのか、どのような書き方をするのかを解説します。
UPDATE
UPDATEは表の名前を指定するコードです。書き方としては以下のとおりです。
UPDATE 表の名前 |
たとえば「食べ物」という名前の表に変更をくわえる場合は、以下のようにコードを書きます。
UPDATE 食べ物 |
複数の表が存在する場合、UPDATEで表の名前を指定しないと、どの表に変更を適応させるのかわかりません。そのため、コードを実行してもエラーが出てしまいます。
また表の名前を指定することで、後からエンジニアが確認したときにどの表の変更を指定しているコードなのかを直感的に判断することが可能です。ヒューマンエラーを防ぐ意味でも重要なコードになります。
SET
表の内容を変更する際は、表のなかのどの部分を変更するのか指定する必要があります。その際に用いるのがSETです。
SETを使用することで、変更をくわえる列と変更後の値を指定できます。書き方は以下のとおりです。
SET 変更する列の名前 = 変更後の値 |
なお、SETでは複数の列の変更を指定できます。その際は以下のようにコードを書きましょう。
SET 変更する列1の名前 = 変更後の値,変更する列2の名前 = 変更後の値 |
このように、列の名前と変更後の値を「,」で区切るのが基本です。
WHERE
WHEREは、条件づけを行う際に使用するコードです。SETよりも細かく条件を設定でき、表のどの部分をどのように変更するのかを入力します。書き方は以下のとおりです。
WHERE 条件 |
上記のように、WHEREの後に条件式を書くのが一般的です。条件に当てはまる箇所のデータがSETで指定した内容に変更されます。
なお、WHEREに限り省くことが可能です。省略した場合は、すべての行に対して変更が反映されるので注意しましょう。
SQL|UPDATE文の使い方
この章では、UPDATE文の基本的な使い方として、以下の5つの方法を解説します。
なお、レコードとは行のことを指します。
すべてのレコードを更新する方法
はじめに、すべてのレコードを更新する方法です。コードの書き方としては、以下のように表の名前とレコードを更新する列を指定します。
UPDATE 表の名前 SET 更新する列の名前 = 変更後の値 |
たとえば、以下の「メニュー」という表に変更をくわえるとします。
番号 | 名前 | 値段 | ドリンク |
---|---|---|---|
1 | オムライス | 700 | null |
2 | カレー | 900 | null |
3 | ステーキ | 1300 | null |
4 | ナポリタン | 700 | null |
5 | ピザ | 800 | null |
「ドリンク」というレコードのすべてに「ドリンク付き」という値を入れたい場合、以下のようなコードを書きます。
UPDATE メニュー SET ドリンク = ‘ドリンク付き’ |
上記のコードを実行することで、以下のように表を変更することが可能です。
番号 | 名前 | 値段 | ドリンク |
---|---|---|---|
1 | オムライス | 700 | ドリンク付き |
2 | カレー | 900 | ドリンク付き |
3 | ステーキ | 1300 | ドリンク付き |
4 | ナポリタン | 700 | ドリンク付き |
5 | ピザ | 800 | ドリンク付き |
補足として、WHEREは記入する必要はありません。省略しても正確な結果が実行されます。
指定したレコードを更新する方法
続いて、指定したレコードだけを更新する方法です。UPDATEやSETの後にWHEREで条件づけを行うことで、特定のレコードに対して変更を適用させることができます。コードの書き方としては以下のとおりです。
UPDATE 表の名前 SET 更新する列の名前 = 変更後の値 WHERE 条件 |
たとえば、以下の「メニュー」という表に変更をくわえるとします。
番号 | 名前 | 値段 | ドリンク |
---|---|---|---|
1 | オムライス | 700 | ドリンク付き |
2 | カレー | 900 | ドリンク付き |
3 | ステーキ | 1300 | ドリンク付き |
4 | ナポリタン | 700 | ドリンク付き |
5 | ピザ | 800 | ドリンク付き |
上記の表において「ナポリタン」の値段を「800」に変更する場合、以下のようにコードを書きます。
UPDATE メニュー SET 値段 = 800 WHERE 番号=4; |
上記のコードを実行することで、先ほどの表は以下のように変更されます。
番号 | 名前 | 値段 | ドリンク |
---|---|---|---|
1 | オムライス | 700 | ドリンク付き |
2 | カレー | 900 | ドリンク付き |
3 | ステーキ | 1300 | ドリンク付き |
4 | ナポリタン | 800 | ドリンク付き |
5 | ピザ | 800 | ドリンク付き |
なお、WHEREで条件を指定する方法には、番号以外にもさまざまな方法があります。
複数列を一括で更新する方法
次に複数の列を一度に更新する方法です。この場合、SETの部分で変更する列と変更後の値を「,」で区切ります。コードの書き方は以下のとおりです。
UPDATE 表の名前 SET 変更する列①の名前 = 変更後の値,変更する列②の名前 = 変更後の値 |
たとえば、以下のような「同窓会」という表に変更をくわえるとする
番号 | 名前 | 出欠 | 食事 | 来場方法 |
---|---|---|---|---|
1 | 田中 | 欠席 | 不要 | 車 |
2 | 遠藤 | 欠席 | 不要 | 電車 |
3 | 森 | 欠席 | 不要 | 車 |
4 | 一ノ瀬 | 欠席 | 不要 | 車 |
5 | 綾部 | 欠席 | 不要 | バス |
「出欠」と「食事」の列をそれぞれ「出席」と「必要」に変更する場合、以下のようなコードを書きましょう。
UPDATE 同窓会 SET 出欠 =出席,食事 = 必要 |
こちらのコードを実行することで、以下のような結果が出力されます。
番号 | 名前 | 出欠 | 食事 | 来場方法 |
---|---|---|---|---|
1 | 田中 | 出席 | 必要 | 車 |
2 | 遠藤 | 出席 | 必要 | 電車 |
3 | 森 | 出席 | 必要 | 車 |
4 | 一ノ瀬 | 出席 | 必要 | 車 |
5 | 綾部 | 出席 | 必要 | バス |
ひとつの文章で複数の列に変更をくわえられるので、文章を簡潔で短くすることができます。注意点としては「,」を忘れないようにしましょう。
複数行を一括で更新する方法
複数行を一度に更新する場合は、INを利用するのが一般的です。たとえば、以下の「メニュー」という表に変更をくわえるとします。
番号 | 名前 | 値段 | ドリンク |
---|---|---|---|
1 | オムライス | 700 | ドリンク付き |
2 | カレー | 900 | ドリンク付き |
3 | ステーキ | 1300 | ドリンク付き |
4 | ナポリタン | 800 | ドリンク付き |
5 | ピザ | 800 | ドリンク付き |
「オムライス」と「ピザ」の値段を「650」にしたい場合、以下のようなコードを書きます。
UPDATE メニュー SET 値段 = 650 WHERE 名前 IN (‘オムライス’,’ピザ’); |
こちらのコードを実行することで、以下のような結果が得られます。
番号 | 名前 | 値段 | ドリンク |
---|---|---|---|
1 | オムライス | 650 | ドリンク付き |
2 | カレー | 900 | ドリンク付き |
3 | ステーキ | 1300 | ドリンク付き |
4 | ナポリタン | 800 | ドリンク付き |
5 | ピザ | 650 | ドリンク付き |
このようにINを用いることで、ひとつのUPDATE文で複数の行の更新を行うことができます。コードが冗長にならずに済むので便利です。
副問い合わせを使用して更新する方法
副問い合わせを使用することで、ほかの表からデータを引用できます。たとえば、以下のような「同窓会」という表に変更をくわえるとします。
番号 | 名前 | 出欠 | 食事 | 来場方法 | 子ども |
---|---|---|---|---|---|
1 | 田中 | 欠席 | 不要 | 車 | null |
2 | 遠藤 | 欠席 | 不要 | 電車 | null |
3 | 森 | 欠席 | 不要 | 車 | null |
4 | 一ノ瀬 | 欠席 | 不要 | 車 | null |
5 | 綾部 | 欠席 | 不要 | バス | null |
「子ども」の列に更新をくわえる際、SETにて列を指定する方法がありますが、それではすべてのレコードが同じ値になってしまいます。しかし、UPDATE文では以下のように別の表からデータを引用可能です。
番号 | 名前 | 子ども |
---|---|---|
1 | 田中 | 有 |
2 | 遠藤 | 無 |
3 | 森 | 有 |
4 | 一ノ瀬 | 無 |
5 | 綾部 | 有 |
上記の「子どもの有無」という表の「子ども」からデータを引用して「同窓会」の「子ども」の列を更新するとします。その際は、以下のコードを書きましょう。
UPDATE 同窓会 SET 同窓会.子ども=(SELECT 子どもの有無.子ども FROM 子どもの有無 WHERE 同窓会.番号=子どもの有無.番号); |
こちらのコードを実行することで、以下のような表が表示されます。
番号 | 名前 | 出欠 | 食事 | 来場方法 | 子ども |
---|---|---|---|---|---|
1 | 田中 | 欠席 | 不要 | 車 | 有 |
2 | 遠藤 | 欠席 | 不要 | 電車 | 無 |
3 | 森 | 欠席 | 不要 | 車 | 有 |
4 | 一ノ瀬 | 欠席 | 不要 | 車 | 無 |
5 | 綾部 | 欠席 | 不要 | バス | 有 |
SQL|UPDATE文の注意点
UPDATE文にはいくつかの注意点が存在します。そのなかでも、以下の2点にはとくに注意しましょう。
複雑なSQL文を避ける
SQL文は複雑すぎるものにならないようにしましょう。なぜなら、さまざまな不具合が生じるからです。
たとえばSQL文が長くなりすぎてしまうと、どのような処理をしているのか、どこにどのコードが書かれているのか簡単には見つけられません。そのため、作業効率が一気に落ちてしまうでしょう。
また、コードが長くなるとその分入力ミスやバグが発生する可能性が高くなります。原因を見つけるのも難しくなるという点でもデメリットです。
UPDATE文でさまざまな処理を施すと、それだけSQL文は長くなる傾向にあります。意識していないと複雑な文章になってしまうので注意しましょう。
ほかの表との整合性を確認する
副問い合わせを用いてほかの表から引用を行う場合、さまざまなことに注意しなければいけません。たとえば、そのデータの信頼性や整合性です。引用するデータが正しい情報であるかを確認しないと、引用先の表に悪影響を及ぼしてしまいます。
また、引用したデータを後から再変更をくわえる際、エラーが生じるケースもあります。こうした不具合を避けるためにも、引用元を明確にしつつ、指示書や変更内容を参照して処理を行うようにしましょう。
UPDATE文を使いこなそう
UPDATE文を用いることで、表に含まれるデータを変更することができます。変更するデータの位置はSETやWHEREによる指示で柔軟に指定でき、書き方には決まりがあります。
さらには副問い合わせを用いることで、ほかの表からデータを引用可能です。1から調べる必要がないので便利ですが、引用元などを明確にしつつ整合性を確認する必要があります。
投稿者
-
システム開発、Webサイト制作、ECサイトの構築・運用、デジタルトランスフォーメーション(DX)など、デジタルビジネスに関わる多岐の領域において、最新のトレンド情報や実践的なノウハウを発信してまいります。
新着情報
同じカテゴリの記事
新着記事
人気の記事