【SQL实验】高级查询(三)含附加数据库操作

完整代码在文章末尾【代码是自己的解答,并非标准答案,也有可能写错, 文中可能会有不准确或待完善之处,恳请各位读者不吝批评指正,共同促进学习交流**】**


将素材中的"学生管理"数据库附加到SQL SERVER中,完成以下操作:

附加数据库操作:

打开SSMS,在 对象资源管理器中,右击数据库,选择附加

在弹出的 附加数据库窗口中,点击 Add(添加)按钮

浏览到存放数据库文件(.mdf 和 .ldf 文件)的位置。

选择数据库的 .mdf 文件(主数据文件),然后点击 确定

在弹出的窗口中,你会看到数据库的相关信息(如 .mdf 文件的路径、日志文件等)。确认信息正确。如果数据库日志文件(.ldf)也没有出现,系统会自动识别并列出。确认无误后,点击 OK 进行附加。

数据库附加完成

个人因为版本问题附加还原不了,所以导入学生管理.xls文件

导入学生管理.xls文件操作:

右键点击"数据库"节点,选择"新建数据库"。

在弹出的窗口中,设置数据库名称为"学生管理",点击"确定"完成创建

浏览选择文件作为数据库文件路径

导入过程不知道出来什么问题【这个我不知道】,但不要担心,这个步骤是没问题的。

把有问题的删除or重命名

题目:

1.查询大于入学分数平均值的男生的人数

虽然有标红但不影响运行

复制代码
--1.查询大于入学分数平均值的男生的人数。
SELECT COUNT(*) AS 男生人数
FROM 学生信息
WHERE 性别 = '男'
  AND 入学分数 > (SELECT AVG(入学分数) FROM 学生信息)

2.查询最受学生欢迎(选课人数最多)的课程号、课程名。

外部查询使用 WHERE 条件,筛选出与内部子查询结果相同的课程号,并返回该课程的号和名称

复制代码
SELECT 课程号,课程名
FROM 课程信息
WHERE 课程信息.课程号 = (
    SELECT TOP 1 学生成绩.课程号
    FROM 学生成绩 
    GROUP BY 学生成绩.课程号
    ORDER BY COUNT(学生成绩.学号) DESC
)

考虑存在并列的情况:

RANK() OVER (ORDER BY COUNT(*) DESC) 根据人数降序排列,并生成排名。

WHERE ranking = 1 过滤出排名第一的课程,即人数最多的课程

3.查询学生考的最好的那门课程情况,显示学号、课程号、成绩(相关子查询)。

外部查询通过 WHERE a.成绩 = ... 匹配最高成绩的记录并返回该课程的学号、课程号和成绩信息。

复制代码
SELECT 学号, 课程号, 成绩
FROM 学生成绩 a
WHERE a.成绩 = (SELECT MAX(b.成绩) FROM 学生成绩 b)

4.查询"王岩"同学具有相同籍贯的同学,显示姓名,籍贯(使用exists)。

EXISTS 子查询检查条件是否存在

s1.姓名 <> '王岩':排除"王岩"本人,只显示其他同学

复制代码
SELECT s1.姓名, s1.籍贯
FROM 学生信息 AS s1
WHERE EXISTS (
    SELECT *
    FROM 学生信息 AS s2
    WHERE s1.籍贯 = s2.籍贯 
      AND s2.姓名 = '王岩'
      AND s1.姓名 <> '王岩'
)

5.查询选修了'1001'号课程的学生姓名(使用exists)。

WHERE 学生信息.学号 = 学生成绩.学号:将 学生信息学生成绩 表关联,以确定哪些学生选修了该课程

复制代码
SELECT 姓名
FROM 学生信息 
WHERE EXISTS (
    SELECT *
    FROM 学生成绩
    WHERE 学生信息.学号 = 学生成绩.学号
      AND 学生成绩.课程号 = 1001
)

完整代码:

复制代码
--1.查询大于入学分数平均值的男生的人数。
SELECT COUNT(*) AS 男生人数
FROM 学生信息
WHERE 性别 = '男'
  AND 入学分数 > (SELECT AVG(入学分数) FROM 学生信息)

--2.查询最受学生欢迎(选课人数最多)的课程号、课程名
SELECT 课程号,课程名
FROM 课程信息
WHERE 课程信息.课程号=(SELECT TOP 1 学生成绩.课程号
						FROM 学生成绩 
						GROUP BY 学生成绩.课程号
						ORDER BY COUNT(学生成绩.学号) DESC)

--3.查询学生考的最好的那门课程情况,显示学号、课程号、成绩(相关子查询)。
SELECT  学号, 课程号, 成绩
FROM 学生成绩 a
WHERE a.成绩 = (SELECT MAX(b.成绩) FROM 学生成绩 b)

--4.查询"王岩"同学具有相同籍贯的同学,显示姓名,籍贯(使用exists)。
SELECT s1.姓名, s1.籍贯
FROM 学生信息 AS s1
WHERE EXISTS (
    SELECT *
    FROM 学生信息 AS s2
    WHERE s1.籍贯 = s2.籍贯 
		AND s2.姓名 = '王岩'
		AND s1.姓名 <> '王岩'
)

--5.查询选修了'1001'号课程的学生姓名(使用exists)。
SELECT 姓名
FROM 学生信息 
WHERE EXISTS (
    SELECT *
    FROM 学生成绩
    WHERE 学生信息.学号 = 学生成绩.学号
      AND 学生成绩.课程号 = 1001
)
相关推荐
2601_9495936530 分钟前
深入解析CANN-acl应用层接口:构建高效的AI应用开发框架
数据库·人工智能
javachen__31 分钟前
mysql新老项目版本选择
数据库·mysql
Dxy12393102161 小时前
MySQL如何高效查询表数据量:从基础到进阶的优化指南
数据库·mysql
Dying.Light1 小时前
MySQL相关问题
数据库·mysql
蜡笔小炘1 小时前
LVS -- 利用防火墙标签(FireWall Mark)解决轮询错误
服务器·数据库·lvs
韩立学长1 小时前
基于Springboot泉州旅游攻略平台d5h5zz02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·旅游
Re.不晚2 小时前
MySQL进阶之战——索引、事务与锁、高可用架构的三重奏
数据库·mysql·架构
老邓计算机毕设2 小时前
SSM智慧社区信息化服务平台4v5hv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·智慧社区、·信息化平台
麦聪聊数据3 小时前
为何通用堡垒机无法在数据库运维中实现精准风控?
数据库·sql·安全·低代码·架构
2301_790300963 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python