数据库sql练习题(每一个sql都是我实际运行过的,觉得不对可以评论)

[1]删除考试成绩为NULL的记录。delete  FROM [dbo].[选课表] WHERE 考试成绩 is null; 
[2]将04014122号学生的B00101课程的考试成绩修改为78分UPDATE [dbo].[选课表] SET [考试成绩] = 78 WHERE [学号]='04014122' and [课程编号]='B00101'; 
[3]查询学生的全部信息select * from [dbo].[学生]; 
[4]查询所有课程名称和学时信息select [课程名称],[学时] from [dbo].[课程]; 
[5]查询学时大于等于40的课程编号和课程名称。select [课程编号],[课程名称] from [dbo].[课程] where [学时]>40; 
[6]查询课时在50到60(含)之间的课程信息。select * from [dbo].[课程] where [学时]>50 and [学时]<60; 
[7]使用between查询课时在50到60(含)之间的课程信息。select * from [dbo].[课程] where [学时] between 50 and 60; 
[8]查询具有教授和副教授职称的教师信息select * from [dbo].[教师] where [职称]='教授' or [职称]='副教授'; 
[9]查询责任教师字段为空值的记录。select * from [dbo].[课程] where [责任教师] is null; 
[10]查询职称为讲师或副教授的教师信息。select * from [dbo].[教师] where [职称]='讲师' or [职称]='副教授'; 
[11]查询或浏览课程性质和学时信息select [课程性质],[学时] from [dbo].[课程]; 
[12]查询“专业基础”课程的信息,并将结果存储到Student模式下、表名为“专业基础”。select * into 专业基础 from [dbo].[课程] where [课程性质]='专业基础'; 
[13]按教师编号升序列出所有教师信息。select * from [dbo].[教师] order by [教师编号] asc; 
[14]查询所有学生信息,先按生源升序排序、再按学号升序排序。select * from  [dbo].[学生] order by [生源] asc; select * from  [dbo].[学生] order by 学号 asc; 
[15]从选课表中查询考试成绩最高的3条选课信息。select TOP(3)  *FROM [dbo].[选课表] order by [考试成绩] DESC; 
[16]从选课表中查询考试成绩在前15%的选课记录信息,如果随后有成绩并列的记录也一起列出。select TOP(15) percent *FROM [dbo].[选课表] order by [考试成绩] DESC;  
[17]查询考试成绩在90分以上(含)的学生的学号、姓名、相应的课程名称和考试成绩(使用CROSS JOIN连接完成查询)。select  [dbo].[学生].[学号],[姓名],[课程名称],[考试成绩] 
from [dbo].[学生] cross join [dbo].[课程] cross join [dbo].[选课表] where [dbo].[学生].[学号]=[dbo].[选课表].[学号] and [dbo].[课程].[课程编号]= [dbo].[选课表].[课
程编号] and 考试成绩>=90;  
[18]查询目前有多少责任教师。select COUNT(distinct 责任教师)as 'shuliang' from [dbo].[课程] ; 
[19]查询数据库课程的平均成绩。select avg(考试成绩) from [dbo].[选课表],[dbo].[课程] where [dbo].[选课表].[课程编号]=[dbo].[课程].[课程编号] and 课程名称='数据库';  
[20]查询各院系教师的人数 select [名称],COUNT(*) 教师人数 from [dbo].[教师],[dbo].[院系] where [dbo].[教师].[院系]=[dbo].[院系].[编号] group by [名称];  
[21]查询各门课程考试成绩的平均分、最高分和最低分。select [课程名称], avg(考试成绩),max(考试成绩),min(考试成绩) from [dbo].[课程],[dbo].[选课表] where [dbo].[课程].[课
程编号]=[dbo].[选课表].[课程编号] group by 课程名称;  
[22]查询专业基础课平均分大于等于60分的各门课程考试成绩的平均分、最高分和最低分。 select [课程名称], avg(考试成绩),max(考试成绩),min(考试成绩) from [dbo].[课
程],[dbo].[选课表] where [dbo].[课程].[课程编号]=[dbo].[选课表].[课程编号] and 课程性质='专业基础' group by 课程名称 having avg(考试成绩)>=60;  
[23]查询所有专业基础课的信息,并计算其总学时 select  sum(学时) as '总学时',* from [dbo].[专业基础]; 
[24]查询学生的考试成绩(要求查询学号、姓名、课程名称和考试成绩),同时计算每个学生的平均成绩、最高成绩和最低成绩。select 学生.[学号],[姓名],[课程名称],[考试成绩] from 
[dbo].[课程],[dbo].[选课表],[dbo].[学生] where 学生.[学号]=[dbo].[选课表].[学号] and [dbo].[选课表].[课程编号]=[dbo].[课程].[课程编号] order by [dbo].[学生].[学号] 
compute avg(考试成绩) ,max(考试成绩),min(考试成绩) by [dbo].[学生].[学号]; 
[26]查询由教授负责的课程信息(课程编号、课程名称、学时和课程性质)select [课程编号],[课程名称],[学时],[课程性质] from [dbo].[课程] where [责任教师] in (select [教
师编号]from [dbo].[教师] where [职称] = '教授');  
[27]查询责任教师的有关信息(姓名、性别、职称、专业)。select * from [dbo].[教师] where [教师编号] in (select [责任教师] from [dbo].[课程] group by [责任教师]); 
[28]查询有考试成绩大于数据库课程全部考试成绩的学生信息。 select *from [dbo].[学生] where [学号] in (select [学号] from [dbo].[选课表] where [考试成绩]>all(select [考
试成绩] from [dbo].[选课表],[dbo].[课程] where [dbo].[选课表].[课程编号]=[dbo].[课程].[课程编号] and [课程名称]='数据库')); 
[29]查询“系统分析与设计”课程的责任教师的姓名、职称,以及所负责的其他课程(课程编号和课程名称)。select [课程编号],[课程名称],[姓名],[职称] from [dbo].[教师],[dbo].[课
程] where [dbo].[教师].[教师编号]=[dbo].[课程].[责任教师] and [责任教师] in (select [责任教师] from [dbo].[课程] where [课程名称]='系统分析与设计'); 
[30]查询哪些学生(学号和姓名)有未完成考试的课程(考试成绩为NULL)select [学号],[姓名] from [dbo].[学生] where [学号] in (select [学号] from [dbo].[选课表] where [考
试成绩] is null);  
[31]查询哪些学生(学号和姓名)没有未完成考试的课程(考试成绩为NULL)select [学号],[姓名] from [dbo].[学生] where [学号] in (select [学号] from [dbo].[选课表] where 
[考试成绩] is not null); 
1.查询门门课程都及格的学生的学号select Sno from S where not exists (select Sno from SC where Sno=S.Sno AND Grade<60) and exists(select *from SC where Sno=S.Sno); 
2.查询既有课程大于90分又有课程不及格的学生的学号select Sno from S WHERE Sno IN(SELECT Sno from SC where Sno=S.Sno AND Grade>=90) AND Sno IN (select Sno from SC where 
Sno=S.Sno AND Grade<60); 
3.查询平均分不及格的课程号和平均成绩SELECT AVG(Grade),Cno from SC where Cno in(select Cno from C)GROUP BY Cno HAVING AVG(Grade)<60; 
4.找出至少选修了2号学生选修过的全部课程的学生号select Sno from SC where Sno in(select Sno from S) group by Sno having COUNT(*)> =2; 
5.求各门课程去掉一个最高分和最低分后的平均分select avg([Grade]) as 平均成绩 from [dbo].[SC] where [Grade] not in (select top(1) [Grade] from [dbo].[SC] order by[Grade]  
asc) and [Grade] not in (select top(1) [Grade] from [dbo].[SC] order by [Grade] desc); 

 
6.查询7号课程没有考试成绩的学生学号select SC.Sno from SC,S where SC.Sno=S.Sno AND Cno='7' AND Grade IS NULL; 
7.查询7号课程成绩在90分以上或60分以下的学生学号。select SC.Sno from SC,S where SC.Sno=S.Sno AND CNO='7' AND Grade not between 60 and 90; 
8.查询课程名以“数据”两个字开头的所有课程的课程号和课程名 select Cno,Cname from C where Cname like '数据%'; 
9.查询每个学生所有课程的平均成绩,输出学生学号和平均成绩select AVG(Grade) ,SC.Sno from S,SC WHERE S.Sno=SC.Sno GROUP BY SC.Sno;  
10.查询每门课程的选修人数,输出课程号和选修人数。SELECT SC.Cno ,COUNT(*) AS '选修人数' from SC,C where SC.Cno=C.Cno GROUP BY SC.Cno;  
11.查询选修7号课程的学生的学号、姓名、性别select S.Sno,Sname,Sex from S,SC WHERE S.Sno=SC.Sno AND Cno='7'; 
12.查询选修7号课程的学生的平均年龄 SELECT AVG(Age) from S,SC WHERE S.Sno=SC.Sno AND Cno='7'; 
13.查询有30名以上学生选修的课程号select SC.Cno from C,SC WHERE SC.Cno=C.Cno  GROUP BY SC.Cno HAVING COUNT(*)>= 30;  
14.查询至今没有考试不及格的学生学号SELECT S.Sno FROM S,SC WHERE S.Sno=SC.Sno GROUP BY S.Sno having min(Grade)>=60; 
15.查询所有考试成绩的平均分相同的学生学号分组SELECT S.Sno,AVG(Grade) FROM SC,S WHERE S.SNO=SC.Sno GROUP BY S.Sno ; 
16.找出选修课程号为C2的学生学号与成绩select SC.Sno,SC.Grade from SC WHERE Cno='C2';  
17找出选修课程号为C4的学生学号与姓名 select S.Sno,S.Sname from S,SC WHERE Cno='C4'; 
18.找出选修课程名为 Maths 的学生学号与姓名SELECT S.Sno,S.Sname from S,SC,C WHERE S.Sno=SC.Sno AND SC.Cno=C.Cno AND Cname='Maths'; 
19.找出选修课程号为C2或C4的学生学号SELECT SC.Sno FROM SC WHERE Cno='C2' OR Cno='C4'; 
20.找出选修课程号为C2和C4的学生学号SELECT SC.Sno FROM SC WHERE Cno='C2' AND Cno='C4';  
21.找出不学C2课程的学生姓名和年龄SELECT Sname,age from S WHERE Sno NOT IN (SELECT Cno from SC WHERE Cno='C2'); 
22.找出选修了数据库课程的所有学生姓名SELECT S.Sname from S,SC,C WHERE S.Sno=SC.Sno AND SC.Cno=C.Cno AND Cname='数据库'; 
23.找出数据库课程不及格的女生姓名SELECT S.Sname from S,SC,C WHERE S.Sno=SC.Sno AND SC.Cno=C.Cno AND Cname='数据库' AND Sex='女' AND Grade<60; 
24.找出各门课程的平均成绩,输出课程名和平均成绩select C.Cname,AVG(Grade) from SC,C group by C.Cname; 
25.找出各个学生的平均成绩,输出学生姓名和平均成绩SELECT S.Sname,AVG(Grade) from S,SC where S.Sno=SC.Sno GROUP BY S.Sname,S.Sno; 
26.找出至少有30个学生选修的课程名select C.Cname FROM C,SC WHERE SC.Cno=C.Cno GROUP BY C.Cname,C.Cno HAVING COUNT(*)>30; 
27.找出选修了不少于3门课程的学生姓名SELECT S.Sname FROM S,SC WHERE S.Sno=S.Sno GROUP by S.Sname,SC.Sno HAVING COUNT(*)>=3; 
28.找出各门课程的成绩均不低于90分的学生姓名SELECT S.Sname FROM S,SC WHERE S.Sno=SC.Sno GROUP BY Sname,SC.Sno HAVING MIN(Grade)>=90; 
29.找出数据库课程成绩不低于该门课程平均分的学生姓名select s.Sname from s,sc,C where s.Sno=sc.Sno and sc.Cno=c.Cno and Cname='数据库' and Grade>(select avg(grade) from 
SC,S where c.cno=sc.cno and Cname=' 数据库'); 
30.找出各个系科男女学生的平均年龄和人数select AVG(age),sex,sdept,count(*) from S group by Sex,Sdept; 
31. 找出计算机系(JSJ) 课 程 平 均 分 最 高 的 学 生 学 号 和 姓 名 select s.sno,s.Sname from s,SC where  s.Sno=sc.Sno and Sdept='JSJ' group by s.Sname,s.Sno having 
avg(Grade)>all(select avg(Grade) from s,sc where s.Sno=sc.Sno and Sdept='JSJ' group by sc.Sno); 
32.查询每门课程的及格率create view v_all(cno,cnt)as select cno, count(*) from sc group by cnocreate view v_pass(cno,cnt_pass)as select cno, count(*) from sc where 
grade>=60 group by cnoselect v_all.cno, cnt_pass*100/cnt from v_all, v_pass where v_all.cno = v_pass.cno 
33.查询平均分不及格的学生的学号,姓名,平均分select s.sno ,s.Sname,avg(Grade) from s,sc where s.sno=sc.Sno group by s.Sno,s.Sname having avg(Grade)<60; 
34.查询平均分不及格的学生人数select count(*) from s,sc where s.Sno=sc.Sno group by s.Sno,s.Sname having avg(Grade)<60; 

猜你喜欢

转载自blog.csdn.net/jjsmdhhh/article/details/82118175