SQL 基础(七)数据查询实战演练二

简介: SQL 基础(七)数据查询实战演练二

实验内容

根据数据库 db_student 中的 tb_student 表、tb_scoretb_course,完成下列查询语句

表结构

表结构如下:

  • tb_student(sno,sn,dept,sex,birthday,polity)
  • tb_score(sno,cno,score)
  • tb_cource(cno,cn,ct)

任务题解

任务一

查询学生的性别信息, 并去掉重复记录。

use db_student20
select distinct sex -- distinct 去重
from tb_student

任务二

查询 tb_student 表中共有几个系别

use db_student20
select COUNT(distinct dept) as 系别总数
from tb_student

任务三

计算 tb_student 表中各个系的人数。

select dept as 系别名称,COUNT(*) as 总人数
from tb_student
group by dept

任务四

查询你所在班级的人数。

-- 方法一
select count(*) as 总人数
from tb_student
where sno like 'XXXXXXX%'
-- 方法二
select count(sno) 总人数
from tb_student
where LEFT(sno,8)='XXXXXXXX'

任务五

显示每名同学的成绩,要求显示学号、姓名、课号和成绩

select stu.sno as 学号,sn as 姓名,cno 课程号,score 成绩
from tb_student stu,tb_score sco -- 同一学生成绩信息,避免冲突,相同字段重命名表 引用
where stu.sno=sco.sno

任务六

显示 90 分以上每名同学的成绩,要求显示学号、姓名、课号和成绩

select stu.sno as 学号,sn as 姓名,cno 课程号,score 成绩
from tb_student stu,tb_score sco
where stu.sno=sco.sno and score > 90  -- 添加成绩约束条件

任务七

每科成绩最高最低分,要求显示科目名称。

select cn 课程名,MAX(score) as 最高分,MIN(score) as 最低分
from tb_course co,tb_score sc
where co.cno=sc.cno
group by cn

任务八

每科有多少人需要补考,要求显示科目名称。

select cn 课程名,COUNT(*) as 补考人数
from tb_course c,tb_score sc
where c.cno=sc.cno and score<60 -- cno 课程编号
group by cn

任务九

每班计算机基础科成绩最高、最低分。

select LEFT(sno,8) as 班级,cn 课程名,MAX(score) 最高分,MIN(score) 最低分
from tb_course c,tb_score sc
where c.cno=sc.cno 
group by LEFT(sno,8),cn
having cn='MATLAB与系统仿真' -- 选中基础课名称

任务十

查询所有学生的选课情况,包括没选课的学生(使用左连接、右连接 2 种方法实现)

--left join
select * 
from tb_student s left join tb_score sc
on(s.sno=sc.sno)
--right join
select * 
from tb_score sc right join tb_student s
on(sc.sno=s.sno)

任务十一

列出 tb_student 表中和“XXX”系别相同的学生的学号和姓名

--子查询
select sno 学号,sn 姓名
from tb_student
where dept =any(select dept from tb_student where sn='XXX')--'XXX 系别'
--自身连接
select s1.sno,s1.sn 
from tb_student s1,tb_student s2
where s1.dept=s2.dept and s2.sn='XXX'

任务十二

查询选修 c03 课程的学生姓名

--子查询
select sn from tb_student
where sno in(select sno from tb_score where cno='c03')
--连接
select sn 
from tb_student s,tb_score sc
where s.sno=sc.sno and cno='c03'

任务十三

查询不选 c04 课程的学生的学号和姓名

select sno,sn 
from tb_student
where sno not in(select sno from tb_score where cno='c04')

任务十四

查询每科最高分的学生的学号和科目

select sno 学号,cn 课程名,score 成绩
from tb_score sc,tb_course c,
(
select cno, MAX(score) as 最高分
from tb_score
group by cno
) as b
where sc.cno=c.cno and c.cno=b.cno and score=b.最高分

任务十五

显示需要进行补考的科目编号和名称

-- 子查询
select cno,cn from tb_course
where cno in(select distinct cno from tb_score where score<60)
-- 连接
select distinct c.cno,cn 
from tb_course c,tb_score sc
where c.cno=sc.cno and score<60

任务十六

不及格人数多于 1 人的科目及人数。

select cn,COUNT(*)as 不及格人数
from tb_course c,tb_score sc
where c.cno=sc.cno and score<60
group by cn
having COUNT(*)>1

任务十七

显示 c01 科成绩不及格的学号,对应学生表中所有列的信息。

select * from tb_student
where sno in(select sno from tb_score where cno='c03'and score<60)

任务十八

列出成绩表中各个科目成绩的最高分、最低分和平均分, 并显示成绩表中平均分大于 75 分的科目名称,并按平均分降序排序

select cn,MAX(score) 最高分,MIN(score) 最低分,AVG(score) 平均分
from tb_course c,tb_score sc
where c.cno=sc.cno
group by cn
having AVG(score)>75
order by 平均分 desc

任务十九

查询选修了“数据库原理与应用”的学生的学号和姓名。

-- 子查询
select sno,sn from tb_student
where sno in
(
select sno from tb_score
where cno=(select cno from tb_course where cn='数据库原理与应用')
)
select sno,sn from tb_student
where sno in
(
select sno from tb_score sc,tb_course c
where sc.cno=c.cno and cn='数据库原理与应用'
)
-- 连接
select sn,sn from tb_student s,tb_score sc,tb_course c
where s.sno=sc.sno and sc.cno=c.cno
and cn='数据库原理与应用'

