数据库day-07

一、实验名称和性质

子查询

验证 设计

二、实验目的

1.掌握子查询的嵌套查询;

2.掌握集合操作

3.了解EXISTS嵌套查询方法;

三、实验的软硬件环境要求

硬件环境要求:

         PC机(单机)

使用的软件名称、版本号以及模块:

         Windows10,SQLServer2019

四、知识准备

  1. 嵌套子查询

SELECT <目标列表达式列表>

 FROM 表名

 WHERE 列名IN

(SELECT 字句)

2.集合运算—union(并集)、intersect(交集)和except(差集)& with as

3.EXISTS嵌套子查询

带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。

●若内层查询结果非空,则返回真值

●若内层查询结果为空,则返回假值。

由EXISTS引出的子查询,其目标列表达式通常都用* ,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义

所以,EXISTS子查询中一般是相关自查询,即子查询脱离父查询后不能单独执行。

思考:如果EXISTS子查询中是不相关子查询,会有什么结果?

五、实验内容

1.子查询嵌套;

2.集合运算

3EXISTS嵌套查询。

六、验证性实验

(表和表中的数据,见实验6,XXX为学号的后两位)

(1)查询与’王丽娜’同班的学生学号,姓名

SELECT  SNO, sname   FROM   STUDENT    WHERE  CLASS=(SELECT  CLASS  FROM  STUDENT    WHERE  SNAME='王丽娜')

SELECT  S1.SNO,s1.Sname   FROM   STUDENT   AS  S1, STUDENT   AS  S2

 WHERE   S1.CLASS=S2.CLASS  AND  S2.SNAME='王丽娜'

SELECT  S1.SNO,s1.Sname   FROM   STUDENT   AS  S1 JOIN  STUDENT   AS  S2

ON  S1.CLASS=S2.CLASS   WHERE    S2.SNAME='王丽娜'

(2)显示每个学生的非最高分成绩(学生自己的选课成绩中,不是最高分的选课记录显示出来)

SELECT SNO,CNO,DEGREE FROM   SCOREXXX  ASSC1

 WHERE DEGREE<(SELECT MAX(DEGREE) FROM   SCOREXXX  ASSC2

 WHERE SC2.SNO=SC1.SNO)

显示每个学生的最高分成绩(学生自己的选课成绩中,最高分的选课记录显示出来)

SELECT   SNO, CNO, DEGREE   FROM   SCOREXXX  AS  SC1

 WHERE   DEGREE =(SELECT   MAX(DEGREE)   FROM   SCOREXXX  AS  SC2 

 WHERE   SC2.SNO=SC1.SNO)

显示各科的最高分的学号,姓名及课程名和成绩

(3)查询’操作系统’课程的选课人数

SELECT COUNT(*) FROM   SCOREXXX

 WHERE   CNO  IN--IN 可以换为=

(SELECT   CNO   FROM   COURSEXXX WHERE   CNAME='操作系统')

(4) 相关的子查询:子查询中要用到父查询表的信息,子查询不能独立执行。

如,查询选修课程号为“3-105”课程且成绩至少高于选修课程号为“3-245”的同学的Cno、Sno和DEGREE。

在子查询中,因为要查找该同学’3-245’课程的成绩,所以,需要父查询表中该学生的学号信息。

SELECT  CNO,SNO,DEGREE  FROM   SCOREXXXAS  SC1

 WHERE   CNO='3-105'AND  DEGREE >(

SELECT  DEGREE  FROM   SCOREXXXAS  SC2

 WHERE   SC2.SNO=SC1.SNO AND SC2.CNO='3-245')

SELECT  CNO,SNO,DEGREE CJ105,(SELECT  DEGREE  FROM   SCOREXXXAS  SC2

 WHERE   SC2.SNO=SC1.SNO AND SC2.CNO='3-245') CJ245 FROM   SCOREXXXAS  SC1 WHERE CNO='3-105'AND  DEGREE >(

SELECT  DEGREE  FROM   SCOREXXXAS  SC2

 WHERE   SC2.SNO=SC1.SNO AND SC2.CNO='3-245')

(5)EXISTS嵌套子查询,分析以下语句

SELECT  SNO,SNAME  FROM  STUDENTXXX S

 WHERE  EXISTS (SELECT * FROM  SCOREXXX  WHERE  SNO=S.SNO)

