类似存储的SQL

本文分享了在SQL开发过程中的个人心得与实践案例,强调了变量类型的重要性、正确使用循环与条件语句,以及利用SQLDeveloper平台进行调试与验证的方法。通过具体实例,展示了如何分析各系学生在特定课程上的平均成绩分布,并根据成绩区间进行分类统计。
declare 
  cursor c_Dep is 
      select dno,dname from dep ;
      
  p_dNo DEP.DNO%type;
  p_dName DEP.DNAME%type;
  
  cursor c_SC(courseName varchar2,departmentNo number) is
      select grade from sc where cno = (select cno from course where cname = courseName ) and sno in (select sno from student where dno = departmentNo);
  p_grade sc.grade%type;
  
  final_courseName varchar(20) := '大学物理';
  avg_po number;
  cnt1 number;cnt2 number;cnt3 number;
  
  begin
      DELETE FROM MSG;
      open c_Dep;
        loop 
          fetch c_Dep into p_dNo,p_dName;
          exit when c_Dep%notFound;
          
           --先看各系的平均成绩
          select avg(grade) into avg_po from sc where cno = (select cno from course where cname = final_courseName ) and sno in (select sno from student where dno = p_dNo);
          cnt1 := 1;cnt2 :=2;cnt3 :=3;
          
          open c_SC(final_courseName,p_dNo);
             loop 
                fetch c_SC into p_grade;
                exit when c_SC%notFound;
                
                 
                 if p_grade < 60 then cnt1 := cnt1 + 1;
                   elsif p_grade>=60 and p_grade<85 then cnt2:=cnt2+1;
                   else cnt3 := cnt3 + 1;
                 end if;
            
             end loop;             
          close c_SC;          
          insert into msg(pcoursename,pdname,cou1,cou2,cou3,avg4) values (final_courseName,p_dName,cnt1,cnt2,cnt3,avg_po);
        end loop;
      close c_Dep;  
  end;

 

 

    SQL 习练体会:

    1.不练习不会清楚能走到哪一步,本人遇到问题:

          不知道一个变量的出现,首先带上类型,不论游标参数或者是开始声明的变量

          不初始化的变量不会参与到计算中,如上面的 cnt1,cnt2,cnt3

          记住 elsif 这个写法,还有 dbms_output.put_line();

 

     程序如果没有看到结果,就不应该相信自己会做出来。而这个 SQL Developer 平台,可以良好展示自己的SQL 技术。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值