SQL数据查询之——嵌套查询

PostgreSQL复杂嵌套查询SQL示例 现在,我们考虑一个更加复杂的情景:一个在线教育平台的数据库,其中包括用户、课程、章节、测验和学习进度等表。然后,主查询将这些计数连接到用户表,并计算了每个用户的总活动数、平均帖子数和平均评论数,并通过排名函数对用户进行排序。在编写更复杂的查询时,确保使用适当的索引、优化技术和测试方法,以确保查询性能良好并且准确地返回所需的结果。最后的查询通过连接这些CTE并应用筛选条件来找到购买了至少两种不同产品的顾客,并列出了他们的订单信息以及购买的产品数量。CTE 找出每个用户最近学习的课程中的最后一个章节。 阅读详情

转载:https://www.cnblogs.com/OctoptusLian/p/8183241.html

阅读目录

回到顶部

一、概念描述

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

复制代码

SELECT Sname  /*外层查询或父查询*/
FROM Student
WHERE Sno IN
    (SELECT Sno  /*内层查询或子查询*/
     FROM SC
     WHERE Cno='2');

复制代码

 

SQL语言允许多层嵌套查询,即一个子查询中还可以嵌套其他子查询。

注意:子查询的SELECT语句中不能使用 ORDER BY 子句,因为 ORDER BY 子句只能对最终查询结果排序。

 

回到顶部

二、带有IN谓词的子查询

在嵌套查询中,子查询的结果往往是一个集合,所以谓词 IN 是嵌套查询中最经常使用的谓词。

 

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

复制代码

SELECT Sno,Sname,Sdept
FROM Student
WHERE Sdept IN
    (SELECT Sdept
     FROM Student
     WHERE Sname='刘晨');

复制代码

 

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

复制代码

SELECT Sno,Sname /*最后在Student关系中取出Sno和Sname*/
FROM Student
WHERE Sno IN
    (SELECT Sno  /*然后在SC关系中找出选修了3号课程的学生学号*/
     FROM SC
     WHERE Cno IN
        (SELECT Cno  /*首先在Course关系中找出“信息系统”的课程号,结果为3号*/
         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='信息系统';

 

回到顶部

三、带有比较运算符的子查询

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

 

找出每个学生超过他自己选修课程平均成绩的课程号

SELECT Sno,Cno
FROM SC X
WHERE Grade >=(SELECT AVG(Grade)
               FROM SC y
               WHERE y.Sno=x.Sno);

 

回到顶部

四、带有ANY(SOME)或ALL谓词的子查询

子查询返回单值时可以用比较运算符,但返回多值时要用ANY(有的系统用SOME)或ALL谓词修饰符。而使用ANY或ALL谓词时则必须同时使用比较运算符。其语义如下:

>ANY

大于子查询结果中的某个值

>ALL

大于子查询结果中的所有值

<ANY

小于子查询结果中的某个值

<ALL

小于子查询结果中的所有值

>=ANY

大于等于子查询结果中的某个值

>=ALL

大于等于子查询结果中的所有值

<=ALL

小于等于子查询结果中的所有值

<=ANY

大于等于子查询结果中的某个值

=ANY

等于子查询结果中的某个值

=ALL

等于子查询结果中的所有值(通常没有实际意义)

!=(或<>)ANY

不等于子查询结果中的某个值

!=(或<>)ALL

不等于子查询结果中的任何一个值

 

查询非计算机科学系中比计算机科学系任意一个学生年龄小的学生姓名和年龄

复制代码

SELECT Sname,Sage
FROM Student
WHERE Sage<ANY (SELECT Sage
                FROM Student
                WHERE Sdept='CS')
AND Sdept <> 'CS';

复制代码

 

查询非计算机科学系中比计算机科学系所有学生年龄都小的学生姓名和年龄

复制代码

SELECT Sname,Sage
FROM Student
WHERE Sage<ALL
          (SELECT Sage
           FROM Student
           WHERE Sdept='CS')
AND Sdept <> 'CS';

复制代码

提示:本查询同样可以用聚集函数实现

复制代码

SELECT Sname,Sage
FROM Student
WHERE Sage <
    (SELECT MIN(Sage)
     FROM Student
     WHERE Sdept='CS')
AND Sdept <>'CS';

复制代码

 

在此把ANY、ALL与聚集函数的对应关系表示如下

 

回到顶部

五、带有 EXISTS 谓词的子查询

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

 

查询所有选修了1号课程的学生姓名

复制代码

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

复制代码

 

使用存在量词EXISTS后,若内层查询结果为空,则外层的WHERE子句返回真值,否则返回假值。

 

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

复制代码

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

复制代码

 

 

查询选修了全部课程的学生姓名

由于没有全称量词,可将题目的意思转换成等价的用存在量词的形式:查询这样的学生,没有一门课程是他不选修的。

复制代码

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

复制代码

 

 

查询至少选修了学生201215122选修的全部课程的学生号码

复制代码

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));

复制代码

 

 

