Oracle OCP(08):使用子查询

一、语法

SELECT SELECT_LIST
  FROM TABLE
WHERE EXPR OPERATOR (SELECT SELECT_LIST FROM TABLE);
  • 子查询(内查询)在主查询(外查询)之前执行。
  • 主查询使用子查询结果。

二、单行子查询

WHERE子句中使用单行子查询时,可以使用单行比较运算符(=,>,>=,<,<=,<>),将子查询的返回结果当做单一数值来使用。
需要小心的是子查询返回的结果的不确定,即返回空值或多值。具体分为三种情况:

  • 返回单行:即为单行子查询。
  • 未返回任何行:如果子查询未返回任何行(相当于返回NULL),则主查询将不再执行,所以主查询也不会返回任何结果。
  • 返回多行:是多行子查询,此时不允许使用单行比较运算符,否则出错。

三、多行子查询

在WHERE子句中使用多行子查询时,可以使用多行比较运算符(IN,ALL,ANY),将子查询的返回结果当做数值集合来使用。其中,ALL和ANY运算符必须与单行比较运算符(=,>,>=,<,<=,<>)结合使用。例如WHERE sal>ALL(子查询)。

  • IN:等于任何一个
  • ALL:和子查询返回的所有值比较。例如:sal>ALL(1,2,3)等价于sal>3,即大于所有。
  • ANY:和子查询返回的任意一个值比较。例如:sal>ANY(1,2,3)等价于sal>1,即大于任意一个就可以。
  • EXISTS:判断子查询是否有返回结果(不关心具体行数和内容),如果返回则为TRUE,否则为FALSE。(常用于相关子查询)

四、例子

--单行子查询
--1.如何查得所有比“CLARK”工资高的员工的信息
--普通查询
SELECT ENAME, SAL FROM EMP WHERE ENAME = 'CLARK';
SELECT * FROM EMP WHERE SAL > 2450;
--子查询
SELECT * FROM EMP WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME = 'CLARK');

--2.查询工资高于平均工资的雇员名字和工资
SELECT ENAME, SAL FROM EMP WHERE SAL > (SELECT AVG(SAL) FROM EMP);


--多行子查询
--any:查询工资低于任何一个“CLERK”的工资的雇员信息。
select *
from emp
where sal < any(
      select sal from emp where job='CLERK'
);

--all:查询工资比所有的“SALESMAN”都高的雇员的编号、名字和工资。
select empno, ename, sal
from emp
where sal>all(
      select sal
      from emp
      where job='SALESMAN'
)


--in:查询部门20中职务同部门10的雇员一样的雇员信息。
select *
from emp
where job in(
      select job
      from emp
      where deptno=10
) and deptno=20;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值