25_MySQL 数据操作语言:UPDATE语句
-- UPDATE 把每个员工的编号和上司的编号都加1,用 ORDER BY 完成 UPDATE t_emp SET empno=empno+1,mgr=mgr+1 ORDER BY empno DESC;
把月收入前三名的员工底薪减100元,用limit完成 UPDATE t_emp SET sal=sal-100 ORDER BY sal+IFNULL(comm,0) DESC LIMIT 3;
把10部门中,工龄超过20年的员工,底薪增加200元 UPDATE t_emp SET sal=sal+200 WHERE deptno=10 AND DATEDIFF(NOW(),hiredate)/365>=20; -- 把ALLEN调往RESRARCH部门,职务调整为ANALYST 正常来说应该这么写:(涉及到员工表和部门表) UPDATE t_emp e JOIN t_dept d ON e.deptno=d.deptno SET e.deptno=d.deptno,e.job="ANALYST" WHERE e.ename="ALLEN" AND d.dname="RESRARCH" 但是这么写是错误的,当把两张表通过部门编号连接在一起之后,WHERE语句相当于把Allen锁死在了RESRARCH部门,但他不在这么部门,这道题的有意思之处在于虽然我们把两张表进行了链接但是却不能使用ON语句,正确答案就是去掉on语句 UPDATE t_emp e JOIN t_dept d SET e.deptno=d.deptno,e.job="ANALYST" WHERE e.ename="ALLEN" AND d.dname="RESRARCH"; -- 记住这道题吧
-- 把底薪低于公司平均底薪的员工,底薪增加150元 UPDATE t_emp e JOIN (SELECT AVG(sal) AS avg FROM t_emp) t SET e.sal=e.sal+150 WHERE e.sal<=t.avg;
-- 把没有部门的员工,或者sales部门低于2000元底薪的员工,都调往20部门 UPDATE t_emp e 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);