Database MariaDB/MySQL インフラ

[MySQL/MariaDB] ”update”文でデータ更新

2018年9月3日

こんにちは!シミダイ(@shimidai2100)です。

MySQL/MariaDBのデータ更新SQL、「update」文について紹介します。

update」文は、「insert」、「delete」と同様にDML(Data Manipulation Language )と呼ばれ、データを操作するSQL文になります。


基本構文:update ~ set

update文の基本構文は以下になります。

update <テーブル名>
set
    <列名①> = <列①の値>,
    <列名②> = <列②の値>,
    <列名③> = <列③の値>...
WHERE
    <条件>
;

下がサンプルのinsert文になります。

MariaDB [test001]> select *
    ->   from EMPLOYEE;
+-------+-------------+--------+
| EMPNO | NAME        | SALARY |
+-------+-------------+--------+
| 00001 | TARO TANAKA | 300000 |
+-------+-------------+--------+
1 row in set (0.00 sec)

MariaDB [test001]>
MariaDB [test001]> update EMPLOYEE
    -> set
    ->     NAME = 'HANADA YAMADA',
    ->     SALARY = 500000
    -> WHERE
    ->     EMPNO = '00001'
    -> ;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [test001]> commit;
Query OK, 0 rows affected (0.00 sec)

MariaDB [test001]>
MariaDB [test001]> select *
    ->   from EMPLOYEE;
+-------+---------------+--------+
| EMPNO | NAME          | SALARY |
+-------+---------------+--------+
| 00001 | HANADA YAMADA | 500000 |
+-------+---------------+--------+
1 row in set (0.00 sec)

別表で取得した列値で更新

別表で取得した列値で更新するのは以下になります。

update <テーブルA>,
       <テーブルB>
set
    <A.列名①> = <B.列名①>
    <A.列名②> = <B.列名②>
    <A.列名③> = <B.列名③>
WHERE
    <条件>
;

下がサンプルのupdate文になります。

以下の例では2つ目の表には副問い合わせを使用しています。

MariaDB [test001]> select *
    ->   from EMPLOYEE;
+-------+-------------+--------+
| EMPNO | NAME        | SALARY |
+-------+-------------+--------+
| 00001 | TARO TANAKA | 300000 |
+-------+-------------+--------+
1 row in set (0.00 sec)

MariaDB [test001]> select *
    ->   from SUB_EMPLOYEE;
+-------+-------------+--------+
| EMPNO | NAME        | SALARY |
+-------+-------------+--------+
| 00001 | ICHIRO SATO | 700000 |
+-------+-------------+--------+
1 row in set (0.00 sec)

MariaDB [test001]> update EMPLOYEE E,
    ->       (select NAME,
    ->               SALARY
    ->         from SUB_EMPLOYEE
    ->        where EMPNO = '00001') SE
    -> set
    ->     E.NAME = SE.NAME,
    ->     E.SALARY = SE.SALARY
    -> WHERE
    ->     EMPNO = '00001'
    -> ;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [test001]> commit;
Query OK, 0 rows affected (0.00 sec)

MariaDB [test001]> select *
    ->   from EMPLOYEE;
+-------+-------------+--------+
| EMPNO | NAME        | SALARY |
+-------+-------------+--------+
| 00001 | ICHIRO SATO | 700000 |
+-------+-------------+--------+
1 row in set (0.00 sec)

 

関連記事

-Database, MariaDB/MySQL, インフラ

Copyright© shimidai2100 , 2020 All Rights Reserved.