当前位置: 首页 > news >正文

SQL实验 连接查询和嵌套查询

一、实验目的

1.掌握Management Studio的使用。

2.掌握SQL中连接查询和嵌套查询的使用。

二、实验内容及要求(请同学们尝试每道题使用连接和嵌套两种方式来进行查询,如果可以的话)

1.找出所有任教“数据库”的教师的姓名。

--找出所有任教“数据库”的教师的姓名。--连接SELECT DISTINCT Teac_name ,Course_namefrom Teacher,Course,CourseTeacherWHERE Course.Course_name = '数据库原理'and Course.Course_id=CourseTeacher.Course_idand CourseTeacher.Teac_id= Teacher.Teac_id--嵌套SELECT DISTINCT Teac_name FROM TeacherWHERE Teac_id IN (SELECT Teac_idfrom CourseTeacherWHERE Course_id IN(SELECT Course_idfrom CourseWHERE Course_name='数据库原理'))

找出学号为“980101011”的学生选修的课程号和课程名。 

--找出学号为“980101011”的学生选修的课程号和课程名。 --由于所提供数据并无学号为“980101011”,因此本题选用“140102006”作为查询对象--连接SELECT Stu_name,Course.Course_id,Course.Course_namefrom Course,CourseTeacher,StudentWHERE Stu_id='140102006'and Student.Class_id=CourseTeacher.Class_idand CourseTeacher.Course_id=Course.Course_id--嵌套SELECT Course_id,Course_name from CourseWHERE Course_id IN(SELECT Course_idfrom CourseTeacherWHERE Class_id IN(SELECT Class_idfrom StudentWHERE Stu_id='140102006'))

3.“涂杰杰”所选修的全部课程号及成绩。(注意:school中可能有同名,即可能有多名学生叫“涂杰杰”。) 

-- “涂杰杰”所选修的全部课程号及成绩。(注意:school中可能有同名,即可能有多名学生叫“涂杰杰”。)--连接SELECT DISTINCT Stu_name,Course_id,Gradefrom Student,StudentGradeWHERE Stu_name='涂杰杰'and Student.Stu_id=StudentGrade.Stu_id--嵌套SELECT Course_id,Grade from StudentGradeWHERE Stu_id IN (SELECT Stu_idfrom StudentWHERE Stu_name='涂杰杰')

4. 找出“苏贤兴”同学所学课程的名称和成绩。 

--找出“苏贤兴”同学所学课程的名称和成绩。--连接SELECT Stu_name,Course_name,Gradefrom StudentGrade,Course,StudentWHERE Stu_name='苏贤兴'and Student.Stu_id=StudentGrade.Stu_idand StudentGrade.Course_id=Course.Course_id--嵌套SELECT Course_name,Grade from StudentGradejoin Course on Course.Course_id = StudentGrade.Course_idWHERE Stu_id IN(SELECT Stu_idfrom StudentWHERE Stu_name='苏贤兴')

5.显示所有课程的选修情况(最终结果列包含课程号,课程名,选修人数)。(外连接)

--显示所有课程的选修情况(最终结果列包含课程号,课程名,选修人数)。--外连接SELECT Course.Course_id,Course_name,count(StudentGrade.Stu_id) as 选修人数from Course join StudentGrade on Course.Course_id=StudentGrade.Course_idGroup by Course.Course_id,Course_name--嵌套--解析 用join操作符将 Course 表和 StudentGrade 表进行连接,关联条件为它们之间的 Course_Id 列。--同样使用了子查询的方式来获取 StudentGrade 表中的 Course_id 和 Stu_id 列,因此在 JOIN 子句中使用了一个括号内嵌套的 SELECT 语句,并命名为 StudentGrade。--根据 Course 表的 Course_id 列和 Course_name 列同时进行 GROUP BY 分组操作SELECT Course.Course_id,Course_name,count(StudentGrade.Stu_id) as 选修人数from Course join(SELECT Course_id,Stu_id from StudentGrade)as StudentGrade on Course.Course_id=StudentGrade.Course_idGroup by Course.Course_id,Course_name

6.检索选修课程号为“0109”或“0111”的学生学号、姓名和所在班级编号。 

--检索选修课程号为“0109”或“0111”的学生学号、姓名和所在班级编号。--由于提供的材料缺少“0109”和“0111”,因此本体选取“0101”和“0102”作为条件--连接SELECT Student.Stu_id,Stu_name,Class_idfrom Student join StudentGrade on Student.Stu_id=StudentGrade.Stu_idWHERE Course_id='0101' or Course_id='0102'--嵌套SELECT Stu_id,Stu_name,Class_id from StudentWHERE Stu_id IN (SELECT Stu_idfrom StudentGradeWHERE Course_id='0101' or Course_id='0102')

