数据库sql嵌套查询

一、嵌套查询概念

在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相反

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值