sql镶嵌查询_SQL数据查询之——嵌套查询「建议收藏」

sql镶嵌查询_SQL数据查询之——嵌套查询「建议收藏」一、概念描述在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。例如:SELECTSname/*外层查询或父查询*/FROMStudentWHERESnoIN(SELECTSno/*内层查询或子查询*/FROMSCWHERECno=’2′);SQL语言允…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、概念描述

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

SELECT Sname /*外层查询或父查询*/

FROMStudentWHERE Sno IN(SELECT Sno /*内层查询或子查询*/

FROMSCWHERE Cno=’2′);

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

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

二、带有IN谓词的子查询

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

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

SELECTSno,Sname,SdeptFROMStudentWHERE Sdept IN(SELECTSdeptFROMStudentWHERE Sname=’刘晨’);

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

SELECT Sno,Sname /*最后在Student关系中取出Sno和Sname*/

FROMStudentWHERE Sno IN(SELECT Sno /*然后在SC关系中找出选修了3号课程的学生学号*/

FROMSCWHERE Cno IN(SELECT Cno /*首先在Course关系中找出“信息系统”的课程号,结果为3号*/

FROMCourseWHERE Cname=’信息系统’)

);

本查询同样可以用连接查询实现:

SELECTStudent.Sno,SnameFROMStudent,SC,CourseWHERE Student.Sno=SC.Sno ANDSC.Cno=Course.Cno ANDCourse.Cname=’信息系统’;

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

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

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

SELECTSno,CnoFROMSC XWHERE Grade >=(SELECT AVG(Grade)FROMSC yWHERE y.Sno=x.Sno);

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

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

>ANY

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

>ALL

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

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

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

>=ANY

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

>=ALL

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

<=ALL

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

<=ANY

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

=ANY

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

=ALL

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

!=(或<>)ANY

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

!=(或<>)ALL

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

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

SELECTSname,SageFROMStudentWHERE Sage ‘CS’;

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

SELECTSname,SageFROMStudentWHERE Sage ‘CS’;

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

SELECTSname,SageFROMStudentWHERE Sage ‘CS’;

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

sql镶嵌查询_SQL数据查询之——嵌套查询「建议收藏」

五、带有 EXISTS 谓词的子查询

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

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

SELECTSnameFROMStudentWHERE EXISTS(SELECT *

FROMSCWHERE Sno=Student.Sno AND Cno=’1′);

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

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

SELECTSnameFROMStudentWHERE NOT EXISTS(SELECT *

FROMSCWHERE Sno=Student.Sno AND Cno=’1′);

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

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

SELECTSnameFROMStudentWHERE NOT EXISTS(SELECT *

FROMCourseWHERE NOT EXISTS(SELECT *

FROMSCWHERE Sno=Student.SnoAND Cno=Course.Cno));

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

SELECT DISTINCTSnoFROMSC SCXWHERE NOT EXISTS(SELECT *

FROMSC SCYWHERE SCY.Sno=’201215122′ AND

NOT EXISTS(SELECT *

FROMSC SCZWHERE SCZ.Sno=SCX.Sno ANDSCZ.Cno=SCY.Cno));

六、总结

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

带有IN谓词

带有比较运算符

带有ANY或ALL

带有EXISTS谓词

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169413.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月10日 上午10:00
下一篇 2022年8月10日 上午10:16


相关推荐

  • sbc音频编解码是什么_人工智能fpga算法工程师

    sbc音频编解码是什么_人工智能fpga算法工程师转自:https://blog.csdn.net/wzz4420381/article/details/48676921原作者:wzz44203811.SBC算法简介SBC是subbandcode的缩写,也可称为子带编码 在A2DP协议中,SBC算法是默认支持的 蓝牙SBC算法是一种以中等比特率传递高质量音频数据的低计算复杂度的音频编码算法1.1算法基本框图SB…

    2025年10月29日
    3
  • Colorref_单词color的用法

    Colorref_单词color的用法COLORREF是一个32-bit整型数值,它代表了一种颜色。你可以使用RGB函数来初始化COLORREF。例如:  COLORREFcolor=RGB(0,255,0);  RGB函数接收三个0-255数值,一个代表红色,一个代表绿色,一个代表蓝色。在上面的例子中,红色和蓝色值都为0,所以在该颜色中没有红色和蓝色。绿色为最大值255。所以该颜色为绿色。0,0,

    2025年8月6日
    3
  • 自用知识_实用小知识

    自用知识_实用小知识1异步内部类privateHandlerhandler=newHandler(){                  @OverridepublicvoidhandleMessage(Messagemsg){                           if(msg.obj!=null&&listener!=null){

    2025年7月2日
    3
  • CRLF是什么东西?

    CRLF是什么东西?对于 CRLF 这个词来说 相信搞开发的应该都不会陌生 意思是

    2026年3月19日
    3
  • 在线学习Java的几个网站,别再盲目学习java了![通俗易懂]

    在线学习Java的几个网站,别再盲目学习java了![通俗易懂]LearnJava在线这是一个非常不错的学习Java的在线网站,纯免费。这是一个个人项目,旨在通过简单有效的在浏览器中进行练习让你快速掌握Java编程语言。通过直接从网络浏览器运行实际代码,你无需在本地安装和执行代码就可以尝试编码,这无疑提高了编程效率和上手效率。你可以根据目录进行练习,有基础部分和高级部分,首先有例子代码,告诉你需要注意的事项以及详细的讲解,旨在把你教会后再让你进行练习。下面就是练习部分,练习部分没有固定在底部边框,可以自由滑动,能够让你编写代码的同时能够查看示例代码详解

    2022年7月7日
    61
  • saga分布式事务_本地事务和分布式事务

    saga分布式事务_本地事务和分布式事务在分布式系统中一次操作需要由多个服务协同完成,这种由不同的服务之间通过网络协同完成的事务称为分布式事务。本文详解介绍七种常见分布式事务的原理以及优缺点和适用场景(2PC、3PC、TCC、Saga、本地事务表、MQ事务消息、最大努力通知)

    2025年11月12日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号