sql中group by 和count 以及内连接查询的运用

来源:互联网 发布:建筑网络计划图 编辑:程序博客网 时间:2024/05/23 11:06
引用

问题描述:
现有3张表:分别是
学生信息表S(sno,sname)
课程信息表C(cno,cname,cteacher)
学生与课程关系表SC(sno,cno,scroce)
问题1:查询出所有未选修过李明老师所教课程的学生姓名.
问题2:查询出有2门以上未及格的学生姓名
问题3:查询出既选修课程"1"也选修了课程"2"的学生姓名

主要考察:group by 和inner join ,having条件筛选,以及count函数的使用
group by 主要是对结果集进行分组,然后采用having搭配使用进行数据的筛选,


Sql代码  收藏代码
  1. drop table S,SC,C  
  2. create table S(  
  3.     sno varchar(15),            --学号  
  4.     sname varchar(15)           --学生姓名  
  5. )  
  6. create table C(  
  7.     cno varchar(15),            --课程编号  
  8.     cname varchar(15),          --课程名称  
  9.     cteacher varchar(15)        --授课教师  
  10. )  
  11. create table SC(  
  12.     sno varchar(15),            --学号  
  13.     cno varchar(15),            --课程编号  
  14.     scroce float                --分数  
  15. )  
  16.   
  17. select * from S;  
  18. delete from S;  
  19. insert into S(sno,sname)values('s001','jerry');  
  20. insert into S(sno,sname)values('s002','tom');  
  21. insert into S(sno,sname)values('s003','jason');  
  22.   
  23. delete from C;  
  24. select * from C;  
  25. insert into C(cno,cname,cteacher)values('c001','1','李明');  
  26. insert into C(cno,cname,cteacher)values('c002','2','李明0');  
  27. insert into C(cno,cname,cteacher)values('c003','3','李明1');  
  28. insert into C(cno,cname,cteacher)values('c004','4','李明2');  
  29.   
  30. delete from SC;  
  31. select * from SC;  
  32. insert into SC(sno,cno,scroce)values('s001','c001',40);  
  33. insert into SC(sno,cno,scroce)values('s001','c002',50);  
  34. insert into SC(sno,cno,scroce)values('s002','c001',50);  
  35. insert into SC(sno,cno,scroce)values('s002','c003',50);  
  36.   
  37. select   
  38.     a.sno,a.sname,b.cno  
  39. from S as a  
  40. inner join SC as b on b.sno=a.sno  
  41. where not exists(  
  42.     select * from SC where sno=b.sno and cno in(select cno from C where cteacher = '李明')  
  43. );  
  44.   
  45.   
  46. --有2门未及格的学生  
  47. select  
  48.     a.sname  
  49. from S as a  
  50. inner join SC as b on b.sno=a.sno  
  51. where b.scroce<60  
  52. group by a.sname  
  53. having count(sname)>1;  
  54.   
  55. --既选修了课程1也选修了课程2的学生姓名  
  56.   
  57. select   
  58.     a.sname  
  59. from S a   
  60. inner join SC b on a.sno=b.sno   
  61. inner join C c on c.cno=b.cno   
  62. where b.cno in ('c001','c002')  
  63. group by a.sname  
  64. having count(a.sname)=2; 

原创粉丝点击