• 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);
  • 相关阅读:
    .NetCore~框架版本号不同引起dotnet不能run它
    Linux~centos上安装.netcore,HelloWorld归来!
    Lind.DDD.Utils.HttpHelper里静态对象引出的Http超时问题
    [置顶] C++ Pirate: Lambda vs Bind
    如何成为CSDN博客专家
    MFC下的日历表
    世界上最便宜的10张防癌处方
    android权限大全
    应用程序管理集
    谢希仁《计算机网络》第五版---第四章
  • 原文地址:https://www.cnblogs.com/waterr/p/13958962.html
Copyright © 2020-2023  润新知