回到顶部

六、总结

此次学习和整理了有关SQL与嵌套查询相关的程序

  • 带有IN谓词
  • 带有比较运算符
  • 带有ANY或ALL
  • 带有EXISTS谓词

尤其应格外重视 ANY、ALL与聚集函数的对应关系,还有带EXISTS时逻辑上的判断。

SQL嵌套查询深度解析:从子查询到EXISTS与性能优化 SQL是数据操作的核心语言,然而面对复杂查询需求时,单条SELECT语句往往存在表达上的边界。嵌套查询通过子查询分层求解,将集合成员判断、单值比较、存在性检查等逻辑压缩进一条语句,显著提升查询意图的紧凑性与可读性。从基础的IN子查询到逐行驱动的相关子查询,再到ANY/ALL的比较语义与EXISTS的存在性判断,每种写法都对应特定的业务场景和数据形态。理解子查询返回类型、执行顺序及数据库优化器行为,是写出高效SQL的关键。在实际工程中,嵌套查询并非孤立技巧,需要结合JOIN、CTE等工具进行改写与优化,避免深 阅读详情

相关推荐

项目管理中 PMO 的关键职能解析

在企业数字化转型与战略落地的浪潮中,PMO(Project Management Office,项目管理办公室)逐渐从“项目辅助角色”升级为“组织级战略执行中枢”。然而,多数人对PMO的认知仍停留在“管项目的部门”或“文档审核机器”的层面。本文将打破误解,通过生活化类比(如“中枢神经”“导航系统”)、流程图解(战略对齐循环)、实际案例(制造企业PMO升级),深入解析PMO的五大核心职能:战略对齐、流程标准化、资源管理、绩效监控、知识沉淀。最终揭示PMO的本质——

项目管理的博客 1250

SQL查询(嵌套查询)

嵌套查询

qq_68860973的博客 2万+

论文笔记:Group Equivariant Convolutional Networks

Group Equivariant Convolutional Networks 1、四个问题 要解决什么问题? 对卷积神经网络进行扩展,并提出一个在特定的变换(旋转、平移等,也可表示为一个特殊的群)下具有等变性的网络。 用了什么方法解决? 提出了一种新的卷积神经网络结构——群等变卷积神经网络(Group equivariant Convolutional Neural Network)...

hongbin_xu的博客 1万+

【SQL】(重难点)嵌套查询

SQL的嵌套查询1相关子查询和不相关子查询 2子查询的限制 3嵌套查询的谓词。

bubblecheese的博客 7674

告别卡顿闪烁!在Cesium 1.134中集成SOG格式,让400万高斯秒级加载

本文详细介绍了如何在Cesium 1.134中集成SOG格式,实现400万高斯数据的秒级加载,解决传统加载方式导致的卡顿和闪烁问题。通过空间索引重构、属性量化编码和WebGPU原生支持等技术,SOG格式显著提升了三维地理空间可视化的性能。文章还提供了环境准备、模型转换和Cesium集成的实战指南,帮助开发者高效优化项目。

weixin_29313817的博客 497

[3.4]【机器人运动学MATLAB实战分析】PUMA560机器人逆运动学MATLAB计算

PUMA560是六自由度关节型机器人,其6个关节都是转动副,属于6R型操作臂。各连杆坐标系如图1,连杆参数如表1所示。本文对PUMA560机器人逆运动学进行分析并MATLAB计算

m0_72676510的博客 1947

SQL语句 - 嵌套查询(SQLServer)

嵌套查询的意思是,一个查询语句()查询语句块可以嵌套在另外一个查询块的where子句中,称为嵌套查询。其中外层查询也称为父查询,主查询。内层查询也称子查询,从查询。嵌套查询的工作方式是:先处理内查询,由内向外处理,外层查询利用内层查询的结果嵌套查询不仅仅可以用于父查询select语句使用。还可以用于语句或其他子查询中。

极客神殿 2万+

AD9361功能介绍和使用

AD9361使用分数分频锁相环(PLL)来产生发射机和接收机本地振荡器(LO)频率和BB PLL。BB PLL 可用于数据转换、数字滤波器和 |/O 端口。PLL的参考时钟可以由外部振荡器或外部晶体(XO)和数字可编程片内可变电容提供,电容微调产生参考时钟频率,XO和微调电容的组合统称为DCXO。有多个天线输入的分集系统。接收链数据首先经过低噪声放大器(LNA),然后是同相(1)和正交(Q)放大器,混频器和频带整形滤波器,可将接收到的信号下变频为基带以进行数字化。时分双工(TDD)和频分双工(FDD)。。。

wangjie36的博客 1万+

SQL数据查询——嵌套查询

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

SAMSARA的博客 5512

【PCL 特征】积分图法线估计

