欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

oracle菜鸟学习之 select case when的使用 有大用

[toc]

oracle菜鸟学习之 select case when的使用

格式语法

  1. case
  2. when 条件1 then action1
  3. when 条件2 then action2
  4. when 条件3 then action3
  5. when 条件N then actionN
  6. else action
  7. end
               

例子

判断现在是几月                

  1. SQL> select case substr('20181118',5,2)
  2. 2  when '08' then '8yue'
  3. 3  when '09' then '9yue'
  4. 4  when '10' then '10yue'
  5. 5  when '11' then '11yue'
  6. 6  when '12' then '12yue'
  7. 7  else 'other'
  8. 8  end
  9. 9  from dual;
  10. CASESUBSTR('201
  11. ---------------
  12. 11yue
  13. SQL>
               

扩展知识:substr 截取
sbustr('str',x,y)
str:字符串
x:从x位开始
y:x位的后y位结束

  1. SQL> select substr('123456',3,2) from dual;
  2. SUBSTR
  3. ------
  4. 34
  5. SQL>
               

实验

实验表如下:
sno:学号
km:科目
score:成绩
grade:等级

  1. create table score(sno number,km varchar2(8),score int,grade varchar2(4) default null);
  2. insert into score(sno,km,score) values(1,'yw',65);
  3. insert into score(sno,km,score) values(2,'sx',76);
  4. insert into score(sno,km,score) values(3,'yw',86);
  5. insert into score(sno,km,score) values(4,'yw',94);
               

查看表

  1. SQL> select * from score;
  2. SNO KM                SCORE GRADE
  3. ---------- ------------------------ ---------- ------------
  4. 1 yw                   65
  5. 2 sx                   76
  6. 3 yw                   86
  7. 4 yw                   94
               

问题:给学生成绩分等级,优秀、良好、中等、合格
思路:先查询学号对应的成绩

  1. SQL> select sno,case
  2. 2  when score >=90 then 'A'
  3. 3  when score >=80 then 'B'
  4. 4  when score >=70 then 'C'
  5. 5  when score >=60 then 'D'
  6. 6  else 'F'
  7. 7  end
  8. 8  from score;
  9. SNO CAS
  10. ---------- ---
  11. 1 D
  12. 2 C
  13. 3 B
  14. 4 A
               

思路:怎么将等级插入表格?

update score set grade = ?
                
               

思路:选出等级的值

  1. select grade from
  2. (select sno,case
  3. when score >=90 then 'A'
  4. when score >=80 then 'B'
  5. when score >=70 then 'C'
  6. when score >=60 then 'D'
  7. else 'F'
  8. end as grade
  9. 9   from score);
  10. GRADE
  11. ----------
  12. D
  13. C
  14. B
  15. A
               

思路:grade不能等于一个集合,只能等于某个值,怎么选出某个值?
arppinging图                

从图中可以看出,如果我把第一个表取别名为a,但a.sno和score.sno相等的时候,grade的值唯一

  1. update score set grade =
  2. (select grade from
  3. (select sno,case
  4. when score >=90 then 'A'
  5. when score >=80 then 'B'
  6. when score >=70 then 'C'
  7. when score >=60 then 'D'
  8. else 'F'
  9. end as grade
  10. from score) a
  11. where a.sno=score.sno
  12. );
  13. 4 rows updated.
               

查看更新之后的表

  1. SQL> select * from score;
  2. SNO KM                SCORE GRADE
  3. ---------- ------------------------ ---------- ----------
  4. 1 yw                   65 D
  5. 2 sx                   76 C
  6. 3 yw                   86 B
  7. 4 yw                   94 A
                               




                   
           

来自  https://blog.csdn.net/c13257595138/article/details/88373535


普通分类: