数据库sql嵌套查询题_sql子查询嵌套优化

数据库sql嵌套查询题_sql子查询嵌套优化一、嵌套查询概念在sql语言中,一个select-from-where语句成为一个查询块,将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询成为嵌套查询。外层的查询块称为外层查询或父查询,内层的查询称为内层查询或子查询。注意点:子查询的select语句不能使用orderby子句,orderby只能对最终查询结果排序。嵌套查询分类:1、相关子查询/关联子查询:子查询的查询条件依赖于父查询,比如,如果子查询需要执行多次,即采用循环的方式,先从外部查询开始,每

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

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

一、嵌套查询概念

在sql语言中,一个select-from-where语句成为一个查询块,将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询成为嵌套查询。外层的查询块称为外层查询或父查询,内层的查询称为内层查询或子查询。

注意点:子查询的select语句不能使用order by 子句,order by 只能对最终查询结果排序。

嵌套查询分类:
1、相关子查询/关联子查询:子查询的查询条件依赖于父查询,比如,如果子查询需要执行多次,即采用循环的方式,先从外部查询开始,每次都传入子查询进行查询,然后再将结果反馈给外部,这种嵌套的执行方式就称为关联子查询。
2、不相关子查询/非相关子查询:子查询的查询条件不依赖于父查询,比如:子查询从数据表中查询了数据结果,这个数据结果只执行一次,然后这个数据结果作为主查询的条件进行执行,这样的子查询叫做非关联子查询。

二、嵌套查询方式

2.1 带有比较运算符的子查询

带有比较运算符的子查询是指父查询和子查询之间用比较运算符连接,当用户能确切知道子查询返回的是单个值时,可以用带有比较运算符的子查询;

比较运算符:= , < , > , >= , <= , != , <>

例如:子查询是查询学生表中姓名为张三的学生所在的系,父查询是查询该系所有学生的姓名和学号。张三只能在一个系,所以子查询的结果是单个值,可以使用比较运算符连接。

select Sname,Sno
from Student
where Sdept = (
		select Sdept
		 from Student
		 where Sname="张三")

2.2 带有in谓词的子查询

用在where子句中用来判断查询的属性是否在多个值的列表中。返回满足in列表中的满足条件的记录。

2.3 带有any(some)或all谓词的子查询

有的系统用any,有的用some;

子查询返回单值时可以用比较运算符,但返回多值时使用any/some谓词修饰符。而使用any(some)或all谓词时则必须同时使用比较运算符,或者说any或all是为了配合比较运算符而产生的。
在这里插入图片描述

2.4 带有exists谓词的子查询

exists直译就是存在,代表存在量词。带有exists谓词的子查询不返回任何数据,只产生逻辑真值”true“或逻辑假值”false“。它只查找满足条件的那些记录。一旦找到第一个匹配的记录后,就马上停止查找。

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

使用存在量词exists后,若子查询结果为空,则外层的where子句返回真值,否则返回假值。
由exists引出的子查询,其目标列表达式通常都是用 * ,因为带exists的子查询只返回真值或假值,给出列名没有实际意义。

与exists相反的是not exists谓词,作用与exists相反

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于sources.list和apt-get [转载]

    关于sources.list和apt-get [转载]

    2021年11月16日
    47
  • Excel VBA 编程练习

    Excel VBA 编程练习根据表单名称从work查找

    2022年6月5日
    29
  • 浅析Java多态_JAVA多态

    浅析Java多态_JAVA多态Java多态今天来谈谈Java中的多态,作为面向对象的一大特性,它的重要性不必多说,相比其他两特性(继承、封装)从字面上看就有点不易读懂,多种态度还是有多变态?官解官方解释:多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。简单理解就是同一方法在不同类中有不同实现(继承关系上),在或者就是父类的引用指向子类对象;在这里我附上官方的图解:如图所示:一台打印机,都有着打印的功能,但是不同的打印机在不同的场景或者不同的需求上,可以打印出不同的

    2022年10月28日
    0
  • 一步步学习SPD2010–第二章节–处理SP网站(7)—- 导航网站的内容

    一步步学习SPD2010–第二章节–处理SP网站(7)—- 导航网站的内容在之前版本的SPD中,你能自定义和管理的主要是文件。在SPD2010中,你还可以管理其他SP对象,如网站列、内容类型,外部内容类型和工作流。内容类型和网站列是建造默认列表和库的块儿。网站列引入了全局栏目定义概念。SPFoundation和SPServer,在你创建网站集的时候,伴随着SP安装带来一系列默认网站列。这些网站列被分组到内容类型,它们有…

    2022年6月16日
    37
  • C语言爱心代码_c语言代码

    C语言爱心代码_c语言代码c语言-爱心代码的实现#include#include#includeintmain(){floaty,x,z,f;for(y=1.5f;y>-1.5f;y-=0.1f){for(x=-1.5f;x<1.5f;x+=0.05f){

    2022年10月13日
    0
  • varchar2和varchar的区别[通俗易懂]

    varchar2和varchar的区别[通俗易懂]1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;3.VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,大部分情况下建议使用varchar2类型,可以保证更好的兼容性…

    2022年6月15日
    33

发表回复

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

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