任务二十

査询课程号为“C02”、成绩高于“王磊”的学生的学号和成绩。

select sno,score from tb_score
where cno='c03'and score>
(
select score 
from tb_score sc,tb_student s
where sc.sno=s.sno and cno='c03'
and sn='XXX'
-- 多层子查询
select sno,score from tb_score
where cno='c03'and score>
(
select score from tb_score
where cno='c03'and 
sno=(select sno from tb_student
where sn='XXX' )
)
)

任务二十一

查询和“王磊”的“数据库原理及应用”课程分数相同的学生的学号。

select distinct sno from tb_score sc,tb_course c
where sc.cno=c.cno and cn='数据库原理及应用'
and score=
(
select score from tb_score 
where sno=
(
select sno from tb_student
where sn='XXX'
)and cno=(select cno from tb_course where cn='数据库原理及应用')
)
select distinct sno from tb_score 
where score=
(
select score from tb_score 
where sno=
(
select sno from tb_student
where sn='XXX'
)
and cno=(select cno from tb_course where cn='数据库原理及应用')
)



相关文章
|
2月前
|
SQL 存储 数据处理
"SQL触发器实战大揭秘:一键解锁数据自动化校验与更新魔法,让数据库管理从此告别繁琐,精准高效不再是梦!"
【8月更文挑战第31天】在数据库管理中,确保数据准确性和一致性至关重要。SQL触发器能自动执行数据校验与更新,显著提升工作效率。本文通过一个员工信息表的例子,详细介绍了如何利用触发器自动设定和校验薪资,确保其符合业务规则。提供的示例代码展示了在插入新记录时如何自动检查并调整薪资,以满足最低标准。这不仅减轻了数据库管理员的负担,还提高了数据处理的准确性和效率。触发器虽强大,但也需谨慎使用,以避免复杂性和性能问题。
34 1
|
1月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
59 0
|
2月前
|
测试技术 Java
全面保障Struts 2应用质量:掌握单元测试与集成测试的关键策略
【8月更文挑战第31天】Struts 2 的测试策略结合了单元测试与集成测试。单元测试聚焦于单个组件(如 Action 类)的功能验证,常用 Mockito 模拟依赖项;集成测试则关注组件间的交互,利用 Cactus 等框架确保框架拦截器和 Action 映射等按预期工作。通过确保高测试覆盖率并定期更新测试用例,可以提升应用的整体稳定性和质量。
59 0
|
2月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
38 0
|
2月前
|
前端开发 Java JSON
Struts 2携手AngularJS与React:探索企业级后端与现代前端框架的完美融合之道
【8月更文挑战第31天】随着Web应用复杂性的提升,前端技术日新月异。AngularJS和React作为主流前端框架,凭借强大的数据绑定和组件化能力,显著提升了开发动态及交互式Web应用的效率。同时,Struts 2 以其出色的性能和丰富的功能,成为众多Java开发者构建企业级应用的首选后端框架。本文探讨了如何将 Struts 2 与 AngularJS 和 React 整合,以充分发挥前后端各自优势,构建更强大、灵活的 Web 应用。
41 0
|
2月前
|
SQL 数据采集 算法
【电商数据分析利器】SQL实战项目大揭秘:手把手教你构建用户行为分析系统,从数据建模到精准营销的全方位指南!
【8月更文挑战第31天】随着电商行业的快速发展,用户行为分析的重要性日益凸显。本实战项目将指导你使用 SQL 构建电商平台用户行为分析系统,涵盖数据建模、采集、处理与分析等环节。文章详细介绍了数据库设计、测试数据插入及多种行为分析方法,如购买频次统计、商品销售排名、用户活跃时间段分析和留存率计算,帮助电商企业深入了解用户行为并优化业务策略。通过这些步骤,你将掌握利用 SQL 进行大数据分析的关键技术。
53 0
|
2月前
|
SQL 安全 测试技术
【数据守护者必备】SQL数据备份与恢复策略全解析:从全量到日志备份,手把手教你确保企业信息万无一失的实战技巧!
【8月更文挑战第31天】数据库是企业核心业务数据的基石,为防止硬件故障、软件错误或人为失误导致的数据丢失,制定可靠的备份与恢复策略至关重要。本文通过一个在线购物平台的案例,详细介绍了使用 SQL Server 进行全量备份、差异备份及事务日志备份的方法,并演示了如何利用 SQL Server Agent 实现自动化备份任务。此外,还提供了数据恢复的具体步骤和测试建议,确保数据安全与业务连续性。
50 0
|
2月前
|
SQL 关系型数据库 数据挖掘
SQL 基础入门简直太重要啦!从零开始,带你轻松掌握数据查询与操作,开启数据世界大门!
【8月更文挑战第31天】在数字化时代,数据无处不在,而 SQL(Structured Query Language)则是开启数据宝藏的关键钥匙。无论你是编程新手还是数据处理爱好者,掌握 SQL 都能帮助你轻松提取和分析信息。SQL 简洁而强大,像一位魔法师,能从庞大数据库中迅速找到所需数据。从查询、条件筛选到排序、分组,SQL 功能多样,还能插入、更新和删除数据,助你在数据海洋中畅游无阻。
36 0
|
2月前
|
SQL 关系型数据库 数据库
|
3月前
|
SQL 存储 API
ES 实战复杂sql查询、修改字段类型
ES 实战复杂sql查询、修改字段类型
62 1
下一篇
无影云桌面