本文数据集见实验一
实验目的:
- 掌握基本的SELECT查询及其相关子句的使用。
- 掌握复杂的SELECT查询,如多表查询、子查询、连接和联合查询。
1.在KC表中查询学分低于3的课程信息,并按课程号升序排列;
select * from KC where KC.学分 < 3 order by 课程号 asc;
不幸的是,KC表中所有学分都大于等于3,查询结果为空。
2.在XS_KC表中按学号分组汇总学生的平均分,并按平均分的降序排列;
select 学号,AVG(成绩) as 平均分 from XS_KC group by 学号 order by 平均分 desc;
3.在XS_KC表中查询选修了3门以上课程的学生学号;
SELECT 学号 FROM XS_KC GROUP BY 学号 HAVING COUNT(学号)>3;
查询结果为空,如果你不相信这个查询结果当然也可以把XS_KC表打印出来进行对比。
注意: 此处使用了
HAVING
,如果第一次见,希望你可以搜索它与WHERE
的区别。
4.按学号对不及格的成绩记录进行明细汇总;
select * from XS_KC where 成绩<60;
5.分别用子查询和连接查询,求107号课程不及格的学生信息;
子查询:
select 学号,姓名,联系电话 from XSQK where 学号 in (select 学号 from XS_KC where 课程号 = '107' and 成绩 < 60);
对比XS_KC表也可以发现选修107课程的学生全部都及格了。
连接查询:
select XSQK.学号,姓名,联系电话 from XSQK join XS_KC on XSQK.学号=XS_KC.学号 where 课程号='107' and 成绩<60;
6.用连接查询在XSQK表中查询住在同一寝室的学生,即其联系电话相同;
select A.学号,A.姓名,A.联系电话 from XSQK A join XSQK B on A.联系电话=B.联系电话 where A.学号 != B.学号;
7.查询XSQK表中所有的系名;
select distinct 所在系 as 系名 from XSQK;
8.查询有多少同学选修了课程;
select distinct 学号 from XS_KC;
9.查询有多少同学没有选课;
select 学号 from XSQK where(not exists(select * from XS_KC where XS_KC.学号 = XSQK.学号));
10.查询与杨颖同一个系的同学姓名;
select 姓名,所在系 from XSQK where 所在系=(select 所在系 from XSQK where 姓名='杨颖');
11.查询选修了课程的学生的姓名、课程名与成绩;
select XSQK.姓名,KC.课程名,XS_KC.成绩 from XSQK,XS_KC,KC where(XS_KC.学号=XSQK.学号 and XS_KC.课程号=KC.课程号);
12.统计每门课程的选课人数和最高分;
select 课程号,count(课程号) as 选课人数,max(成绩) as 最高分 from XS_KC group by 课程号;
13.统计每个学生的选课门数和考试总成绩,并按选课门数的降序排列;
select XS_KC.学号,姓名,count(课程号) as 选课门数,count(成绩) as 考试总成绩 from XS_KC,XSQK where XS_KC.学号=XSQK.学号 group by XS_KC.学号 order by 选
课门数 desc;