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);
  • 相关阅读:
    整型
    圆的面积和周长
    买菜
    keil 生成 bin 文件 gd32为例
    内存中 1k 代表什么
    正反转 步进电机 驱动器 编码器
    stlink 无法再keil中识别 按下复位键可以识别
    单片机的时钟,系统时钟
    db9串口接头的定义
    E面波导和H面波导的问题
  • 原文地址:https://www.cnblogs.com/waterr/p/13958962.html
Copyright © 2011-2022 走看看