0


【SQL实战】——数据查询

在这里插入图片描述

🍉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

  运行结果:


本文转载自: https://blog.csdn.net/jd1813346972/article/details/143221792
版权归原作者 小墨&晓末 所有, 如有侵权,请联系我们删除。

“【SQL实战】——数据查询”的评论:

还没有评论