zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    洛谷P1199三国游戏
    Cracking the Coding Interview 6.2
    Cracking the Coding Interview 5.2
    Cracking the Coding Interview 5.7
    洗牌算法
    字符串排列组合问题
    指针作为形参
    KMP算法代码
    搜索二叉树
    面试题集锦
  • 原文地址:https://www.cnblogs.com/waterr/p/13958962.html
Copyright © 2011-2022 走看看