目录
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 的原因
UPDATE 语句练习②
将月收入前3名的员工月薪减 100 ,使用 LIMIT 子句完成。
“UPDATE” - SQL语句演示案例②:(首先按照月收入排成降序,然后取前3条记录,然后再执行 "UPDATE" 的操作)
UPDATE t_emp SET sal = sal - 100 ORDER BY sal + IFNULL(comm,0) DESC LIMIT 3;
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;
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” 的语法。