0


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

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


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

附加数据库操作:

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

在弹出的 附加数据库窗口中,点击

  1. Add

(添加)按钮

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

选择数据库的

  1. .mdf

文件(主数据文件),然后点击 确定

在弹出的窗口中,你会看到数据库的相关信息(如

  1. .mdf

文件的路径、日志文件等)。确认信息正确。如果数据库日志文件(.ldf)也没有出现,系统会自动识别并列出。确认无误后,点击

  1. OK

进行附加。

数据库附加完成

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

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

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

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

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

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

把有问题的删除or重命名

题目:

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

虽然有标红但不影响运行

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

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

外部查询使用

  1. WHERE

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

  1. SELECT 课程号,课程名
  2. FROM 课程信息
  3. WHERE 课程信息.课程号 = (
  4. SELECT TOP 1 学生成绩.课程号
  5. FROM 学生成绩
  6. GROUP BY 学生成绩.课程号
  7. ORDER BY COUNT(学生成绩.学号) DESC
  8. )

考虑存在并列的情况:

  1. RANK() OVER (ORDER BY COUNT(*) DESC)

根据人数降序排列,并生成排名。

  1. WHERE ranking = 1

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

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

  1. select x.学号,x.课程号,x.成绩
  2. from 学生成绩 x
  3. where exists(
  4. select *
  5. from 学生成绩 y
  6. where x.学号=y.学号 and x.成绩>=(select max(z.成绩) from 学生成绩 z where z.学号=x.学号))

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

  1. EXISTS

子查询检查条件是否存在

  1. s1.姓名 <> '王岩'

:排除“王岩”本人,只显示其他同学

  1. SELECT s1.姓名, s1.籍贯
  2. FROM 学生信息 AS s1
  3. WHERE EXISTS (
  4. SELECT *
  5. FROM 学生信息 AS s2
  6. WHERE s1.籍贯 = s2.籍贯
  7. AND s2.姓名 = '王岩'
  8. AND s1.姓名 <> '王岩'
  9. )

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

  1. WHERE 学生信息.学号 = 学生成绩.学号

:将

  1. 学生信息

  1. 学生成绩

表关联,以确定哪些学生选修了该课程

  1. SELECT 姓名
  2. FROM 学生信息
  3. WHERE EXISTS (
  4. SELECT *
  5. FROM 学生成绩
  6. WHERE 学生信息.学号 = 学生成绩.学号
  7. AND 学生成绩.课程号 = 1001
  8. )

完整代码:

  1. --1.查询大于入学分数平均值的男生的人数。
  2. SELECT COUNT(*) AS 男生人数
  3. FROM 学生信息
  4. WHERE 性别 = '男'
  5. AND 入学分数 > (SELECT AVG(入学分数) FROM 学生信息)
  6. --2.查询最受学生欢迎(选课人数最多)的课程号、课程名
  7. SELECT 课程号,课程名
  8. FROM 课程信息
  9. WHERE 课程信息.课程号=(SELECT TOP 1 学生成绩.课程号
  10. FROM 学生成绩
  11. GROUP BY 学生成绩.课程号
  12. ORDER BY COUNT(学生成绩.学号) DESC)
  13. --3.查询学生考的最好的那门课程情况,显示学号、课程号、成绩(相关子查询)。
  14. select x.学号,x.课程号,x.成绩
  15. from 学生成绩 x
  16. where exists(
  17. select *
  18. from 学生成绩 y
  19. where x.学号=y.学号 and x.成绩>=(select max(z.成绩) from 学生成绩 z where z.学号=x.学号))
  20. --4.查询“王岩”同学具有相同籍贯的同学,显示姓名,籍贯(使用exists)。
  21. SELECT s1.姓名, s1.籍贯
  22. FROM 学生信息 AS s1
  23. WHERE EXISTS (
  24. SELECT *
  25. FROM 学生信息 AS s2
  26. WHERE s1.籍贯 = s2.籍贯
  27. AND s2.姓名 = '王岩'
  28. AND s1.姓名 <> '王岩'
  29. )
  30. --5.查询选修了'1001'号课程的学生姓名(使用exists)。
  31. SELECT 姓名
  32. FROM 学生信息
  33. WHERE EXISTS (
  34. SELECT *
  35. FROM 学生成绩
  36. WHERE 学生信息.学号 = 学生成绩.学号
  37. AND 学生成绩.课程号 = 1001
  38. )
标签: sql 数据库 sqlserver

本文转载自: https://blog.csdn.net/Z15922342915/article/details/143592972
版权归原作者 敲敲敲-敲代码 所有, 如有侵权,请联系我们删除。

“【SQL实验】高级查询(三)含附加数据库操作”的评论:

还没有评论