SELECT  SNO,SNAME  FROM  STUDENTXXX S

 WHERE  not EXISTS (SELECT * FROM  SCOREXXX  WHERE  SNO=S.SNO)

SELECT  SNO,SNAME  FROM  STUDENTXXX S

 WHERE  EXISTS (SELECT * FROM  SCOREXXX  WHERE  SNO=‘111’)

SELECT SNO,SNAME  FROM  STUDENTXXX S

 WHERE  EXISTS (SELECT * FROM  SCOREXXX  WHERE  SNO=‘108’)

(6)union,分析以下语句

Select  tName,tSex from teacherXXX

union

select  sName,sSex from  STUDENTXXX

select tName from teacherXXX WHERE TNAME LIKE '李%'

union

select sName from  STUDENTXXX  WHERE sNAME LIKE '李%'

select tName from teacherXXX WHERE TNAME LIKE '李%'

union ALL

select sName from  STUDENTXXX  WHERE sNAME LIKE '李%'

(7)intersect(交集)集合运算,分析以下语句

select * from  STUDENTXXX  WHERE sno<‘108'

intersect

select * from  STUDENTXXX  WHERE sno>‘103'

(8)except(差集)集合运算,分析以下语句

select * from  STUDENTXXX  WHERE sno<‘108'

except

select * from  STUDENTXXX  WHERE sno>‘103'

(9)子查询作为表

Select s.*,av from  STUDENTXXX sjoin(select sno,avg(degree)av from  SCOREXXX groupbysno)tons.sno=t.sno

(10)其他

  1. Select row_number()over(orderbysno)asrowNum,* from  SCOREXXX
  2. Select row_number()over(partitionbysnoorderbysno)asrowNum,* from  SCOREXXX

  1. select sno,cno,casewhendegree>=90then'A'

WHENDEGREE>=80THEN'B'

WHENDEGREE>=70THEN'C'

WHENDEGREE>=60THEN'D'

ELSE'E'

END

 FROM  SCOREXXX

  1. select  sno,sname,case ssex when '男' then 'M'

when '女' then  'F'

END XB

 from  STUDENTXXX 

  1. SELECT  * into  STU_XXX  FROM  STUDENTXXX   WHERE    SSEX=‘男’
  2. INSERT  STU_XXX  SELECT  *  FROM  STUDENTXXX  WHERE  SSEX=‘女’

七、设计性实验

