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

一、实验目的

1.掌握Management Studio的使用。

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

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

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

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

--连接

SELECT DISTINCT Teac_name ,Course_name

from Teacher,Course,CourseTeacher

WHERE Course.Course_name = '数据库原理'

and Course.Course_id=CourseTeacher.Course_id

and CourseTeacher.Teac_id= Teacher.Teac_id

--嵌套

SELECT DISTINCT Teac_name FROM Teacher

WHERE Teac_id IN (SELECT Teac_id

from CourseTeacher

WHERE Course_id IN

(SELECT Course_id

from Course

WHERE Course_name='数据库原理'

)

)

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

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

--由于所提供数据并无学号为“980101011”,因此本题选用“140102006”作为查询对象

--连接

SELECT Stu_name,Course.Course_id,Course.Course_name

from Course,CourseTeacher,Student

WHERE Stu_id='140102006'

and Student.Class_id=CourseTeacher.Class_id

and CourseTeacher.Course_id=Course.Course_id

--嵌套

SELECT Course_id,Course_name from Course

WHERE Course_id IN(SELECT Course_id

from CourseTeacher

WHERE Class_id IN

(SELECT Class_id

from Student

WHERE Stu_id='140102006'

)

)

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

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

--连接

SELECT DISTINCT Stu_name,Course_id,Grade

from Student,StudentGrade

WHERE Stu_name='涂杰杰'

and Student.Stu_id=StudentGrade.Stu_id

--嵌套

SELECT Course_id,Grade from StudentGrade

WHERE Stu_id IN (SELECT Stu_id

from Student

WHERE Stu_name='涂杰杰')

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

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

--连接

SELECT Stu_name,Course_name,Grade

from StudentGrade,Course,Student

WHERE Stu_name='苏贤兴'

and Student.Stu_id=StudentGrade.Stu_id

and StudentGrade.Course_id=Course.Course_id

--嵌套

SELECT Course_name,Grade from StudentGrade

join Course on Course.Course_id = StudentGrade.Course_id

WHERE Stu_id IN(SELECT Stu_id

from Student

WHERE Stu_name='苏贤兴')

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

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

--外连接

SELECT Course.Course_id,Course_name,count(StudentGrade.Stu_id) as 选修人数

from Course join StudentGrade on Course.Course_id=StudentGrade.Course_id

Group 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_id

Group by Course.Course_id,Course_name

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

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

--由于提供的材料缺少“0109”和“0111”,因此本体选取“0101”和“0102”作为条件

--连接

SELECT Student.Stu_id,Stu_name,Class_id

from Student join StudentGrade on Student.Stu_id=StudentGrade.Stu_id

WHERE Course_id='0101' or Course_id='0102'

--嵌套

SELECT Stu_id,Stu_name,Class_id from Student

WHERE Stu_id IN (SELECT Stu_id

from StudentGrade

WHERE Course_id='0101' or Course_id='0102')

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

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

--由于材料未提供“C语言”,因此将其替换为“数据库原理”

--内部查询使用 OR 运算符查找出符合条件的课程编号,并使用聚合函数 COUNT 和 HAVING 子句确保每个学生都选修了这两门课

--连接

SELECT Stu_id

from StudentGrade join Course on StudentGrade.Course_id=Course.Course_id

WHERE Course_name='数据库原理' or Course_name='数据结构'

GROUP By Stu_id

HAVING COUNT(*) = 2

--嵌套

SELECT Stu_id from StudentGrade

WHERE Course_id IN (SELECT Course_id

from Course

WHERE Course_name='数据库原理' or Course_name='数据结构'

)

GROUP By Stu_id

HAVING 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_name

from Student

join StudentGrade as DSID

on DSID.Stu_id = Student.Stu_id

join StudentGrade as CLID

on CLID.Stu_id = Student.Stu_id and DSID.Course_id <> CLID.Course_id

join Course as DS

on DSID.Course_id = DS.Course_id and DS.Course_name = '数据结构'

join Course as CL

on CLID.Course_id = CL.Course_id and CL.Course_name = '数据库原理'

