MariaDB/MySQL

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

2018年9月3日

こんにちは!土門大貴(daikidomon)です。

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)
 

関連記事

-MariaDB/MySQL

Copyright© スタートアップIT企業社長のブログ , 2020 All Rights Reserved.