SQL Server--嵌套查询

MySql嵌套查询+关联查询+多表查询+对应案例+mybatis动态sql 超详细 最近学习MyBatis框架 用到多表查询比较多,以前学的不是很好,今特意回来补上。呜呜呜。 文章目录先看我的数据库表1. INNER JOIN2 .LEFT JOIN 左查询3. RIGHT JOIN 右查询4. UNION 全外连接5. LIMIT 分页查询6. ORDER BY 排序查询7. 聚合函数8.分组查询 先看我的数据库表 总共 4张表 老师职位表 tb_position 学生表(为了好辨认效果) tb_student 老师表 (id 班级 老师名字 职位对应表) tb_tea. 阅读详情

嵌套查询

1.带有IN谓词的子查询。

  在SQL语言中,一个 SELECT-FROM-WHERE 语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE 子句或 HAVING 短语的条件中的查询称为嵌套查询(nested query)。

举一个例子:

 select Sname
 from Student
 where Sno in
		(select Sno
		from SC
		where Cno='2'
		);

  上层的查询称为外层查询或父查询,下层查询块称为内层查询或子查询。

  SQL语言允许多层嵌套查询,即一个子查询还可以嵌套其他子查询。但是子查询的select语句中不能使用 order by 子句,order by 子句只能对最终的查询结果排序。

  嵌套查询使用户可以用多个简单查询构成复杂的查询,从而增强 SQL 的查询能力。以层层嵌套的方式来构造程序正是SQL“结构化”的含义所在。
 

1.带有IN谓词的子查询。

  在嵌套查询中,子查询的结果往往是一个集合。

【例 3.55】 査询与“刘晨”在同一个系学习的学生。

(1)先分步进行,最后在嵌套查询,验证结果。

  ①先找出“刘晨”的所在系。

  select Sdep
  from Student
  where Sname='刘晨';

结果如图:
在这里插入图片描述
  ②然后查找所有在CS系学习的学生。

  select Sno,Sname,Sdep
  from Student
  where Sdep='CS';

在这里插入图片描述
(2)也可以直接嵌套查询。

select Sno,Sname,Sdep
from Student
where Sdep in
		(select Sdep
		from Student
		where Sname='刘晨'
		);

在这里插入图片描述
  本例中,子查询的查询条件不依赖父查询,称为不相关查询。

(3)本例中也可以使用自身连接完成。

select S1.Sno,S2.Sname,S3.Sdep
from Student S1,Student S2
where S1.Sdep=S2.Sdep and S2.Sname='刘晨';

在这里插入图片描述
  可以发现运行完结果都是一样的。

  实现同一个查询请求可以有多种方法,不同的方法其执行效率可能也会有差别。

【例 3.56】 查询选修了课程名为“信息系统”的学生学号和姓名。

  本题要涉及三个表,具体代码如下:

  select Sno,Sname
  from Student
  where Sno in
		(select Sno
		from SC
		where Cno in
				(select Cno
				from Course
				where Cname='信息系统'
				)
		);

在这里插入图片描述
  本题也可以使用连接查询实现。

  select Student.Sno,Sname
  from Student,SC,Course
  where Student.Sno=SC.Sno and
	  SC.Cno=Course.Cno and
	  Course.Cname='信息系统';

在这里插入图片描述
  有些嵌套查询可以用连接运算替代,有些是不能替代的。在涉及多个关系时,用嵌套查询逐步求解层次清楚,易于构造,但是在实际生活中,用连接运算表达的查询尽可能采用连接查询。

  子查询的查询条件不依赖父查询,这类查询称为不相关子查询。不相关子查询是较简单的一类子查询。如果子查询的查询条件依赖父查询,这类子查询称为相关子查询,整个查询语句称为相关嵌套查询。

2.带有比较运算符的子查询

 
2.带有比较运算符的子查询

  带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。当用户能确切知道内层返回的是单个值时,可以使用>,<,=,>=,<=,!=或<>等比较运算符。

【例 3.57】 找出每个学生超过(或等于)他自己选修课程平均成绩的课程号。

  select Sno,Cno
  from SC x
  where Grade >=(select avg(Grade)
				from SC y
				where y.Sno=x.Sno
				);				

在这里插入图片描述
求解相关子查询和求解不相关子查询不同,内层查询由于与外层查询有关,所以必须反复求值。

  1.从外层查询中取出SC的一个元组 x ,将元组 x 的Sno值传递给内层查询。

  2.执行内层查询,可以得到一个值,用这个值替代内层查询,代入到外层查询中。

  3.执行查询,得到部分结果

