SQLのUPDATE文とは?UPDATE文の基本の使い方を詳しく紹介!
SQLのUPDATE文とは?
SQLはリレーショナルデータベースを操作する時に使用する言語です。SQLには四大命令文のSELECT、INSERT、UPDATE、DELETEがあります。データベースはOracle、SQL Server、MySQLなど様々な製品がありますが、SQLの基本文法はどれも同じです。
データベースに対してSELECT文は選択、INSERT文は追加、DELETE文は削除を行い、今回説明するUPDATE文は更新ができます。UPDATE文が更新するデータベースの対象はテーブルと言われ、複数のカラム(列)を持つレコード(行)の構造になっています。
サンプルのテーブル
以下のような「Test」という名前のテーブルがあるとします。id・name・age・statusがカラムで、3件のレコードがあります。
id name age status
1 山田太郎 30 教師
2 鈴木花子 17 高校生
3 佐藤一郎 9 中学生
このテーブルをSQLで更新しましょう。UPDATE文の基本文法は以下のようになります。
UPDATE テーブル名 SET カラム名=値
UPDATE SETだけだと全てのカラムが更新される
では実際にUPDATE文を実行してみましょう。
UPDATE Test SET age=10
実行すると、テーブルは以下のようになります。ageのカラムが全て10に更新されます。なおテーブルの内容を全て表示するSQL文は「SELECT * FROM Test」です。
id name age status
1 山田太郎 10 教師
2 鈴木花子 10 高校生
3 佐藤一郎 10 中学生
UPDATEとSETだけの場合、全てのレコードが更新されます。しかし実際には特定のレコードだけ更新したいことが多いでしょう。それにはどうしたらよいのでしょうか。
WHERE節で1つのレコードだけ更新できる
特定のレコードだけを更新する場合、以下のようにUPDATE文にWHERE節の条件文を追加します。
UPDATE テーブル名 SET カラム名=値 WHERE カラム名=値
それでは以下を実行します。
UPDATE Test SET age=15 WHERE name=’鈴木花子’
これで以下のようにnameが鈴木花子のレコードだけが更新されました。
id name age status
1 山田太郎 30 教師
2 鈴木花子 15 高校生
3 佐藤一郎 9 中学生
なお=を!=にすると等しくないという意味になります。以下を実行すると、
UPDATE Test SET age=15 WHERE name!=’鈴木花子’;
以下のようになります。nameが鈴木花子以外のレコードが更新されました。
id name age status
1 山田太郎 15 教師
2 鈴木花子 17 高校生
3 佐藤一郎 15 中学生
ANDとOR
WHERE節にはANDを使うことができます。AでかつBという意味です。以下を実行すると、
UPDATE Test SET age = 3 WHERE id=2 AND age=17
以下のようになります。
1 山田太郎 30 教師
2 鈴木花子 3 高校生
3 佐藤一郎 9 中学生
ORも使用できます。ORはまたはという意味です。以下を実行すると、
UPDATE Test SET age = 3 WHERE id=1 OR age=17
以下のようになります。2件のレコードが更新されていますね。
id name age status
1 山田太郎 3 教師
2 鈴木花子 3 高校生
3 佐藤一郎 9 中学生
BETWEEN ANDは範囲指定が可能
BETWEEN ANDを使うと、範囲指定ができます。以下を実行すると、
UPDATE Test SET status=’十代の若者’ WHERE age BETWEEN 10 AND 19;
以下のようになります。指定する2つの数字は~以上~以下で、その値も含むことに注意してください。
id name age status
1 山田太郎 30 教師
2 鈴木花子 17 十代の若者
3 佐藤一郎 9 中学生
INはリスト指定が可能
INを使うと指定したリストにマッチするレコードを対象にできます。以下のようにすると、
UPDATE Test SET status=’十代の奇数年齢’ WHERE age IN(11,13,15,17,19);
以下のようになります。条件の合う真ん中のレコードだけが更新されています。
1 山田太郎 30 教師
2 鈴木花子 17 十代の奇数年齢
3 佐藤一郎 9 中学生
LIKEで文字列マッチングが可能
LIKEを使うと文字列のマッチングができます。以下のようにすると、
UPDATE Test SET status=’花を含む’ WHERE name LIKE ‘%花%’;
以下のようにnameに’花’が含まれるレコードが更新されます。
id name age status
1 山田太郎 30 教師
2 鈴木花子 17 花を含む
3 佐藤一郎 9 中学生
以下のようにすると、
UPDATE Test SET status=’名字が〇田で名前が2文字’ WHERE name LIKE ‘_田__’;
以下のようになります。
id name age status
1 山田太郎 30 名字が〇田で名前が2文字
2 鈴木花子 17 高校生
3 佐藤一郎 9 中学生
LIKEで%は0文字以上の連続する文字列、_は任意の1文字という意味です。わかりにくいかもしれませんが、色々と試せば理解できるでしょう。
SETは2つ以上の更新内容を記述できる
なおUPDATE文のSETは,で区切って2つ以上の更新内容を記述することができます。以下のようにすれば、
UPDATE Test SET age=6,status=’小学生’ WHERE name=’鈴木花子’
以下のように2か所が更新されます。
id name age status
1 山田太郎 30 教師
2 鈴木花子 6 小学生
3 佐藤一郎 9 中学生
計算式を使うことも可能
SQLのUPDATE文は計算式を使うこともできます。以下を実行すると、
UPDATE Test SET age = age + 5
以下のようになります。全てのageに5が加算されます。なお計算式の場合の=は「等しい」という意味ではなく、「右辺を左辺に代入する」という意味で使われているので注意してください。
id name age status
1 山田太郎 35 教師
2 鈴木花子 22 高校生
3 佐藤一郎 14 中学生
CASE節も使える
SQLにはCASE節という条件分岐ができる構文があります。UPDATE文にもこれを使用できます。CASE文は以下のように記述します。
UPDATE テーブル名 SET カラム名 = WHEN CASE 条件 THEN 条件が成り立つ時の処理 ELSE 条件が成り立たない時の処理 END
今回のサンプルのテーブルに対して以下を実行してみましょう。ageが10を超える場合は2倍、そうでなければ5を引きます。
UPDATE Test SET age = CASE WHEN age > 10 THEN age*2 ELSE age-5 END
結果は以下のようになります。
id name age status
1 山田太郎 60 教師
2 鈴木花子 34 高校生
3 佐藤一郎 4 中学生
ORDER BYとLIMITを活用する
SQLのUPDATE文でORDER BYとLIMITを使うと便利な時があります。以下はIDを昇順に評価して、上位2件までを更新します。
UPDATE Test SET age = 50 ORDER BY id LIMIT 2
結果は以下になります。idが1と2のレコードが対象になっています。
id name age status
1 山田太郎 50 教師
2 鈴木花子 50 高校生
3 佐藤一郎 9 中学生
以下のようにDESCを使うと降順で評価されます。
UPDATE Test SET age = 50 ORDER BY id DESC LIMIT 2
今度はidが2と3のレコードが対象になっています。
id name age status
1 山田太郎 30 教師
2 鈴木花子 50 高校生
3 佐藤一郎 50 中学生
SQLのUPDATE文は更新をするための命令文
SQLのUPDATE文について解説しましたが、ご理解頂けましたでしょうか。
SQLの4大命令はデータベースエンジニアにとって基本の必須知識なので、しっかりマスターしてSQLを使いこなしましょう。
FEnetを運営しているネプラス株式会社はサービス開始から10年以上
『エンジニアの生涯価値の向上』をミッションに掲げ、
多くのインフラエンジニア・ネットワークエンジニアの就業を支援してきました。
ネプラス株式会社はこんな会社です
秋葉原オフィスにはネプラス株式会社をはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
インフラ業界に特化
ネットワーク・サーバー・データベース等、ITインフラ業界に特化。Cisco Systemsプレミアパートナーをはじめ各種ベンダーのパートナー企業です。
業界を知り尽くしているからこそ大手の取引先企業、経験豊富なエンジニアに選ばれています。
-
正社員なのにフリーランスのような働き方
正社員の方でも希望を聞いたうえでプロジェクトをアサインさせていただいており、フリーランスのような働き方が可能。帰社日もありません。
プロジェクト終了後もすぐに次の案件をご紹介させていただきますのでご安心ください。
-
大手直取引の高額案件
案件のほとんどが大手SIerやエンドユーザーからの直取引のためエンジニアの皆様へに高く還元できています。
Ciscoをはじめ、Juniper、Azure、Linux、AWS等インフラに特化した常時300件以上の案件があります。
-
スキルアップ支援
不要なコストを削減し、その分エンジニアの方へのスキルアップ支援(ネットワーク機器貸出、合格時の受験費用支給など)や給与で還元しています。
受験費用例)CCNP,CCIE:6-20万円、JNCIS:3-4万円、AWS:1-3万円など
※業務に関連する一定の資格のみ。各種条件がありますので詳しくは担当者へにお尋ねください。
-
現給与を保証します!※
前職の給与保証しており、昨年度は100%の方が給与アップを実現。収入面の不安がある方でも安心して入社していただけます。
※適用にはインフラエンジニアの業務経験1年以上、等一定の条件がございます。
-
インセンティブ制度
ネットワーク機器の販売・レンタル事業等、売上に貢献いただいた方にはインセンティブをお支払いしています。
取引先企業とエンジニア側、双方にメリットがあり大変好評をいただいています。
-
社会保険・福利厚生
社員の方は、社会保険を完備。健康保険は業界内で最も評価の高い「関東ITソフトウェア健康保険組合」です。
さらに様々なサービスをお得に利用できるベネフィットステーションにも加入いただきます。
-
東証プライム上場企業グループ
ネプラスは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
ネプラス株式会社に興味を持った方へ
ネプラス株式会社では、インフラエンジニアを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
オンライン面接も随時受付中。ぜひお気軽にご応募ください。
Oracle新着案件New Job
-
【高額年収】/基盤運用保守/東京都千代田区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/在宅勤務
年収600万~720万円東京都千代田区(溜池山王駅) -
【高額年収】/国内クラウドシステムのサーバ運用保守/東京都新宿区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/在宅勤務
年収600万~720万円東京都新宿区(東新宿駅) -
国内クラウドシステムのサーバ構築のテスター/東京都新宿区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/在宅勤務
年収300万~420万円東京都新宿区(東新宿駅) -
【高額年収】/カスタマイズサービスの運用保守/東京都23区西部/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/在宅勤務
年収600万~720万円東京都23区西部(-駅) -
カスタマイズサービス設計構築のテスター/東京都23区西部/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/在宅勤務
年収300万~420万円東京都23区西部(-駅) -
【高額年収】/インフラ運用保守/Oracle/神奈川県横浜地域/【WEB面談可】/在宅勤務/20代~40代の方活躍中
年収600万~720万円神奈川県横浜地域(-駅)