当前位置:嗨网首页>书籍在线阅读

17-综合案例-查询课程数据库

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

8.11 综合案例——查询课程数据库

本节视频教学录像:6分钟

本章详细介绍了数据表的查询语句,通过前面各节的学习,可以了解到查询语句的分类及实现。本节仍然以8.1节的学生——课程数据库中的3个表为查询对象来进行实战练习,使读者能够综合应用查询语句。

【范例8-57】

查询年龄小于20岁的女生的学号和姓名。

MySQL>select sno,sname -> from student -> where ssex='女' and sage>20;

结果如下。

+-----+-------+ | sno | sname | +-----+-------+ | 4|孟欣 | +-----+-------+ 1 row in set (0.12 sec)

本查询要求分析:查询结果为学号和姓名,这两个字段来自student表,查询条件为年龄和性别字段,来自student表。该查询只涉及一个student表,复合条件查询,结果为表中的部分字段。

【范例8-58】

查询平均分大于80分的学生姓名。

MySQL> select sname -> from student -> where sno in(select sno -> from sc -> group by sno -> having avg(grade)>80);

结果如下。

+-------+ | sname | +-------+ |刘敏 | |周松 | +-------+ 2 rows in set (0.21 sec)

本查询要求分析:可以使用嵌套来实现该查询。查询的结果是学生姓名,应该知道学生的学号,在子查询中查询出平均分大于80分的学生学号,涉及到分组GROUP BY 子句及对组的筛选HAVING子句。

如果学生的姓名没有重复数据,该查询要求也可以使用多表连接实现。

MySQL> select sname -> from student s,sc -> where s.sno=sc.sno -> group by sname -> having avg(grade)>80;

结果同上。

+-------+ | sname | +-------+ |刘敏 | |周松 | +-------+ rows in set (0.03 sec)

【范例8-59】

查询选修了数据库课程的学生人数。

MySQL> select count(*) 选课人数 -> from sc -> where cno in(select cno -> from course -> where cname='数据库'); 结果如下。 +----------+ | 选课人数 | +----------+ | 2| +----------+ 1 row in set (0.03 sec)

本查询要求分析:查询人数需要使用统计函数count(*),因为课程名称在course表,所以该查询涉及两个表,查询的实现使用的是嵌套查询。在查询中为统计结果使用了列别名。该查询也可以使用多表连接来实现,SQL语句及结果如下。

MySQL> select count(*) 选课人数 -> from sc,course -> where sc.cno=course.cno -> and cname='数据库'; +----------+ | 选课人数 | +----------+ | 2| +----------+ 1 row in set (0.00 sec)

【范例8-60】

查询名字中有“松”的学生的学号、姓名、成绩。

MySQL> select s.sno,sname,grade -> from student s,sc -> where s.sno=sc.sno and sname like '%松%'; +-----+-------+-------+ | sno | sname | grade | +-----+-------+-------+ | 2|周松 | 78| | 2|周松 | 90| +-----+-------+-------+ rows in set (0.02 sec)

本查询要求分析:学生信息来自student,成绩来自sc表,查询的条件涉及模糊查询,使用LIKE语句。