然后外层查询取出下一个元祖重复上述操作,直到外层的 SC 元祖全部处理完毕。(类似两层for循环)

3.带有ANY(SOME)或 ALL 谓词的子查询。

 
3.带有ANY(SOME)或 ALL 谓词的子查询

  子查询返回单值时可以使用比较运算符,但返回多值时要用 ANY 或 ALL 谓词修饰符。而使用 ANY 或 ALL 谓词时必须同时使用比较运算符。

  使用谓词 any 与 all 必须同时使用 比较运算符。

在这里插入图片描述
【例 3.58】 査询非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄。

  select Sname,Sage
  from Student
  where Sage<any(select Sage
 			   from Student
			   where Sdep='CS')
	    and Sdep<>'CS';

根据题意,本例也可以使用聚集函数来实现。

  select Sname,Sage
  from Student
  where Sage <
		  (select max(Sage)
		   from Student
		   where Sdep='CS')
	    and Sdep <>'CS';

在这里插入图片描述
  子查询返回是一个集合,因为是多值。

【例 3.59】 査询非计算机科学系中比计算机科学系所有学生年龄都小的学生姓名及年龄。

  select Sname,Sage
  from Student
  where Sage < all(select Sage
  			   from Student
			   where Sdep='CS')
	    and Sdep<>'CS';

同理,本例也可以使用聚集函数来实现。

  select Sname,Sage
  from Student 
  where Sage <
		     (select min(Sage)
		      from Student 
			  where Sdep='CS')
	    and Sdep <>'CS';

在这里插入图片描述
对应关系如下:

在这里插入图片描述
  =ANY等价于 IN 谓词,< ANY 等价于 < MAX,<>ALL 等价于 NOT IN 谓词,<ALL 等价于<MIN,等等。

4.带有 EXISTS 谓词的子查询。

 
4.带有 EXISTS 谓词的子查询

  EXISTS 代表存在量词 ∃。带有 EXISTS 谓词的子查询不返回任何数据,只产生逻辑真值 “true” 和 “false” 。

【例 3.61】 査询所有选修了 1号课程的学生姓名。

  本査询涉及Student和SC表。可以在Student中依次取每个元组的Sno值,用此值去检査SC表。若SC中存在这样的元组,其Sno值等于Student.Sno值,并且其Cno = T,则取此Student.Sname送入结果表。

select Sname
from Student
where exists
		(select *
		 from SC
		 where Sno=Student.Sno and Cno='1');
		

在这里插入图片描述
  使用存在量词exists后,若内层査询结果非空,则外层的where子句返回真值,否则返回假值。

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

【例 3.61】 査询没有选修1号课程的学生姓名。

select Sname
from Student
where not exists
		(select *
		 from SC
		 where Sno=Student.Sno and Cno='1');

在这里插入图片描述
  所有带有 IN 谓词,比较运算符,ANY 和 ALL 谓词的子查询都能用带 EXISTS 谓词的子查询等价替换。并且由于EXISTS量词的相关子查询只关心内层查询是否有返回值,并不需要具体值,所以效率并不一定低于不相关子查询。

【例 3.62】 査询选修了全部课程的学生姓名。

  SQL中没有全称量词(fbrall),但是可以把带有全称量词的谓词转换为等价的带有存在量词的谓词:

  ( ∀ x ) P ≡ ( ∃ x ( ¬ P ) )

  select Sname
  from Student
  where not exists
		(select *
		 from Course
		 where not exists
				(select *
				 from SC
				 where Sno=Student.Sno and
				       Cno=Course.Cno));

在这里插入图片描述
因为是查找选修所有课程的同学的姓名,但是表中的数据较少,所以没有数据。。。

【例 3.63】 査询至少选修了学生201215122选修的全部课程的学生号码。

  本查询可以用逻辑蕴涵来表达:査询学号为x的学生,对所有的课程y,只要201215122学生选修了课程y,则x也选修了 y。形式化表示如下:

用p表示谓词“学生201215122选修了课程y”
用q表示谓词“学生x选修了课程y” ,则上述査询为
(∀ y) ( p → q )

SQL语言中没有蕴涵(implication)逻辑运算,但是可以利用谓词演算将一个逻辑蕴涵的谓词等价转换为
p → q ≡ ¬ p ∨ q

该査询可以转换为如下等价形式:
( ∀ y ) p → q ≡ ¬ ( ∃ y ( ¬ ( ¬ p ∨ q ) ) ) ≡ ¬ ∃ y ( p ∧ ¬ q )

