数据库实验二:数据查询中难题、易错题合集

📘本专栏文章主要是争对博主在学习《数据库原理及应用》课程时老师布置的课后练习题做出的解答,如果遇到相同的题目建议看着本文自己动手实践一遍,这样才能加深印象。
🎈如果想要了解数据库有关知识点的话,可以点击下方链接进行查看
🔑 本专栏地址【数据库练习题
🔑有关数据库的知识点请戳⏩【数据库知识点总结
🔑 另一个正在更新的专栏【拼图小游戏(Java)

一、前言

本文主要是总结做题过程中碰到的一些难题以及容易做错的题目

二、题目所用表

CourseInfo

CIDCNam3CcreditCproperty
00000001高等数学3基础课
00000002英语阅读2NULL
00000004大学计算机基础4基础课
00000005大学体育2基础课
00000006企业管理3专业基础课
00100001数据库原理及应用3专业基础课
00100002电子商务3专业基础课
00200001程序设计3NULL
00200002系统分析与设计3专业课
00211003软件工程3专业课
10000005人文科学2基础课
11000004信息科技3基础课
12000005工程数学3基础课

ScoreInfo

CIDSIDTIDSCoreSchearTerm
000000010500000100000001922005-20061
000000010500000200000001612005-20061
000000010400000200000001992004-20051
000000010500000300000001762004-20051
000000010601000100000001802005-20061
001000020500000101000001702005-20062
001000020500000201000001352005-20062
001000020500000301000001602005-20062
001000020500000401000001652005-20062
001000020400000201000002402004-20052
001000010400000201000003772005-20061
001000010500000101000003992005-20062

StuInfo

SIDSNameSexBirthdayDeptMajorClassGrade
05000002孙雯1983-08-05 00:00:00计算机系计算机科学计科1班05级
05000004苏小明1984-12-21 00:00:00计算机系计算机科学计科1班05级
05000005周小杰1985-06-01 00:00:00计算机系计算机科学计科1班05级
05000006李建国1985-05-01 00:00:00管理系计算机科学计科1班05级
05010002徐贺菁1985-03-15 00:00:00管理科学与工程系信息管理信管2班05级
06010001陈平1986-05-10 00:00:00管理科学与工程系信息管理信管1班06级
07011103林敏1985-05-04 00:00:00管理科学与工程系多媒体NULLNULL

TchInfo

TIDTNameSexBirthdayTitleDep
00000001黄贺贺1977-01-15 00:00:00讲师基础部
01000001王晓红1958-01-01 00:00:00副教授计算机系
01000002李小波1959-08-11 00:00:00教授计算机系
01000003谈华1962-05-01 00:00:00教授计算机系
01000004黄利敏1976-03-21 00:00:00讲师计算机系
01000005曹珊珊1982-12-12 00:00:00助讲计算机系
01000909王小小1999-01-04 00:00:00副教授计算机系
01000991王红1956-01-01 00:00:00教授基础部
01000999王多多1979-01-04 00:00:00副教授基础部
02000002李丽丽1972-11-12 00:00:00副教授管理科学与工程系

三、基础查询

1.题目

查询StuInfo表中的学生姓名和年龄,要求列名显示姓名和年龄

2.思路

  • 所要查询属性:SName年龄
  • 所需要表:StuInfo
  • 起别名:··· AS ···
  • 将生日转化为年龄:YEAR(GETDATE())-YEAR(Birthday)

3.完整语句

SELECT SName AS '姓名',YEAR(GETDATE())-YEAR(Birthday)AS '年龄' FROM StuInfo;

4.结果

在这里插入图片描述

四、条件查询

1.题目

查询StuInfo中出生年月介于1980年1月1日到1985年8月31日的学生信息

2.思路

  • 所要查询属性:*
  • 所需要表:StuInfo
  • 条件语句:BETWEE···AND···
  • 易错点:日期外面要打单引号,否则查询结果错误

3.完整语句

SELECT * FROM StuInfo WHERE Birthday Between '1980-1-1' AND '1985-8-31';

4.结果

在这里插入图片描述

五、连接查询和分组查询

1.题目

通过ScoreInfo表查询在各门课程平均成绩高于80分的课程名称和平均成绩,要求显示对应的“课程名称”和“平均成绩”。注意保留1位小数

2.思路

  • 所要查询属性:CName平均成绩
  • 需要查询的表格:CourseInfo ScoreInfo
  • 注意点:平均值保留一位小数,用 decimal(18,1),AVG(SCore),不能使用 ROUND 函数
  • 连接条件:ScoreInfo.CID = CourseInfo.CID
  • 分组条件:CourseInfo.CName
  • 筛选条件:平均值CONVERT(decimal(18,1),AVG(SCore)) > 80
  • 数据排序方式:ORDER BY ··· DESC
  • 注意点:防止数据重复,使用 CONVERT 去重

3.完整语句

SELECT CourseInfo.CName '课程名称', CONVERT(decimal(18,1),AVG(SCore)) '平均成绩' FROM CourseInfo,ScoreInfo 
WHERE ScoreInfo.CID = CourseInfo.CID
GROUP BY CourseInfo.CName 
HAVING CONVERT(decimal(18,1),AVG(SCore)) > 80
ORDER BY CONVERT(decimal(18,1),AVG(SCore)) DESC;

4.结果

在这里插入图片描述

六、嵌套查询

1.题目

查询在所有选修了电子商务课程的学生中,分数高于本课程平均成绩的学生学号、姓名、性别

2.思路

  • 所要查询属性:学号、姓名、性别
  • 所要查询表:StuInfoScoreInfo
  • 连接条件:StuInfo.SID = ScoreInfo.SID
  • 筛选条件:ScoreInfo.CID = CourseInfo中电子商务课程的CIDScoreInfo.SCore大于CourseInfo中电子商务课程的平均分
  • 子查询+连接查询
  • 子查询1:电子商务课程的CID
  • 子查询1的筛选条件:CName = ‘电子商务’
  • 子查询2:CourseInfo中电子商务课程的平均分(需要连接ScoreInfo来查询成绩)
  • 子查询2的连接条件:ScoreInfo.CID = CourseInfo.CID
  • 子查询2的筛选条件:CourseInfo.CName = ‘电子商务’

3.完整语句

SELECT StuInfo.SID,SName,Sex FROM StuInfo JOIN ScoreInfo ON StuInfo.SID = ScoreInfo.SID
WHERE ScoreInfo.CID IN (SELECT CID FROM CourseInfo WHERE CName = '电子商务')
AND ScoreInfo.SCore > (SELECT AVG(Score) FROM ScoreInfo JOIN CourseInfo ON ScoreInfo.CID = CourseInfo.CID 
WHERE CourseInfo.CName = '电子商务');

4.结果

在这里插入图片描述

七、结语

如果有任何疑问或者文中问题可以留言评论

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alita11101_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值