7.检索既选修课程“数据结构”又选修了“C语言”的学生学号。

--检索既选修课程“数据结构”又选修了“C语言”的学生学号。--由于材料未提供“C语言”,因此将其替换为“数据库原理”--内部查询使用 OR 运算符查找出符合条件的课程编号,并使用聚合函数 COUNT 和 HAVING 子句确保每个学生都选修了这两门课--连接SELECT Stu_idfrom StudentGrade join Course on StudentGrade.Course_id=Course.Course_idWHERE Course_name='数据库原理' or Course_name='数据结构'GROUP By Stu_idHAVING COUNT(*) = 2--嵌套SELECT Stu_id from StudentGradeWHERE Course_id IN (SELECT Course_idfrom CourseWHERE Course_name='数据库原理' or Course_name='数据结构')GROUP By Stu_idHAVING COUNT(*) = 2

8.检索选修了课程“数据结构”和“C语言”两门课程并且“数据结构”分数高于“C语言”的学生学号和姓名。

--检索选修了课程“数据结构”和“C语言”两门课程并且“数据结构”分数高于“C语言”的学生学号和姓名。--由于材料未提供“C语言”,因此将其替换为“数据库原理”--该查询语句使用了 JOIN 操作符将 Student 表和 StudentGrade 表进行连接,其中又对 StudentGrade 表使用了两次JOIN操作符。第一次是将 StudentGrade 表自联接为一个别名为 DSID (代表数据结构),关联条件是 StudentGrade 表中的 Stu_id 列与 Student 表中的 Stu_id 列相等。第二次是再次将 StudentGrade 表自联接为一个别名为 CLID(代表数据库原理),关联条件是 StudentGrade 表中的 Stu_id 列与 Student 表中的 Stu_id 列相等并且 DSID 表中的 Course_id 列不等于 CLID 表中的 Course_id 列。--接着,在 JOIN 子句中分别使用了两个括号内嵌套的 SELECT 语句,并命名为 DS 和 CL,以获取对应课程名称的 Course 记录,同时关联各自的 Course_id 列。--最后,在 WHERE 子句中设置了筛选条件,即要求 DSID 表中的 Grade 列大于 CLID 表中的 Grade 列。SELECT Student.Stu_id,Student.Stu_namefrom Studentjoin StudentGrade as DSIDon DSID.Stu_id = Student.Stu_idjoin StudentGrade as CLIDon CLID.Stu_id = Student.Stu_id and DSID.Course_id <> CLID.Course_idjoin Course as DSon DSID.Course_id = DS.Course_id and DS.Course_name = '数据结构'join Course as CLon CLID.Course_id = CL.Course_id and CL.Course_name = '数据库原理'where DSID.Grade > CLID.Grade

http://www.lryc.cn/news/364670.html

相关文章:

  • 【JAVA WEB实用技巧与优化方案】Maven自动化构建与Maven 打包技巧
  • 详细分析Mysql中的SQL_MODE基本知识(附Demo讲解)
  • vue3+uniapp
  • 组织病理学结合人工智能之后,如何实际应用于临床?|顶刊精析·24-06-06
  • VCAST创建单元测试工程
  • 数据结构之归并排序算法【图文详解】
  • 设计模式基础
  • Glide支持通过url加载本地图标
  • 网络安全形势与WAF技术分享
  • 【实战JVM】-实战篇-06-GC调优
  • 深入解析智慧互联网医院系统源码:医院小程序开发的架构到实现
  • 获取 Bean 对象更加简单的方式
  • ChatGPT基本原理
  • 几种更新 npm 项目依赖的实用方法
  • Python爬虫之简单学习BeautifulSoup库,学习获取的对象常用方法,实战豆瓣Top250
  • SAP-BASIS15-查看系统状态
  • 前端怎么debugger排查线上问题
  • LabVIEW源程序安全性保护综合方案
  • JS包装类:循环中为什么建议用变量存储str.length进行循环判断?
  • Android Audio实战——音量默认值修改(一)
  • 解决uni-app progress控件不显示问题
  • 使用C++版本的opencv dnn 部署onnx模型
  • python中实现队列功能
  • 自然资源-关于城镇开发边界局部优化的政策思路梳理
  • ElementUI的Table组件在无数据情况下让“暂无数据”文本居中显示
  • SAP-BASIS14-安装语言包
  • ant design的upload组件踩坑记录
  • Python私教张大鹏 Vue3整合AntDesignVue之按钮组件
  • 【小海实习日记】PHP安装
  • C++ Primer Chapter 4 Expressions