🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972
个人介绍: 研二|统计学|干货分享
擅长Python、Matlab、R等主流编程软件
累计十余项国家级比赛奖项,参与研究经费10w、50w级横向
文章目录
本篇文章通过24个精心挑选的案例,为读者提供了一个全面、实用的SQL查询语法学习平台。无论你是SQL初学者,还是希望提升技能的进阶者,都能从中获得宝贵的经验和启示,为未来的数据处理和分析工作奠定坚实的基础。
1 背景和目的
在数据库中,存在一个设计的学生-课程数据库系统,它全面涵盖了学生的基本信息、课程的基础详情以及学生选修课程的关联数据。此系统不仅是一个数据管理的工具,更是学习SQL查询操作和命令应用的理想实验场。
本文通过24个具体的实验实例,引领读者深入探索这一数据库系统。我们将一步步指导读者如何查询学生信息、课程详情以及它们之间的选修关系,从而帮助读者熟悉并掌握SQL语句的精髓。无论是基础的SELECT查询,还是涉及GROUP、WHERE等高级条件的复杂查询,都将通过实例得到生动展现。
通过这些实验实例,读者不仅能够学会如何构建正确的SQL语句来检索所需数据,还能深刻理解SQL语句的各种形式及其在不同场景下的应用。我们鼓励读者在跟随实例操作的同时,尝试自行修改查询条件或添加新的查询需求,以此锻炼SQL语句的灵活运用能力。
总之,本文旨在通过实践的方式,使读者在轻松愉快的氛围中掌握SQL查询的核心技能,为日后在数据处理和分析领域的发展打下坚实的基础。无论你是SQL初学者,还是希望提升技能的进阶者,都能从这个实验实例中获得宝贵的经验和启示。其中,学生-课程数据库中三张关系表分别为:
学生关系表S:
学生关系表S :
课程关系表SC :
在数据库中显示效果为:
2 设备需求
Pentium 166MHz及以上微机;
Windows XP/2000/7及以上操作系统;
安装了SQL Server;
3 相关内容和步骤
1.在表S,C,SC上进行简单查询;
2.在表S,C,SC上进行连接查询;
3.在表S,C,SC上进行嵌套查询;
4.使用聚合函数的查询;
5.对数据的分组查询;
6.对数据的排序查询。
4 相关实例
4.1 查询学生的基本信息
运行程序:
select *
from S
运行结果:
4.2 查询“计算机”系学生的基本信息
运行程序:
select *
from S
where(Sdept='计算机系')
运行结果:
4.3 查询“计算机”系学生年龄不在19到20之间的学生的学号、姓名
运行程序:
select Sno,Sname
from S
where(Sdept='计算机系'and(Sage<19 or Sage>20))
运行结果:
4.4 找出最大年龄
运行程序:
select Max(Sage)as "最大年龄"
from S
运行结果:
4.5 找出“计算机系”系年龄最大的学生,显示其学号、姓名
运行程序:
select Sno,Sname
from S
where Sdept='计算机系'
and Sage=(select MAX(Sage)
from S)
运行结果:
4.6 找出各系年龄最大的学生,显示其学号、姓名
运行程序:
select sno,sname from S as s1
where s1.sage =(select MAX(sage) from S as s2
where s1.sdept=s2.sdept )
运行结果:
4.7 统计“计算机”系学生的人数
运行程序:
select COUNT(Sno) as '计算机系学生人数'
from S
where Sdept='计算机系'
运行结果:
4.8 统计各系学生的人数,结果按升序排列
运行程序:
select COUNT(*) as '各系学生人数升序排列'from S
group by sdept
order by COUNT(*) ASC
运行结果:
4.9 按系统计各系学生的平均年龄,结果按降序排列
运行程序:
select AVG(Sage) as '各系学生平均年龄升序排列'from S
group by sdept
order by AVG(Sage) DESC
运行结果:
4.10 查询每门课程的课程名
运行程序:
select Cname
from C
运行结果:
4.11 查询先修课小于4的课程的课程名和学分
运行程序:
select Cname,Ccredit from C
where Cpno<4
运行结果:
4.12 统计先修课小于3的课程的学分
运行程序:
select Ccredit from C
where Cpno<3
运行结果:
4.13 统计每位学生选修课程的门数、学分及其平均成绩
运行程序:
select sc.sno'学号',COUNT(sc.cno)'选修数',AVG(grade)'平均成绩',SUM(ccredit)'总学分'
from sc,C
where sc.cno=c.cno
group by sc.sno
运行结果:
4.14 统计选修每门课程的学生人数及各门课程的平均成绩
运行程序:
select cno'课程',COUNT(sno)'人数',AVG(grade)'平均分'
from sc
group by cno
运行结果:
4.15 找出平均成绩在85分以上的学生,结果按系分组,并按平均成绩的升序排列
运行程序:
select sc.sno'学号',sdept'专业',AVG(grade)'平均分'
from S,SC
where SC.Sno=S.Sno
group by sc.sno,Sdept
having(AVG(Grade)>80)
order by Sdept, AVG(Grade)
运行结果:
4.16 查询选修了“C001”或“C002”号课程的学生学号和姓名
运行程序:
select distinct SC.Sno,Sname from S,SC
where S.Sno=SC.Sno
and (Cno='C001'or Cno='C002')
运行结果:
4.17 查询选修了“1”和“2”号课程的学生学号和姓名
运行程序:
select distinct SC.Sno,Sname from S,SC,C
where S.Sno=SC.Sno
and (Cpno='1'or Cpno='2')
运行结果:
4.18 查询选修了课程名为“高等数学”且成绩在60分以下的学生的学号、姓名和成绩
运行程序:
select S.Sno,Sname,Grade from S,SC,C
where S.Sno=SC.Sno and C.Cno=SC.Cno and C.Cname='高等数学'and Grade<60
运行结果:
4.19 查询每位学生选修了课程的学生信息(显示:学号,姓名,课程号,课程名,成绩)
运行程序:
select sc.sno,sname,grade ,cname,sc.cno from sc,s,c
where s.sno=sc.sno and c.cno=sc.cno
运行结果:
4.20 查询没有选修课程的学生的基本信息
运行程序:
select * from S
where Sno!=all(select Sno from SC)
运行结果:
4.21 查询选修了3门以上课程的学生学号
运行程序:
select distinct Sno from Sc
where (select count(Sno) from Sc
)>3
运行结果:
4.22 查询选修课程成绩至少有一门在80分以上的学生学号
运行程序:
select distinct Sno from Sc
where (select count(Sno) from Sc
)>3 and Grade>80
运行结果:
4.23 查询选修课程成绩均在80分以上的学生学号
运行程序:
select distinct Sno from Sc
where grade not in (select Grade from SC
where Grade<80)
运行结果:
4.24 查询选修课程平均成绩在80分以上的学生学号
运行程序:
select Sno from Sc
group by Sno
having AVG(grade)>80
运行结果:
版权归原作者 小墨&晓末 所有, 如有侵权,请联系我们删除。