where DSID.Grade > CLID.Grade

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/673669.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十_信号7-信号集

int sigemptyset(sigset_t *set); 清空信号集 int sigfillset(sigset_t *set); 填充满 信号集 int sigaddset(sigset_t *set, int signum); 向信号集中添加信号 int sigdelset(sigset_t *set, int signum); 从型号集中删除信号 int sigismember(const sigset_t *set, int s…

人大金仓×广州医科大学附属肿瘤医院 互联网智慧医疗服务平台国产化升级

KINGBASE 广州医科大学附属肿瘤医院是国内领先的肿瘤专科医院&#xff0c;在金仓数据库的支撑下&#xff0c;近日成功完成移动智慧综合服务平台国产化升级。作为互联网智慧医疗服务平台项目的核心平台&#xff0c;预计将服务数十万人次。这一升级改造不仅提高了医疗服务的效率和…

961题库 北航计算机 组成原理选择题 附答案 选择题形式

有题目和答案&#xff0c;没有解析&#xff0c;不懂的题问大模型即可&#xff0c;无偿分享。 第1组 习题 某计算机采用大端方式&#xff0c;按字节编址。某指令中操作数的机器数为 1234 FF00H&#xff0c;该操作数采用基址寻址方式&#xff0c;形式地址 ( 用补码表示 ) 为FF1…

如何监控慢 SQL?

引言&#xff1a;在开发和维护数据库驱动的应用程序时&#xff0c;监控慢 SQL 查询是确保系统性能和稳定性的关键一环。慢 SQL 查询可能会导致系统性能下降、资源浪费和用户体验差等问题。因此&#xff0c;及时监控和优化慢 SQL 查询对于保障系统的正常运行和用户满意度至关重要…

neutron学习小结

概述 基于yoga版本学习neutron&#xff0c;通过源码、官方文档、部署环境进行学习 neutron-dhcp-agent neutron.agent.dhcp_agent.main 创建server&#xff0c;调oslo_service launch server&#xff0c;最后实际调了server的start方法 neutron.service.Service.start Serv…

【UML用户指南】-03-UML的14种图

1、结构图 1、类图&#xff08;class diagram&#xff09; 展现了一组类、接口、协作和它们之间的关系。 在面向对象系统的建模中所建立的最常见的图就是类图。类图给出系统的静态设计视图。 包含主动类的类图给出系统的静态进程视图。构件图是类图的变体。 2、对象图&a…

转让北京电力施工总承包二级资质变更条件和流程

在电力工程领域&#xff0c;资质等级是企业能否参与竞标、承接工程的重要标志之一。北京电力工程总包二级资质的转让&#xff0c;是指已经取得该资质的企业将其资质转让给需要的企业。这种转让是基于合作与共赢的原则&#xff0c;旨在推动电力工程行业健康、稳定发展&#xff0…

Gin入门

Gin入门 声明&#xff1a;本博客为看李文周大佬gin入门视频笔记gin入门 我的代码仓库6月 沉着冷静/2023 - 码云 - 开源中国 (gitee.com) 安装 go get -u github.com/gin-gonic/gin第一个Gin实例&#xff1a; package mainimport ("github.com/gin-gonic/gin" )…

llvm 3.5 源码分析 clang for x86 001 之搭环境

0&#xff0c;目标 编译 针对x86 的&#xff0c;debug 的 c语言的编译器 1&#xff0c;下载代码 git clone --recursive 。。。llvm-project.git $ cd llvm-project 2&#xff0c;预备代码 llvm 3.5 版本的源代码&#xff0c;早期版本&#xff0c;可能比较小比较容易debug $…

发送Http请求的两种方式

说明&#xff1a;在项目中&#xff0c;我们有时会需要调用第三方接口&#xff0c;获取调用结果&#xff0c;来实现自己的业务逻辑。调用第三方接口&#xff0c;通常是双方确定好&#xff0c;由对方开放一个接口&#xff0c;需要我们根据他们提供的接口文档&#xff0c;组装Http…

STM32(九):USART串口通信 (标准库函数)

前言 上一篇文章已经介绍了如何用STM32单片机中独立看门狗来实现检测按键点灯的程序。这篇文章我们来介绍一下如何用STM32单片机中USART通信协议来串口通信&#xff0c;并向XCOM发送信息。 一、实验原理 1.通信的介绍 首先&#xff0c;我们先介绍一下通信&#xff0c;何为通…

C语言 | Leetcode C语言题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; typedef struct {int key;UT_hash_handle hh; }Hash; int longestConsecutive(int* nums, int numsSize) {Hash* headNULL;Hash* tempNULL;for(int i0;i<numsSize;i){int numnums[i];HASH_FIND_INT(head,&num,temp);if(!temp){temp…

数据结构与算法04-栈和队列

介绍 栈和队列。事实上它们并不是全新的东西&#xff0c;只不过是多加了一些约束条件的数组而已。但正是这些约束条件为它们赋予了巧妙的用法。 栈和队列都是处理临时数据的灵活工具。在操作系统、打印任务、数据遍历等各种需要临时容器才能构造出美妙算法的场景&#xff0c;…

SQL实验 带函数查询和综合查询

一、实验目的 1&#xff0e;掌握Management Studio的使用。 2&#xff0e;掌握带函数查询和综合查询的使用。 二、实验内容及要求 1&#xff0e;统计年龄大于30岁的学生的人数。 --统计年龄大于30岁的学生的人数。SELECT COUNT(*) AS 人数FROM StudentWHERE (datepart(yea…

Medieval Lowpoly City with Toon Shader

介绍中世纪低地城市,这是一个创造历史场景、城市和环境的杰作,带有中世纪时期的魔力。 该包拥有70多个精心制作的模型,包括模块化选项,并通过着色器进行了增强,捕捉到了乡村建筑和细节道具的精髓。 用精心挑选的色彩和材料,让自己沉浸在历史的魅力中,仿佛漫步在中世纪的…

YOLOv3深入解析与实战:实时目标检测的高效多尺度架构网络

参考&#xff1a; https://arxiv.org/pdf/1804.02767.pdf https://blog.csdn.net/weixin_43334693/article/details/129143961 网上有很多关于yolo的文章&#xff0c;有些东西没讲清楚&#xff0c;基于自己对论文的理解&#xff0c;也做一个按照自己的想法做的理解。 1. 预测…

Rustdesk 自建服务器教程

一、环境 阿里云轻量服务器、debian11 系统 二、服务端搭建 2.1、开放防火墙指定端口 TCP(21115, 21116, 21117, 21118, 21119)UDP(21116) 2.2、安装 rustdesk 服务器文件 在 github 下载页https://github.com/rustdesk/rustdesk-server/releases/&#xff0c;下载 rustde…

大饼在一个比较关键的转折点,等某个东风来。。。。

1、历史数据对比&#xff0c;看多 图上方指标为BTC价格&#xff1b; 下方链上指标为BTC长期持有者成本均价跟BTC短期持有者成本均价之比。 从历史来看&#xff0c;我们正在启动往顶部的路上&#xff0c;不要畏惧。 2、结构为下降趋势&#xff0c;看空 3、长期持有者MVRV&…

几种更新 npm 项目依赖的实用方法

引言 在软件开发的过程中&#xff0c;我们知道依赖管理是其中一个至关重要的环节。npm&#xff08;Node Package Manager&#xff09; 是 Node.js 的包管理器&#xff0c;它主要用于 Node.js 项目的依赖管理和包发布。随着项目的不断发展&#xff0c;依赖库的版本更新和升级成…

Windows 2000 Server:安全配置终极指南

"远古技术&#xff0c;仅供娱乐" &#x1f4ad; 前言&#xff1a;Windows 2000 服务器在当时的市场中占据了很大的比例&#xff0c;主要原因包括操作简单和易于管理&#xff0c;但也经常因为安全性问题受到谴责&#xff0c;Windows 2000 的安全性真的那么差吗&#x…