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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用vmware vconverter从物理机迁移系统到虚拟机P2V(多图)

    使用vmware vconverter从物理机迁移系统到虚拟机P2V(多图)zhuan:https://segmentfault.com/a/1190000002697929本文完整记录了如何从物理服务器,保持所有环境配置信息,纹丝不动的迁移到虚拟机上,俗称P2V。采用

    2022年7月1日
    27
  • 浅谈 AnalyticDB SQL 优化「建议收藏」

    浅谈 AnalyticDB SQL 优化「建议收藏」数据库性能优化需要从多个方面进行综合考虑。例如系统资源是否充足、资源模型的设计(高性能vs大存储)、表的设计以及规划、SQL改写和优化等等,本文只要介绍ADBsql的优化。

    2022年9月16日
    3
  • 感知机(Perceptron)为什么不能表示异或(XOR)

    感知机(Perceptron)为什么不能表示异或(XOR)1.感知机不能表示异或在很早之前学PatternRecognition相关课程的时候,老师在课堂上就说过感知机遇到的一个大问题就是无法表示异或问题(XOR)。后来接触深度学习相关的内容,开头部分肯定会提到感知机,提到感知机也必会提到不能表示异或的问题。正好抽出点时间,稍微搞明白一下为什么感知机不能表示异或。2.感知机的数学定义感知机到底是什么呢?首先来看一下他的数学定义:假设输入空间(即样本的

    2022年7月16日
    16
  • php runtimeexception,Laravel框架运行出错提示RuntimeException No application encryption…「建议收藏」

    php runtimeexception,Laravel框架运行出错提示RuntimeException No application encryption…「建议收藏」关于Laravel,出错提示,RuntimeException,No,application,encryption,key,has,been,specified.,解决方法,Laravel框架运行出错提示RuntimeExceptionNoapplicationencryptionkeyhasbeenspecified解本文实例讲述了Laravel框架运行出错提示RuntimeExc…

    2022年7月18日
    10
  • 顺丰科技QT面试题「建议收藏」

    顺丰科技QT面试题「建议收藏」自定义控件:应该做过吧?能举几个例子吗?还有其他的吗?你觉得自定义控件的方法主要是哪些?答:从外观设计上:QSS、继承绘制函数重绘、继承QStyle相关类重绘、组合拼装等等从功能行为上:重写事件函数、添加或者修改信号和槽等等QSS:QSS平时使用的多吗?能举几个例子吗?都是如何使用,能说说吗?答:1.将QSS统一写在一个文件中,通过程序给主窗口加载;2.写成一个字符串中,通过程序给主窗口加载;3.需要使用的地方,写一个字符串,加载给对象;4.QTDesigner中填写;事件机制:

    2022年6月25日
    33
  • vue filters过滤器的统一封装「建议收藏」

    vue filters过滤器的统一封装「建议收藏」目录统一封装规则统一封装规则1、src文件夹下创建filters文件夹,然后再filters文件夹下创建index.js即:src/filters/index.js2、在main.js中引入src/filters/index.js文件,并在下方遍历调用filters中的方法,使用VUE.filters切记:将遍历代码写在newVUE()上方3、在src/utils文件夹下的文件中创建各种工具类方法4、在src/filters/index.js中引入utils中的方法进行调用src

    2022年5月22日
    37

发表回复

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

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