Oracle SQL 利用UPDATE语句计算税收工资
Teacher2表中,工资在8001200元范围内的缴纳5%的所得税,超过1200元的缴纳10%所得税,其余情况不缴税,依此规则计算税收。
分析:本例给出两种语句执行方式,共四种方法,在采用四种方法进行计算之前需要从teacher表中复制出新的teacher2数据表,代码如下所示。
方法1
IF EXISTS(SELECT * FROM teacher2)
DROP table teacher2  --删除旧表
SELECT * INTO teacher2 FROM teacher; --复制新表
UPDATE  Teacher2 --计算税收工资
set sal =
    case
        when    sal>=800 and sal<= 1200    then  sal*0.95
        when    sal>1200  then  sal*0.9
    else sal
    end
更新后表teacher2的数据如图所示。
利用UPDATE语句计算税收工资
方法2:在方法1的基础上改变两行when语句的执行顺序,代码如下所示:
IF EXISTS(SELECT * FROM teacher2)
DROP table teacher2  --删除旧表
SELECT * INTO teacher2 FROM teacher; --复制新表
UPDATE  teacher2 --计算税收工资sql中update什么意思
set sal =
    case
        when    sal>1200  then  sal*0.9
        when    sal>=800 and sal<= 1200    then  sal*0.95
    else sal
    end
执行结果与方法1相同。
方法3:把上述代码改为两行UPDATE语句,则情况就不同了:
IF EXISTS(SELECT * FROM teacher2)
DROP table teacher2  --删除旧表
SELECT * INTO teacher2 FROM teacher; --复制新表
UPDATE  teacher2 --计算8001200范围内的税收工资
SET sal =sal*0.95
WHERE  sal>=800 and sal<= 1200 
UPDATE  teacher2 --计算高于1200的税收工资
SET sal =sal*0.90
WHERE  sal>1200
运行结果为:
(18行受影响)
(8行受影响)
(9行受影响)
teacher2的数据如图所示。
方法3的结果
方法4:在方法3的基础上,如果把两行UPDATE语句的顺序调整一下,代码如下所示:
IF EXISTS(SELECT * FROM teacher2)
DROP table teacher2  --删除旧表
SELECT * INTO teacher2 FROM teacher; --复制新表
UPDATE  Teacher2 --计算高于1200的税收工资
SET sal =sal*0.90
WHERE  sal>1200
UPDATE  Teacher2 --计算8001200范围内的税收工资
SET sal =sal*0.95
WHERE  sal>=800 and sal<= 1200 
则运行结果为:
(18行受影响)
(9行受影响)
(11行受影响)
teacher2的数据如图所示。
由此看来,结果与方法3不一样。
  方法4的结果
注意 UPDATE语句由于是改变数据,因此要特别注意更新过程中的语句执行顺序,不同的顺序可能会产生不同的结果。如在本例中,两条UPDATE语句如果改变了执行顺序,则工资大于1200元的教师可能需要交两次税,第一次是交10%的税,交完后工资如果还在8001200范围之内,那么还需要交5%的税。
SQL语句中的CASE语句与高级语言中的SWITCH语句相似,适用于一个条件判断有多种值的情况下分别执行不同的操作。灵活应用CASE语句可以让SQL变得简洁高效,可以明显减少遍历要查询表的次数,从而大大提高了执行效率。
因此,在上述方法中,方法4是错误的,方法3虽然是对的,但不推荐这种写法,方法1和方法2是同一种方法,但从习惯上来说,建议按方法1的顺序来写。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。