它所表达的语义为:不存在这样的课程y,学生201215122选修了 y,而学生x没有选。

select distinct Sno
from SC SCX
where not exists
		(select *
		 from SC SCY
		 where SCY.Sno='201215122' and
		       not exists
			   (select *
			    from SC SCZ
				where SCZ.Sno=SCX.Sno and
				      SCZ.Cno=SCY.Cno));

在这里插入图片描述

总结

  注意区分任意一个和所有,跟平时的有点不太一样,后面的使用 EXISTS 去实现全程量词和逻辑蕴涵可能会有一点比较难理解,还得多记忆,多复习。

机械臂电机力矩计算 设计 6 轴机械臂时,电机力矩计算是确保机械臂负载能力、运动精度和安全性的核心环节,需围绕和两大核心展开,结合机械臂结构参数(如关节长度、质量分布)、负载需求(如末端负载重量、惯性)和运动参数(如加速度、角速度)逐步推导。 阅读详情

相关推荐

学习记录——SIMPACK生成轨道谱文件的方法

生成轨道谱文件的方法,可以用于实测轨道谱导入和自制轨道谱导入仿真

weixin_51965897的博客 7796

SQL查询(嵌套查询)

嵌套查询

qq_68860973的博客 2万+

EEVDF调度算法核心实现解析(一)

本文深入解析Linux kernel 6.6引入的EEVDF调度算法核心实现,详细讲解其基于虚拟截止时间(virtual deadline)的进程挑选机制和红黑树优化设计。通过代码实例展示算法如何平衡系统响应速度与公平性,特别适合需要优化Linux系统性能的开发者参考。

weixin_42522953的博客 476

结构化查询语言之 SQL 嵌套子查询(以 MySQL 为例)

文章目录1. 集合成员资格2. 集合的比较3. 空关系测试:exist、not exist4. 重复元祖存在性测试5. from子句中的子查询6. with子句7. 标量子查询   SQL 提供嵌套子查询机制:子查询是嵌套在另一个查询中的select-from-where表达式。子查询嵌套在where子句中,通常用于对集合的成员资格、集合的比较及集合的基数进行检查;子查询也可以嵌套from子句中;除此之外,还有一类子查询是标量子查询。 1. 集合成员资格 SQL允许测试元祖在关系中的成员资格: 连接词

qq_44992559的博客 3695

适合初学者的ROS机器人教程(1): Ubuntu下ROS创建自己的包和使用github下载的包

ROS如何创建自己的包 1. 首先创建catkin工作空间(如果你以及有了请忽略) $ mkdir catkin_ws # 创建一个文件夹里面计划放我们的项目,ws是workspace的缩写 $ cd catkin_ws # 将当前工作文件夹切换到catkin_ws这个文件夹 ~/catkin_ws$ catkin_make # 执行catkin_make创建一ROS项目 此时你的catkin_...

@司南牧|知乎|博客|易懂教程|李韬 3243