1.实验内容(用子查询完成

  1. 查询每人的成绩(学号、课程号、成绩)和所有成绩平均分;

SELECT

    S.Sno,

    SC.Cno,

    SC.Degree,

    (SELECT AVG(Degree) FROM Score023) AS AvgAllScore

FROM

    Student023 S

JOIN

    Score023 SC ON S.Sno = SC.Sno;

  1. 查询每人的成绩(学号、课程号、成绩)和本课程平均分;

SELECT

    S.Sno,

    SC.Cno,

    SC.Degree,

    AVG(SC2.Degree) OVER(PARTITION BY SC.Cno) AS AvgCourseScore

FROM

    Student023 S

JOIN

    Score023 SC ON S.Sno = SC.Sno

JOIN

    Score023 SC2 ON SC.Cno = SC2.Cno;

  1. 查询每人的成绩(学号、姓名,课程名、成绩)和本班总平均分;

SELECT

    S.Sno,

    S.Sname,

    C.Cname,

    SC.Degree,

    (SELECT AVG(SC2.Degree)

     FROM Score023 SC2

     JOIN Student023 S2 ON SC2.Sno = S2.Sno

     WHERE S2.Class = S.Class) AS ClassAvgScore

FROM

    Student023 S

JOIN

    Score023 SC ON S.Sno = SC.Sno

JOIN

    Course023 C ON SC.Cno = C.Cno;

  1. 查询每人的成绩(学号、姓名,课程名、成绩)和本班本科平均分;

SELECT

    S.Sno,

    S.Sname,

    C.Cname,

    SC.Degree,

    (SELECT AVG(SC2.Degree)

     FROM Score023 SC2

     JOIN Student023 S2 ON SC2.Sno = S2.Sno

     WHERE S2.Class = S.Class AND SC2.Cno = SC.Cno) AS ClassCourseAvg

FROM

    Student023 S

JOIN

    Score023 SC ON S.Sno = SC.Sno

JOIN

    Course023 C ON SC.Cno = C.Cno;

  1. 查询成绩高于学号为“101”的课程号为“3-105”的成绩的所有记录。

SELECT *

FROM Score023

WHERE Degree > (

    SELECT Degree

    FROM Score023

    WHERE Sno = '101' AND Cno = '3-105'

);

  1. 查询和学号为101的同学同月出生的所有学生的Sno、Sname和Sbirthday列。

SELECT

    Sno, Sname, Sbirthday

FROM

    Student023

WHERE

    MONTH(Sbirthday) = (

        SELECT MONTH(Sbirthday)

        FROM Student023

        WHERE Sno = '101'

    );

  1. 查询“张旭“教师任课的学生成绩(学号、姓名,课程名、成绩)。

SELECT

    S.Sno,

    S.Sname,

    C.Cname,

    SC.Degree

FROM

    Student023 S

JOIN

    Score023 SC ON S.Sno = SC.Sno

JOIN

    Course023 C ON SC.Cno = C.Cno

JOIN

    Teacher023 T ON C.Tno = T.Tno

WHERE

    T.Tname = '张旭';

  1. 查询每科的最高分信息(学号、姓名,课程名、成绩)

SELECT

    S.Sno,

    S.Sname,

    C.Cname,

    SC.Degree

FROM

    Student023 S

JOIN

    Score023 SC ON S.Sno = SC.Sno

JOIN

    Course023 C ON SC.Cno = C.Cno

WHERE

    SC.Degree = (

        SELECT MAX(Degree)

        FROM Score023

        WHERE Cno = SC.Cno

    );

  1. 查询有成绩不及格的同学的学号,姓名。

SELECT DISTINCT

    S.Sno,

    S.Sname

FROM

    Student023 S

JOIN

    Score023 SC ON S.Sno = SC.Sno

WHERE

    SC.Degree < 60;

  1. 查询选修两门及两门以上课程的学生学号及姓名,课程名,成绩,并保存到’SCBXXX’表中。

SELECT

    S.Sno,

    S.Sname,

    C.Cname,

    SC.Degree

INTO

    SCB023

FROM

    Student023 S

JOIN

    Score023 SC ON S.Sno = SC.Sno

JOIN

    Course023 C ON SC.Cno = C.Cno

WHERE

    S.Sno IN (

        SELECT Sno

        FROM Score023

        GROUP BY Sno

        HAVING COUNT(*) >= 2

    );

  1. 查询所有学生的操作系统成绩及排名(学号,姓名,成绩,排名)(不用排序函数

SELECT

    S.Sno,

    S.Sname,

    SC.Degree,

    (SELECT COUNT(*) + 1

     FROM Score023 SC2

     JOIN Student023 S2 ON SC2.Sno = S2.Sno

     JOIN Course023 C2 ON SC2.Cno = C2.Cno

     WHERE C2.Cname = '操作系统' AND SC2.Degree > SC.Degree) AS Rank

FROM

    Student023 S

JOIN

    Score023 SC ON S.Sno = SC.Sno

JOIN

    Course023 C ON SC.Cno = C.Cno

WHERE

    C.Cname = '操作系统';

  1. 查询(没)有选修任何课程学生的信息(学号,姓名,等);

SELECT *

FROM Student023

WHERE Sno NOT IN (SELECT DISTINCT Sno FROM Score023);

  1. 查询所以成绩都及格的学生的信息(学号,姓名,课程号,课程名,成绩,最低成绩)(any ,some,all)

SELECT

    S.Sno,

    S.Sname,

    C.Cno,

    C.Cname,

    SC.Degree,

    (SELECT MIN(Degree) FROM Score023 WHERE Sno = S.Sno) AS MinScore

FROM

    Student023 S

JOIN

    Score023 SC ON S.Sno = SC.Sno

JOIN

    Course023 C ON SC.Cno = C.Cno

WHERE

    S.Sno NOT IN (

        SELECT DISTINCT Sno

        FROM Score023

        WHERE Degree < 60

    );

  1. 查询成绩有不及格的学生的信息(学号,姓名,课程号,课程名,成绩, 最低成绩)(any ,some,all)

SELECT

    S.Sno,

    S.Sname,

    C.Cno,

    C.Cname,

    SC.Degree,

    (SELECT MIN(Degree) FROM Score023 WHERE Sno = S.Sno) AS MinScore

FROM

    Student023 S

JOIN

    Score023 SC ON S.Sno = SC.Sno

JOIN

    Course023 C ON SC.Cno = C.Cno

WHERE

    S.Sno IN (

        SELECT DISTINCT Sno

        FROM Score023

        WHERE Degree < 60

    );

收获:

学会了使用子查询解决复杂问题

理解了窗口函数(OVER PARTITION BY)的应用场景

实现了数据排名功能(不使用排序函数)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端】【业务场景】【面试】在前端开发中,如何实现文件的上传与下载功能,并且处理可能出现的错误情况?

前端文件上传与下载攻略 本文目标&#xff1a;帮你快速掌握文件上传 & 下载的核心实现方式&#xff0c;并在常见出错场景下保持“优雅不崩溃”。 一、文件上传 1. 基础结构 <input type"file" id"fileInput" /> <button id"uploadBtn&…

Kafka 消息积压监控和报警配置的详细步骤

Kafka 消息积压监控和报警配置的详细步骤示例&#xff0c;涵盖常用工具&#xff08;如 Prometheus Grafana、云服务监控&#xff09;和自定义脚本方法&#xff1a; 一、监控配置 方法1&#xff1a;使用 Prometheus Grafana kafka-exporter 步骤1&#xff1a;部署 kafka-ex…

【C++】内存管理:内存划分、动态内存管理(new、delete用法)

文章目录 一、C/C中的内存划分二、C语言中动态内存管理方式三、C中动态内存管理方式1、new、delete基本用法(1)、内置类型(2)、自定义类型 2、operator new与operator delete函数3、new和delete的实现原理&#xff08;1&#xff09;内置类型&#xff08;2&#xff09;自定义类型…

C# 实战_RichTextBox选中某一行条目高亮,离开恢复

C# 中控件richtextbox中某一行的条目内容高亮&#xff0c;未选中保持不变。当鼠标点击某一行的条目高亮&#xff0c;离开该条目就恢复默认颜色。 运行效果&#xff1a; 核心代码实现功能&#xff1a; //高亮指定行的方法private void HighlightLine(RichTextBox rtb,int lineI…

Vue3 ref与props

ref 属性 与 props 一、核心概念对比 特性ref (标签属性)props作用对象DOM 元素/组件实例组件间数据传递数据流向父组件访问子组件/DOM父组件 → 子组件响应性直接操作对象单向数据流&#xff08;只读&#xff09;使用场景获取 DOM/调用子组件方法组件参数传递Vue3 变化不再自…

视频汇聚平台EasyCVR赋能高清网络摄像机:打造高性价比视频监控系统

在现代视频监控系统中&#xff0c;高清网络摄像机作为核心设备&#xff0c;其性能和配置直接影响监控效果和整体系统的价值。本文将结合EasyCVR视频监控的功能&#xff0c;探讨如何在满足使用需求的同时&#xff0c;优化监控系统的设计&#xff0c;降低项目成本&#xff0c;并提…

【C++】 —— 笔试刷题day_21

一、爱丽丝的人偶 题目解析 现在存在n个玩偶&#xff0c;每个玩偶的身高是1、2、3......n&#xff1b; 现在我们要对这些玩偶进行排序&#xff08;如果x人偶&#xff0c;它左右两边的玩偶一个比x高、一个比x矮&#xff0c;那这个玩偶就会爆炸&#xff09;。 我们不想要任何一个…

详解.vscode 下的json .vscode文件夹下各个文件的作用

1.背景 看一些开源项目的时候,总是看到vscode先有不同的json文件,再次做一下总结方便之后查看 settings.json肯定不用多说了 vscode 编辑器分为 全局用户配置 和 当前工作区配置 那么.vscode文件夹下的settings.json文件夹肯定就是当前工作区配置了 在此文件对单个的项目进行配…

手动实现legend 与 echarts图交互 通过js事件实现图标某项的高亮 显示与隐藏

通过html实现legend的样式 提供调用echarts的api实现与echarts图表交互的效果 实现饼图element实现类似于legend与echartstu表交互效果 效果图 配置代码 <template><div style"height: 400px; width: 500px;background-color: #CCC;"><v-chart:opti…

Spring Boot 配置源详解(完整版)

Spring Boot 配置源详解&#xff08;完整版&#xff09; 一、配置源加载顺序与优先级 配置源类型优先级顺序&#xff08;从高到低&#xff09;对应配置类/接口是否可覆盖典型文件/来源命令行参数&#xff08;--keyvalue&#xff09;1&#xff08;最高&#xff09;SimpleComman…

【无人机】无人机遥控器设置与校准,飞行模式的选择,无线电控制 (RC) 设置

目录 1、遥控器校准 1.1、校准步骤 2、飞行模式选择&#xff0c;遥控器通道映射 2.1、配置步骤 1、遥控器校准 在校准无线电系统之前&#xff0c;必须连接/绑定接收器和发射器。绑定发射器和接收器对的过程是特定于硬件的&#xff08;有关说明&#xff0c;请参阅 RC 手册&…

Redis 有序集合 ZSet 深度解析教程

Redis-ZSet 引言一、 ZSet 核心概念与特性1.1 什么是 ZSet&#xff1f;1.2 ZSet 与 Set、List 的本质区别 二、 ZSet 典型应用场景2.1 排行榜 (Leaderboards)2.2 带权重的任务队列 / 延迟队列2.3 时间轴 (Timeline)2.4 范围查找 三、 ZSet 底层实现3.1 ziplist (压缩列表)3.2 s…

【SpringBoot】HttpServletRequest获取使用及失效问题(包含@Async异步执行方案)

目录 1. 在 Controller 方法中作为参数注入 2.使用 RequestContextHolder &#xff08;1&#xff09;失效问题 &#xff08;2&#xff09;解决方案一&#xff1a; &#xff08;3&#xff09;解决方案二&#xff1a; 3、使用AutoWrite自动注入HttpServletRequest 跨线程调…

mfc学习(一)

mfc为微软创建的一个类qt框架的客户端程序&#xff0c;只不过因为微软目前有自己 的亲身儿子C#&#xff08;.net&#xff09;,所以到2010没有进行维护。然后一些的工业企业还在继续进行维护相关的内容。我目前就接手一个现在这样的项目&#xff0c;其实本质与qt的思路是差不多的…

HarmonyOS:一多能力介绍:一次开发,多端部署

概述 如果一个应用需要在多个设备上提供同样的内容&#xff0c;则需要适配不同的屏幕尺寸和硬件&#xff0c;开发成本较高。HarmonyOS 系统面向多终端提供了“一次开发&#xff0c;多端部署”&#xff08;后文中简称为“一多”&#xff09;的能力&#xff0c;可以基于一种设计…

秒出PPT推出更强版本,AI PPT工具进入新纪元!

在现代职场中&#xff0c;PPT是我们沟通和展示信息的重要工具。无论是做产品演示&#xff0c;还是准备工作汇报&#xff0c;一份精美的PPT能大大提升演示效果。然而&#xff0c;传统的PPT制作往往需要消耗大量时间&#xff0c;尤其是在排版、设计和内容调整上。如今&#xff0c…

Godot开发2D冒险游戏——第二节:主角光环整起来!

变量的作用域 全局变量&#xff0c;局部变量&#xff0c;导出变量&#xff08;可以在检查器当中快速查看&#xff09; 为玩家添加移动动画 现在游戏的玩家还只是在滑行&#xff0c;我们需要再添加玩家每个方向上的移动效果 删除原先的Item节点&#xff0c;创建一个动画精灵…

颠覆传统NAS体验:耘想WinNAS让远程存储如同本地般便捷

在当今数据爆炸的时代&#xff0c;网络附加存储(NAS)已成为许多企业和个人用户的必备设备。然而&#xff0c;传统硬件NAS解决方案存在诸多限制&#xff0c;如高额成本、复杂设置和有限的远程访问能力。耘想WinNAS以其创新的软件解决方案&#xff0c;彻底改变了这一局面&#xf…

新市场环境下新能源汽车电流传感技术发展前瞻

新能源革命重构产业格局 在全球碳中和战略驱动下&#xff0c;新能源汽车产业正经历结构性变革。国际清洁交通委员会&#xff08;ICCT&#xff09;最新报告显示&#xff0c;2023年全球新能源汽车渗透率突破18%&#xff0c;中国市场以42%的市占率持续领跑。这种产业变革正沿着&q…

STM32之DHT11温湿度传感器---附代码

DHT11简介 DHT11的供电电压为 3&#xff0d;5.5V。 传感器上电后&#xff0c;要等待 1s 以越过不稳定状态在此期间无需发送任何指令。 电源引脚&#xff08;VDD&#xff0c;GND&#xff09;之间可增加一个100nF 的电容&#xff0c;用以去耦滤波。 DATA 用于微处理器与DHT11之间…