大家好,下面我来讲解一下我初学oracle的见解,因为由于我之前曾学过SQL Server的原因,有了前面的基础铺垫,刚学oracle也没有觉得过于的难度,关于什么子查询和连表查询等都是前者的基础;其中,碰到有一些难题,后来通过查资料和努力思考,最终还是悟出来了。
其中,最好玩和最有用的是oracle里面的case when…then… else …end语句,刚开始学的时候还是懵懂懵懂的,不是很懂,后来老师给了很多关于oracle的作业,做着做着慢慢就懂了很多,下面我来讲几个例子。
1、题目:统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]
代码和结果如下,
select cou.cno ,cou.cname,count(case when sc.score<=100 and sc.score>=85 then 1 else null end) as "[100-85]" ,
count(case when sc.score<85 and sc.score>=70 then 1 else null end) as "[85-70]",
count(case when sc.score<70 and sc.score>=60 then 1 else null end) as "[70-60]",
count(case when sc.score<60 then 1 else null end) as "[ <60] from course cou,sc where cou.cno=sc.cno group by cou.cno ,cou.cname;
select cou.cno ,cou.cname,
(case when sc.score<=100 and sc.score>=85 then 1 else null end) as "[100-85]" ,
(case when sc.score<85 and sc.score>=70 then 1 else null end)
as "[85-70]",
(case when sc.score<70 and sc.score>=60 then 1 else null end)
as "[70-60]",
(case when sc.score<60 then 1 else null end) as "[ <60]"
from course cou,sc
然后根据cno(课程号)来分组并且用count字段进行合计返回的结果,空值(不算入内)。
同理可得,那是不是如果我拥有整个世界人口数据库,想要知道,世界各个国家各个年龄段还有分别是男是女,根据国家来分组,那我就可以得到我想要的数据。
其实原理很简单,其中case when语句很重要它可以根据条件的筛选来创建新的的结果列,就是说用case when语句分别查出各分数段的列,如满足结果返回1,不满足则返回空,结果代码如下图