> 文档中心 > MySQL数据库实验三 数据高级查询

MySQL数据库实验三 数据高级查询


★观前提示:本篇内容为mysql数据库实验,代码内容经测试过,可能一小部分有所疏漏,也有会不符合每个人实验的要求的地方,因此以下内容建议仅做思路参考,。

一、实验目的

掌握复杂数据查询操作。

二、实验要求

掌握各种连接查询、嵌套查询的使用。

★温馨提示:以下内容均已经过测试,不过难免会有疏漏,但是代码实现大多数思路及实现经测验都是正确的。

三、实现内容及步骤

(1) 查询每个学生及其选课情况。

SELECT student.sname '学生姓名',course.cname '已选课'FROM student,course,scWHERE student.sno=sc.sno AND course.cno=sc.cno;

(2) 查询每门课的间接先修课。

SELECT c.cname '课程',cp.cname '先修课'FROM course c,course cpWHERE c.cpno=cp.cno;

(3) 将STUDENT,SC进行右连接。

SELECT student.*,sc.cno,sc.gradeFROM studentRIGHT OUTER JOIN scON student.sno=sc.sno

(4) 查询既选修了2号课程又选修了3号课程的学生姓名、学号。

SELECT student.sno,student.snameFROM student,scWHERE student.sno=sc.snoAND cno='2' AND sc.sno IN(SELECT snoFROM scWHERE cno='3');

(5) 查询和刘晨同一年龄的学生。

SELECT student.sname '姓名',student.sage '年龄'FROM studentWHERE student.sage=(SELECT student.sageFROM studentWHERE student.sname='刘晨');

(6) 选修了课程名为“数据库”的学生姓名和年龄。

SELECT student.sname,student.sageFROM student,course,scWHERE sc.sno=student.sno AND sc.cno=course.cno AND course.cname='数据库';

(7)查询其他系比IS系任一学生年龄小的学生名单。

SELECT student.*FROM studentWHERE sage<ANY(SELECT sage FROM student WHERE sdept ='计科') and sdept '计科';

(8) 查询其他系中比IS系所有学生年龄都小的学生名单。

SELECT sno,snameFROM studentWHERE sdept!='计科' AND sage < all(SELECT sageFROM studentWHERE sdept='计科');

(9) 查询选修了全部课程的学生姓名。

SELECT snameFROM studentWHERE NOT EXISTS(SELECT *FROM courseWHERE NOT EXISTS(SELECT *FROM scWHERE sc.sno=student.sno and sc.cno=course.cno));

(10) 查询计算机系学生及其性别是男的学生。

SELECT snameFROM studentWHERE ssex='男' AND sdept='计科';

(11) 查询选修课程1的学生集合和选修2号课程学生集合的差集。

SELECT DISTINCT student.*FROM student,scWHERE student.sno NOT IN(SELECT snoFROM scWHERE sc.cno = 2)AND sc.cno=1;

(12) 查询李丽同学不学的课程的课程号。

SELECT cnoFROM courseWHERE NOT EXISTS(SELECT *FROM scWHERE sc.sno=(SELECT snoFROM studentWHERE sname='李逍遥')AND sc.cno=course.cno);

(13) 查询选修了3号课程的学生平均年龄。

SELECT AVG(sage)FROM student,scWHERE student.sno=sc.sno AND sc.cno='3';

(14) 求每门课程学生的平均成绩。

SELECT sc.cno,avg(sc.grade)FROM scGROUP BY sc.cno;

(15) 统计每门课程的学生选修人数(超过3人的才统计)。要求输出课程号和选修人数,结果按人数降序排列,若人数相同,按课程号升序排列。

SELECT course.cno,COUNT(sc.sno)FROM course,scWHERE course.cno=sc.cnoGROUP BY course.cnoHAVING COUNT(sc.sno)>3ORDER BY COUNT(sc.cno)DESC,course.cno ASC;

(16) 查询学号比刘晨大,而年龄比他小的学生姓名。

SELECT student.snameFROM studentWHERE student.sno > (SELECT student.snoFROM studentWHERE student.sname='刘晨') AND student.sage < (SELECT student.sageFROM studentWHERE student.sname='刘晨');

(17) 求年龄大于所有女同学年龄的男同学姓名和年龄

SELECT student.sname,student.sageFROM studentWHERE student.sage > all(SELECT student.sageFROM studentWHERE student.ssex='女')AND ssex='男';

四、实验总结

基本掌握了复杂数据查询操作,在实验中遇到了一些问题,
如:实现的方式不对,没有出现正确结果;
还有个别数据,一开始并没有完善,因此后期进行了修改。
这些问题,随着探索、思考,以及交流,最后都成功得到了解决。并成功掌握了复杂数据查询操作。

2022.6.14记录:Code_流苏(CSDN)
如有任何疑问,评论回复,看到即回,欢迎大家多多交流学习!
★以上实验内容仅供参考。