SQL中子查询的介绍

子查询

用一条语句的查询结果作为另一个循环的条件,即嵌套在主查询中的查询,可以嵌套在主查询中所有位置,包括SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。

select *from emp where sal>=(select max(sal) from emp);//条件为≥最大工资
select *from emp where sal>=(select avg(sal) from emp);//条件为≥平均工资
select *from emp where sal>=(select min(sal) from emp);//条件为≥最小工资

子查询谓词运算符

ALL/ANY/SOME

  • 返回单值可单独使用比较运算符
    例如查询Tom的同班同学中年龄比Tom大的:
select *from student WHERE age>(select age from student WHERE name='Tom')
  • 但返回多值时要用ANY(有的系统用SOME)或ALL谓词修饰符。而使用ANY或ALL谓词的时候必须同时使用比较运算符。例如>ALL,<=ANY
    例如查询Tom的同班同学中年龄最大的人:
select *from student 
WHERE age>ALL(select age from student //嵌套最外层,找到满足age>all的同学,即为年龄最大的同学
WHERE class_id=(select class_id from student //嵌套第二层,找到所有同班同学的年龄大小
WHERE name='Tom'))//嵌套最内层,找到Tom的同班同学

IN/NOT IN

在嵌套查询中,子查询的结构往往是一个集合,所以谓词IN是嵌套查询中最经常使用的谓词。
NOT IN是<> ALL(或!=ALL)的别名,表意相同。
例如,查询Tom的同班同学可用以下方式:

select *from student WHERE class_id IN(select class_id from student WHERE name='Tom')

而查询Tom以外班级的同学可以用NOT IN实现:

select *from student WHERE class_id  NOT IN(select class_id from student WHERE name='Tom')

EXISTS/NOT EXISTS

可以理解为“∃”,不返回任何数据,只产生逻辑真值“true”或逻辑假值"false"。判断是否满足跨表的某个条件,格式为WHERE EXISTS(条件)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值