SQL嵌套查询和集合查询

ops/2024/9/24 0:29:29/

嵌套查询

先导概念

查询块:一个select语句为一个查询块

嵌套查询:将一个查询块嵌套在一个另一个查询块中where子句中的查询叫做嵌套查询。

嵌套查询的种类:

不相关子查询:子查询里的条件不依赖于父查询,从里到外依次查询,子查询的结果作为上一次查询的条件。

相关子查询:子查询里的条件依赖于父查询。父查询中列名就像是数组名,里面有很多元素,父查询的过程就像for循环遍历数组一样对每一个元素进行判断,如果符合条件就放入查询结果。而判断的条件就在where的子查询中。子查询一般用sno = s.sno 来确定遍历的索引,s,sno就像for循环中的i一样。

子查询的限制

不能使用ORDERBY语句

嵌套查询的谓词

in 比较运算符 any all  exists

带有谓词in的子查询
eg:查询与“刘晨”在同一个系学习的学生
SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept IN
( SELECT Sdept
FROM Student
WHERE Sname=' 刘晨 ' );
带有比较运算符的子查询

只能在内层查询返回单值的情况下使用(毕竟比较只能单个数之间比较)

eg:查询与“刘晨”在同一个系学习的学生

SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept =
( SELECT Sdept
FROM Student
WHERE Sname=' 刘晨 ' );
eg: 找出每个学生超过他选修课程平均成绩 的课程号
不难写出以下代码
SELECT Sno,Cno
FROM SC x
WHERE Grade >
那么怎么算出这位学生的平均成绩呢,直接用 avg(grade)肯定不行,因为其中包含了其他的学生的成绩。
所以这里就用到相关子查询了,在子查询中的where部分写下sno= x.sno,这样子查询的条件就会依赖于父查询。sno=x.sno就像一个遍历一个数组一样,算出每个学生(数组)的平均成绩
SELECT Sno,Cno
FROM SC x
WHERE Grade >
( SELECT AVG(Grade)
FROM SC y
WHERE y.Sno = x.SNO );
带有any或all谓词的子查询

一般与比较运算符搭配,扩展比较运算符的功能,不用局限于内层查询只能返回一个值。

<any : 小于子查询的结果中某一值

<all :  小于子查询的结果中所有值
带有EXISTS谓词的子查询

exists不返回任何实际数据,只返回逻辑真值,TRUE和FALSE

eg:查询所有没有选修1号课程的学生姓名

思路是查询student表中的学生,如果在课程表中这个学生选修了1号课程,条件就为false,结果中不会有这个学生。这个查询就很想if语句,如果成立就将其放入查询结果,如果不成立,就不放入查询结果。

SELECT Sname
FROM Student S
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE S.Sno = Sno AND Cno=1);

http://www.ppmy.cn/ops/19541.html

相关文章

Parallels Desktop19虚拟机电脑版下载安装Windows详细图文教程2024最新

Parallels Desktop是一款Mac虚拟机软件&#xff0c;可以在Mac上运行Windows系统&#xff0c;它是Mac上最优秀的虚拟机软件之一。用户无需重启即可在Mac上同时运行Mac OS和Windows应用程序&#xff0c;且两者之间能够无缝切换&#xff0c;对此&#xff0c;用户甚至无需设置双系统…

C语言 三目运算符

C语言 逻辑分支语句中 还有一种 三目运算符 我们编写代码如下 #include <stdio.h>int main() {const char* a 1 1 ? "表达式1" : "表达式2";printf("%s", a);return 0; }这里 我们根据逻辑 先定义一个a 然后 它的值 等于一个 三目运算…

iZotope RX 10 音频修复和增强工具 mac/win

iZotope RX 10 for Mac是一款出色的音频修复和增强工具&#xff0c;凭借其卓越的音频处理技术&#xff0c;能够轻松应对各种音频问题。 无论是背景噪音、回声还是失真&#xff0c;RX 10都能精准去除&#xff0c;还原清晰纯净的音频。同时&#xff0c;它还提供了丰富的增强工具&…

如何处理PHP中的文件上传和下载?

如何处理PHP中的文件上传和下载&#xff1f; 处理PHP中的文件上传和下载是Web开发中常见的任务&#xff0c;涉及到前端表单的设计、后端脚本的编写以及服务器配置等多个方面。下面将详细阐述如何在PHP中实现文件上传和下载的功能。 文件上传 文件上传通常涉及前端表单的创建…

阿里云服务器部署wordpress站点

步骤如下&#xff1a; 安装宝塔登录宝塔&#xff0c;安装wordpress环境新建站点&#xff0c;新建的时候只输入ip地址就可以&#xff0c;再创建一个数据库dev1在站点文件夹中传入wordpress&#xff0c;更改站点的配置文件&#xff0c;将工作目录xxx改成xxx/wordpress修改wordpr…

手机误删照片如何恢复?怎么快速有效找回照片?

现在手机的功能越来越强大&#xff0c;手机厂家不断内卷&#xff0c;拍照功能越来越强&#xff0c;我们已经习惯用手机来记录生活了&#xff0c;因此储存的照片都特别珍贵&#xff0c;一旦误删&#xff0c;就容易造成不可磨灭的损失。那么手机误删照片如何恢复&#xff1f;本文…

OpenHarmony语言基础类库【@ohos.util.List (线性容器List)】

List底层通过单向链表实现&#xff0c;每个节点有一个指向后一个元素的引用。当需要查询元素时&#xff0c;必须从头遍历&#xff0c;插入、删除效率高&#xff0c;查询效率低。List允许元素为null。 List和[LinkedList]相比&#xff0c;LinkedList是双向链表&#xff0c;可以…

Redis技术总结

1.基本数据结构,底层原理,以及应用 String 底层使用了SDS简单动态字符,string一共三种编码方式,int,embstr,raw int主要存储long型整数 string有两个数据结构redisObject和SDS embstr和raw底层sds,主要区别是embstr的redisobject和sds连续存储在一起,而redisobject和s…