MySQL学习之数据更新操作详解

UPDATE 语句

UPDATE 语句用于修改表的记录,语法如下

UPDATE IGNORE 表名
SET 字段1=值1, 字段2=值2, 字段3=值3, ......
WHERE 条件1 ......
ORDER BY ......
LIMIT ......;

-- 注意:IGNORE - 是可选条件,使用后,会针对有冲突的修改记录忽略
-- 注意:WHERE - 也是可选条件,使用了就是有条件的修改记录;不使用就是无条件的修改记录,也就是针对全表范围进行记录的修改 
-- 注意:ORDER BY - 之所以使用排序主要是针对类似多条记录,批量递增的形式去修改(比如说员工工资的统一普调,员工工号的递增加1)。
-- 注意:LIMIT - UPDATE 语句中的 LIMIT 子句只能写一个参数,不能像之前那样写两个参数。

UPDATE 语句的执行顺序:UPDATE ---> WHERE ---> ORDER BY ---> LIMIT ---> SET

UPDATE 语句练习①

把每个员工的编号和上司的编号 +1 ,利用 “ORDER BY” 子句完成。

“UPDATE” - SQL语句演示案例①:

UPDATE t_emp
SET empno = empno + 1, mgr = mgr + 1
ORDER BY empno DESC;

-- 这里解释一下,为什么会这样。
-- 当我们更新第一个员工的工号 +1 的时候,实际上他的下一位员工编号是与当前员工编号 +1 的结果是冲突的,这就是我们使用 ORDER BY 的原因

MySQL学习之数据更新操作详解_第1张图片

UPDATE 语句练习②

将月收入前3名的员工月薪减 100 ,使用 LIMIT 子句完成。

“UPDATE” - SQL语句演示案例②:(首先按照月收入排成降序,然后取前3条记录,然后再执行 "UPDATE" 的操作)

UPDATE t_emp
SET sal = sal - 100
ORDER BY sal + IFNULL(comm,0) DESC
LIMIT 3;

MySQL学习之数据更新操作详解_第2张图片

UPDATE 语句练习③

将 10 部门中,工龄超过 20 年的员工,底薪增加 200 。

“UPDATE” - SQL语句演示案例③:(筛选 10 部门与工龄超过20年的员工写在 "WHERE" 子句即可,底薪增加 200 写在SET子句)

UPDATE t_emp
SET sal = sal + 200
WHERE deptno=10
AND DATEDIFF(NOW(),hiredate)/365 >= 20;

MySQL学习之数据更新操作详解_第3张图片

UPDATE 语句的表连接

因为相关子查询的效率非常低,所以我可以利用表连接的方式来改造 “UPDATE” 语句。

表连接的 “UPDATE” 语句可以修改多张表的记录。

UPDATE 语句的表连接的语法如下:(内连接方式)

UPDATE 表1 JOIN 表2 ON 条件
SET 字段1=值1, 字段2=值2, ......;

-- 这里的字段是比较有意思的,不是说 SET 关键字修改的字段只能来自一张表,它可以来自 被关联的任意一张表。

UPDATE 语句的表连接的语法如下:(内连接变种方式)

UPDATE 表1, 表2 
SET 字段1=值1, 字段2=值2, ......
WHERE 连接条件;

UPDATE 语句练习④

把 ALLEN 调往 “RESEARCH” 部门,职务调整为 “ANALYST”。

这个需求的 SQL 语句牵扯到两张表,这里呢我们可以通过子查询的方式来实现。但是 UPDATE 语句中的子查询为相关子查询,所以并不建议使用。比较合适的方式就是实用 “表连接” 的方式来实现,具体参考 “UPDATE 语句的表连接” 语法。

通过练习题的方式更鼓 “UPDATE” 的语法还是挺有意思的,可以开阔思路,有助于我们巩固 “UPDATE” 的语法。

到此这篇关于MySQL学习之数据更新操作详解的文章就介绍到这了,更多相关MySQL数据更新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(MySQL学习之数据更新操作详解)