MySQL数据操作语言:UPDATE

UPDATE语句

  • UPDATE语句用于修改表的记录
UPDATE [IGNORE] 表名
SET 字段1=值1, 字段2=值2,...
[WHERE 条件1 ...]
[ORDER BY ...]
[LIMIT ...];
  • 这里的LIMIT只能写一个参数
  • 执行顺序:UPDATE-> WHERE-> ORDER BY-> LIMIT-> SET

练习

  1. 把每个员工的编号和上司的编号+1,用ORDER BY子句完成
update t_emp set empno=empno+1,mgr=mgr+1
order by empno desc;
  1. 把月收入前三名的员工底薪减100元,用LIMIT子句完成
update t_emp set sal=sal-100
order by sal+ifnull(comm,0) desc limit 3;
  1. 把10部门中,工龄超过20年的员工,底薪增加200元
update t_emp set sal=sal+200
where deptno=20 and datediff(now(),hiredate)/365>20;

UPDATE语句的表连接

  • 因为相关子查询效率非常低,所以我们可以利用表连接的方式来改造UPDATE语句
UPDATE 表1JOIN 表2 ON 条件
SET 字段1=值1, 字段2=值2...;
  • 表连接的UPDATE语句可以修改多张表的记录
  • UPDATE语句的表连接可以演变成下面的样子
UPDATE 表1, 表2
SET 字段1=值1, 字段2=值2, WHERE 连接条件;
  • 把ALLEN调往RESEARCH部门,职务调整为ANALYST,并修改RESEARCH部门的地点为北京
update t_emp e join t_dept d
set e.deptno=d.deptno,e.job="ANALYST",d.loc="北京"
where e.ename="ALLEN" and d.dname="RESEARCH";

练习

  • 把底薪低于公司平均底薪的员工,底薪增加150元
update t_emp e join (select avg(sal) avg from t_emp) s
on where e.sal<s.avg
set e.sal=e.sal+150;

UPDATE语句的左右连接

  • UPDATE语句的表连接既可以是内连接,又可以是外连接
UPDATE 表1 [LEFT | RIGHT] JOIN 表2 ON 条件
SET 字段1=值1,字段2=值2,...;
  • 把没有部门门的员工,或者SALES部门]低于2000元底薪的员工,都调往20部门
update t_emp e left join t_dept d on e.deptno=d.deptno
set e.deptno=20
where e.deptno is null or (d.dname="SALES" and e.sal<2000);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容