linux和mac安装+配置circos(

一定要下载完这两个包,GD才会work,要不然会报错,且-modules显示也是fail。官网的教程说的很明白,但是很多包都已经过时了需要在网上找。一般来讲,所有包的安装都不会太困难,除了GD。1.是因为官网给的链接下出来的tgz无法解压。2.我的电脑安装后GD照样是fail的。,进入这个地址下一个.tgz。第二点的原因在于,官网的情况。,进入这个地址,按部就班。GD安装困难有以下几点。搞了一天终于配置成功。

xiufan1的博客 549

【SQL】多表查询语句(嵌套子查询,多表连接)操作实例

SQL Server多表查询,包括连接操作和嵌套子查询 名称解释(不区分大小写) student:学生表,属性分别为sno学号、sname学生姓名、age年龄、sex性别、dno学院编号、birthday生日 sc选课信息表:sno学号、cno课程号、grade成绩 dept学院信息表:dno学院编号、dname学院名称、dean学院负责人 course课程信息表:cno课程号、cname课程名称、tname老师名称、credit学分、room教室 下面语句可以直接复制到SQL Server运行 方法不

Lee的博客 2万+

2023电赛B题实战解析:基于立创天空星开发板的同轴线缆长度与负载测量系统

本文详细解析了2023年全国大学生电子设计竞赛B题的实战方案,重点介绍了基于立创EDA天空星开发板(STM32F103)的同轴线缆长度与负载测量系统。文章深入剖析了两种核心测量方案,并推荐了更稳定易实现的NE555测电容法,提供了从硬件选型、电路设计到软件编程、参数标定的完整“施工图”,实测精度可达厘米级和皮法级,为电赛复现与高精度测量学习提供了清晰指导。

weixin_36303305的博客 231

SQL数据查询——嵌套查询

嵌套查询语法格式带有IN谓词的子查询IN谓词实现交运算IN谓词实现差运算带有比较运算符的子查询带有ANY谓词的子查询带有ALL谓词的子查询相关子查询引用子查询的值不引用子查询的值(EXISTS)基于派生表的查询 语法格式 SELECT 列名表达式 FROM 表名 WHERE 表达式 运算符 (SELECT 子查询) 其中运算符包含IN、关系运算符、ANY、ALL、EXISTS五类 【注意】 1.S...

SAMSARA的博客 5512

多跳问答技术解析:从原理到金融领域实践

多跳问答(Multi-hop QA)是自然语言处理中的高级任务,要求系统通过多步推理整合分散信息来回答问题。其核心技术在于理解文档间的复杂关联,相比单跳问答需要更精细的数据集设计和模型架构。在金融、医疗等专业领域,多跳问答能有效处理如'腾讯大股东投资的港股上市公司'这类需要串联多个信息点的问题。典型实现方案包括MR-Search框架的三级检索器设计,分别处理实体召回、关系匹配和数值比较。当前最佳实践表明,结合稠密检索与稀疏检索的混合策略,配合动态路由机制,能在保持较高精度的同时控制计算成本。这类技术在金融风

weixin_42566072的博客 606

vue3 - vite报错TypeError: crypto.hash is not a function(vue3+vite启动运行提示错误,项目无法启动且打包报错失败,详细解决排查方案教程)

vue3 vite 报错,vue3+vite启动报错:TypeError: crypto.hash is not a function,创建vue3+vite项目时报错TypeError: crypto.hash is not a function,如何解决这个问题,VUE3+VITE报错crypto.hash,vue3运行报错,vite运行报错,vue3打包报错,vite打包报错,vue3新建项目无法运行,vue3 vite创建项目直接报错了,node版本不兼容,修改了node版本还是不行,依旧报错,一直

✅ 精选推荐文章 1万+

sql server中的嵌套查询

嵌套查询 嵌套查询概述:将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。 不相关子查询 子查询的查询条件不依赖于父查询 解释:由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。 相关子查询 子查询的查询条件依赖于父查询 解释:首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若...

blue_mxy的博客 914

六、大模型(LLMs)参数高效微调(PEFT) 面

链接: https://pan.baidu.com/s/1TYqdCK53tDFEYGtAvpnTbA 提取码: 6a9s。考核中的核心考点,并针对这些考点提供了详尽的解答。通过网盘分享的文件:06大模型(LLMs)参数高效微调(PEFT) 面。)有哪些方法,能不能稍微介绍一下它们间?这种微调方法和全参数比起来有什么劣势吗?能不能总结一下各种参数高效微调方法?高效参数微调,如何进行存储?多种不同的高效微调方法对比。模型显存占用的部分有哪些?微调方法为啥能加速训练?微调计算可训练参数的比例。

weixin_51988935的博客 534

数据库作业6:SQL Server的部分操作(嵌套查询)

操作目录八.嵌套查询1.带有IN谓词的子查询2.带有比较运算符的子查询3.带有 ANY(SOME)或ALL谓词的子查询4.带有EXISTS谓词的子查询 八.嵌套查询 不相关子查询 :子查询的查询条件不依赖于父查询。即为“由里向外”处理,先执行子查询,子查询的结果用于建立父查询的查找条件。 相关子查询 :子查询的查询条件依赖于父查询。 1.带有IN谓词的子查询 【例3.55】查询与“刘晨”在同一个系学习的学生。 ①.分步查询: 首先确定刘晨所在系名 SELECT Sdept FROM Student

popular的博客 1017

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SQL Server中的嵌套查询

嵌套查询 在SQL语音中,一个select-from-where语句称为一个查询块。将一个查询块嵌套在另一个查询块的where子句或HAVING短语的条件中的查询称为嵌套查询。在嵌套查询中上层的查询块称为外层查询或父查询,下层的查询块称为内层查询或子查询。 带有IN谓词的子查询 先分步来进行查询 然后将第一步查询嵌套在第二步查询的条件中,构造嵌套查询。 SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN (select Sdept FROM

MHCddt的博客 2630

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SQL server 嵌套查询

目录前言 前言 在SQL语言中,一个SELECT-FROM-WHERE称为一个查询块。将一个查询块嵌套在

fanlrr的博客 1663

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SQL Server 数据库之嵌套查询

SQL Server 数据 嵌套查询

程序员小白的博客 4901

SQL Server 之 子查询与嵌套查询

当由where子句指定的搜索条件指向另一张表时,就需要使用子查询或嵌套查询。 1 子查询 子查询是一个嵌套在select、insert、update或delete语句或其他子查询中的查询。任何允许使用表达式的地方都可以使用子查询。 1.1语法规则: 子查询的select查询总使用圆括号括起来 不能包括compute或for browse子句 如果同时指定top子句,则可能...

aofgryq715157389的博客 1504

sql镶嵌查询_Sql Server系列:嵌套查询

嵌套查询是指一个查询语句嵌套在另一个查询语句内部的查询。嵌套查询也就子查询,在SELECT子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或多个表。子查询中可以使用比较运算符,如“”、“>=”等。子查询中常用的操作符有ANY(SOME)、ALL、EXISTS。子查询可以添加到SELECT 、UPDATE和DELETE语句中,可以进行多层嵌套。1 使用比较运算符子...

weixin_27066963的博客 562

Sql Server系列:嵌套查询

  嵌套查询是指一个查询语句嵌套在另一个查询语句内部的查询。嵌套查询也就子查询,在SELECT子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或多个表。子查询中可以使用比较运算符,如“<”、“<=”、“>”、“>=”等。   子查询中常用的操作符有ANY(SOME)、ALL、EXISTS。子查询可以添加到SELECT 、UPDATE和DELE...

weixin_34391854的博客 269

【SQL Server数据库】连接查询和嵌套查询

1.找出所有任教“数据库”的教师的姓名。 2. 取出学号为“980101011”的学生选修的课程号和课程名。 3.“涂杰杰”所选修的全部课程号及成绩。 4.找出“苏贤兴”同学所学课程的名称和成绩。 5. 显示所有课程的选修情况(外连接)。 6.检索选修课程号为“0109”或“0111”的学生学号、姓名和所在班级。 7.查询“0203”课程的最高分的学生的学号。 8.没有选修以“01”开头的课程的学生信息。

布丁椰奶冻的博客 807

嵌套查询和连接查询(SQL SERVER 2008)

一、 实验题目:嵌套查询和连接查询 二 、实验目的:加深对嵌套查询和连接查询的理解,比较两种方法的不同。 题目六: 药品(编号,名称,价格,厂商) 处方(药品编号,数量,医生编号) 医生 (编号,姓名,科室,职称) 根据上面基本表的信息完成下列查询。 1 列出医生“张力”开的所有药品名称 。 2 列出比“北方制药”所有药品都贵的药品信息。 3 列出内科所有处方的医生姓名、药品名称、金额 所测试...

Mr____Cheng的博客 1637

用SQL server语言实现单表嵌套查询

若需要对Student表进行嵌套查询,则可以先对表格取别名,后面直接用别名代替表格即可: select * from Student a where a.学号 in (select * from Student b where b.性别=‘男’ );

qq_45061680的博客 392

SQL Server 2019 嵌套查询实验

嵌套查询(Nested Query)是数据库查询中常用的一种查询技术。它允许在查询的条件或结果中包含另一个查询。在关系型数据库中,嵌套查询是通过在一个查询中引用另一个查询的方式来实现的。嵌套查询可以用于在查询结果中过滤数据、计算聚合值、进行多表查询等。

chen666946的博客 489

Sql Server-------嵌套查询

嵌套查询是指一个查询语句嵌套在另一个查询语句内部的查询。嵌套查询也就子查询,在SELECT子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或多个表。子查询中可以使用比较运算符,如“<”、“<=”、“>”、“>=”等。   子查询中常用的操作符有ANY(SOME)、ALL、EXISTS。子查询可以添加到SELECT 、UPDATE和DELETE...

qq_24391357的博客 869

SQL Server数据库:嵌套查询

3、 掌握使用比较运算符的子查询;4、 掌握使用限量谓词的子查询;5、 综合运用所学知识实现查询。2、 掌握带存在量词的子查询;1、掌握带谓词IN的子查询;1. 根据玩具品牌统计每种品牌的平均单价,输出其中平均单价最高的品牌ID以及平均单价。(Toys表的cBrandid表示品牌,mToyrate表示单价)

sherry__yuzu的博客 656
上一篇: SQL Server--数据查询(续)
下一篇: 2021-04-12--数据查询(空值,视图)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谁会没有丶遗憾呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值