MySQL数据库实验三 数据高级查询
MySQL数据库实验三 数据高级查询
★观前提示:本篇内容为mysql数据库实验,代码内容经测试过,可能一小部分有所疏漏,也有会不符合每个人实验的要求的地方,因此以下内容建议仅做思路参考,。
一、实验目的
掌握复杂数据查询操作。
二、实验要求
掌握各种连接查询、嵌套查询的使用。
★温馨提示:以下内容均已经过测试,不过难免会有疏漏,但是代码实现大多数思路及实现经测验都是正确的。
三、实现内容及步骤
(1) 查询每个学生及其选课情况。
SELECT student.sname '学生姓名',courseame '已选课'
FROM student,course,sc
WHERE student.sno=sc.sno AND courseo=sco;
(2) 查询每门课的间接先修课。
SELECT came '课程',cpame '先修课'
FROM course c,course cp
WHERE c.cpno=cpo;
(3) 将STUDENT,SC进行右连接。
SELECT student.*,sco,sc.grade
FROM student
RIGHT OUTER JOIN sc
ON student.sno=sc.sno
(4) 查询既选修了2号课程又选修了3号课程的学生姓名、学号。
SELECT student.sno,student.sname
FROM student,sc
WHERE student.sno=sc.sno
AND cno='2' AND sc.sno IN(SELECT sno
FROM sc
WHERE cno='3');
(5) 查询和刘晨同一年龄的学生。
SELECT student.sname '姓名',student.sage '年龄'
FROM student
WHERE student.sage=(
SELECT student.sage
FROM student
WHERE student.sname='刘晨'
);
(6) 选修了课程名为“数据库”的学生姓名和年龄。
SELECT student.sname,student.sage
FROM student,course,sc
WHERE sc.sno=student.sno AND sco=courseo AND courseame='数据库';
(7)查询其他系比IS系任一学生年龄小的学生名单。
SELECT student.*
FROM student
WHERE sage<ANY(SELECT sage FROM student WHERE sdept ='计科') and sdept <>'计科';
(8) 查询其他系中比IS系所有学生年龄都小的学生名单。
SELECT sno,sname
FROM student
WHERE sdept!='计科' AND sage < all(
SELECT sage
FROM student
WHERE sdept='计科'
);
(9) 查询选修了全部课程的学生姓名。
SELECT sname
FROM student
WHERE NOT EXISTS(
SELECT *
FROM course
WHERE NOT EXISTS(
SELECT *
FROM sc
WHERE sc.sno=student.sno and sco=courseo
)
);
(10) 查询计算机系学生及其性别是男的学生。
SELECT sname
FROM student
WHERE ssex='男' AND sdept='计科';
(11) 查询选修课程1的学生集合和选修2号课程学生集合的差集。
SELECT DISTINCT student.*
FROM student,sc
WHERE student.sno NOT IN(
SELECT sno
FROM sc
WHERE sco = 2
)AND sco=1;
(12) 查询李丽同学不学的课程的课程号。
SELECT cno
FROM course
WHERE NOT EXISTS(
SELECT *
FROM sc
WHERE sc.sno=(
SELECT sno
FROM student
WHERE sname='李逍遥'
)AND sco=courseo
);
(13) 查询选修了3号课程的学生平均年龄。
SELECT AVG(sage)
FROM student,sc
WHERE student.sno=sc.sno AND sco='3';
(14) 求每门课程学生的平均成绩。
SELECT sco,avg(sc.grade)
FROM sc
GROUP BY sco;
(15) 统计每门课程的学生选修人数(超过3人的才统计)。要求输出课程号和选修人数,结果按人数降序排列,若人数相同,按课程号升序排列。
SELECT courseo,COUNT(sc.sno)
FROM course,sc
WHERE courseo=sco
GROUP BY courseo
HAVING COUNT(sc.sno)>3
ORDER BY COUNT(sco)DESC,courseo ASC;
(16) 查询学号比刘晨大,而年龄比他小的学生姓名。
SELECT student.sname
FROM student
WHERE student.sno > (
SELECT student.sno
FROM student
WHERE student.sname='刘晨'
) AND student.sage < (
SELECT student.sage
FROM student
WHERE student.sname='刘晨'
);
(17) 求年龄大于所有女同学年龄的男同学姓名和年龄
SELECT student.sname,student.sage
FROM student
WHERE student.sage > all(
SELECT student.sage
FROM student
WHERE student.ssex='女'
)AND ssex='男';
四、实验总结
基本掌握了复杂数据查询操作,在实验中遇到了一些问题,
如:实现的方式不对,没有出现正确结果;
还有个别数据,一开始并没有完善,因此后期进行了修改。
这些问题,随着探索、思考,以及交流,最后都成功得到了解决。并成功掌握了复杂数据查询操作。
2022.6.14记录:Code_流苏(CSDN)
如有任何疑问,评论回复,看到即回,欢迎大家多多交流学习!
★以上实验内容仅供参考。
- 俞敏洪大学经典励志演讲:像树一样活着
- #includelt;和#include
- linux 下dump文件放在那里,怎么查看dump文件目录
- skipped: maximum number of running instances reached (1)
- skip connections
- .NET 反编译工具
- Service Principal 介绍
- Spring Security登录用户数据获取(4)
- ext2ext3 结构分析
- 信息论与编码
- SVM算法实现(一)
- pgpool分析二
- linux终端基本操作命令
- 损失函数——均方误差(Mean Squared Error,MSE)
- 在android项目上集成libyuv库以及使用libyuv库完成camera的缩放,旋转,翻转,裁剪操作
- 家族关系查询系统程序设计算法思路
- 计算机软件可以用虚拟串口吗,虚拟串口以及在Proteus中的使用