本文介绍了基于积分图的有序点云法线估计方法。通过利用点云数据的行列式结构特性,该方法避免了传统KD树搜索,采用积分图将邻域统计运算复杂度从O(k²)降至O(1)。详细阐述了四种法线估计算法:协方差矩阵法(精度最高)、平均3D梯度法(实时性好)、平均深度变化法(适合SLAM)和简单3D梯度法(速度最快)。重点分析了积分图构建、动态窗口平滑处理、法线方向调整等关键技术,并提供了PCL实现代码示例。实验表明,不同方法在精度和速度上存在显著差异,可根据具体应用场景选择合适算法。

yijiujiusan的博客 275

锐捷 MPLS VPN 配置

ISP内部配置 , PE设备和CE设备之间的接口不开启 ( 只在物理接口上配置 , loopback 口不配置 )最后一步关闭 ipv4 单播 , 如果你发现路由奇奇怪怪的 , 可以尝试一下。both --> 同时配置 import export 值。绑定后接口会重置 , 且接口的路由会转到VRF路由表中。这里基本上绑定了 vrf 实例的接口都需要宣告进去。vpnv 4 通道是用来传递 mpls 路由的。先建立邻居管理,建立VPNV4通道。这里要做双向引入 , 才会有路由。export 导出值。

dekangzou的博客 1710

SQL语言的数据查询之嵌套查询

在SQL语言中,一个SELECT-FROM-WHERE语句被称为一个查询块。将一个查询块嵌套在另外一个查询块的WHERE子句或者HAVING短语的条件中的查询被称为嵌套查询。上层的查询块称为外层查询或父查询,下层的查询被称为内层查询或子查询。

tester Xclincer的博客 3474

高压控制单元与接触器 —— BMS电池的“高压大门”

高压接触器在BMS电池管理系统中扮演着“高压大门”的角色,负责控制电池包与整车高压母线的连接与隔离。接触器的工作原理基于线圈产生的磁力吸合接点,通过主触点接通高压电流路径,辅助触点检测状态,灭弧结构保护接点。预充电路的设计是为了避免直接连接大电容时产生的浪涌电流冲击,通过预充电阻逐步充电,确保系统安全上电。接触器控制策略包括顺序控制、辅助触点检测、温度监控、故障断电和背靠背MOS辅助控制,以确保系统的高效和安全运行。工程师在选择接触器型号、控制线圈、检测状态、软件冗余控制和预充失败保护等方面提供了具体建议。

weixin_43199439的博客 811

SQL 数据查询(4)—— 嵌套查询

文章目录 嵌套循环 SELECT Sname FROM Student WHERE Sno IN( SELECT Sno FROM SC WHERE Cno = '2' );

ChrisKevin0221的博客 9884

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

sql镶嵌查询_SQL数据查询之——嵌套查询

一、概念描述在SQL语言中,一个 SELECT-FROM-WHERE 语句称为一个查询块。将一个查询块嵌套在另一个查询块的 WHERE 子句或 HAVING 短语的条件中的查询称为 嵌套查询。例如:SELECT Sname /*外层查询或父查询*/FROMStudentWHERE Sno IN(SELECT Sno /*内层查询或子查询*/FROMSCWHERE Cno='2');SQL语言允...

weixin_39888807的博客 1486

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SQL数据查询之嵌套查询中的带IN子查询

在SQL语言中,一个select-from-where语句称为一个查询块。将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询   例如:     select Sname            /*外层查询或父查询*/     from Student     where Sno in           (select Sno ...

云源 5734

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SQL server 2012之数据查询(3)— 嵌套查询

(本章查询所用到的表都在博客中的单表查询中,这里直接用表名就不写表的内容了;) 在SQL语言中,一个select - from - where 语句称之为一个查询块。将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询 例如: select sname from student /*外层查询或父查询*/ where sno in ( select s...

ITlfh的博客 3104

SQL 语句(四)--------------数据查询(嵌套查询)

/**********************************嵌套查询******************************************/ --在SQL语言中,一个SELECT-FROM-WHERE语句称为一个“查询块” --将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为“嵌套查询” --SQL语言允许多层嵌套,即一个子查

SuilandCoder的博客 894

mysql嵌套查询 in_SQL数据查询之嵌套查询中的带IN子查询

在SQL语言中,一个select-from-where语句称为一个查询块。将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询例如:select Sname            /*外层查询或父查询*/from Studentwhere Sno in(select Snofrom SC        /*内层查询或子查询*/where Cno=...

weixin_39781209的博客 1104

SQL Server 2012 数据查询二 多表查询(连接查询、嵌套查询)

文章目录SQL语法格式连接查询1.交叉连接查询2.内连接查询3.左外连接查询4.右外连接查询5.全外连接查询嵌套查询1.独立单值子查询2.独立多值子查询3.相关子查询 SQL语法格式 SELECT [all | DISTINCT] <目标列表达式> [别名] [,<目标列表达式> [别名]]... FROM <表名或视图名> [别名] [,<表名或视图名&...

柚子君的小窝 3508
上一篇: MySQL优化技术(一)
下一篇: MySQL里面的子查询
周末去看海
博客等级 码龄9年 50粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值