Oracle数据库基础09-子查询

子查询,所谓子查询就是查询中的查询。比如可以在一个SQL语句的where子句中写子查询,以获得所需要且之前未知的条件值。

1.子查询引入

例如:查询工资比编号为7369的员工工资高且编号为30的员工信息;

select * from emp where sal>(select sal from emp where empno=7369) and deptno = 30;

结果:

子查询是一个SQL语句,是嵌在另一个select语句中的子句。使用子查询可以用简单的语句构建功能强大的语句,当需要从表中获取依赖于表本身的数据选择行时,子查询是非常有用的。

子查询可以放在WHERE子句中,同时也可以放在from子句以及之后要介绍的UPDATE语句、INSERT语句、CREATE VIEW语句、CREATE TABLE语句,HAVING 子句、INTO 子句和UPDATE语句的SET子句中。

2.单行子查询

从子查询中返回一行结果的查询,称为单行子查询;对应的,如果返回多行的结果,就是多行子查询。另外还有多列子查询,即从查询语句中返回多列的查询。

单行子查询是从子查询返回一行的查询,对单行子查询的结果可以使用单行比较操作符。

例如:

select * from emp where sal>(select sal from emp where empno=7369);

结果:

例如:

select * from emp where sal>(select sal from emp where empno=7369) and deptno=30;

结果:

3.多行子查询

子查询返回多行被称为多行子查询,对多行子查询要使用多行运算符而不是单行运算符,例如IN、ANY和ALL三个多行运算符。

  • IN运算符

例如:查询编号为20工资与编号为30相同的员工信息

select * from emp where deptno=20 and sal in(select sal from emp where deptno = 30);

结果:

  • ANY运算符(同SOME运算符)和ALL运算符

ANY运算符用于比较一个值和子查询返回的任一个值,而ALL运算符用于比较一个值与子查询返回的每个值。

<ANY子查询:小于子查询的最大值。

>ANY子查询:大于子查询的最小值。

=ANY子查询:等同于IN子查询结果。

<ALL子查询:小于子查询的最小值。

>ALL子查询:大于子查询的最大值。

例如:查询编号为30的小于编号为20的最低工资的员工的员工信息:

select * from emp where deptno =30 and sal < all(select sal from emp where deptno=20);

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值