Oracle_子查询

Oracle 子查询用于解决无法一步求解的问题,通过嵌套查询语句实现。子查询可以出现在select、from和where等多个位置,需注意子查询必须是单行查询,除非在from后面作为数据集合。执行顺序通常先子查询后主查询,但在相关子查询中,主查询先执行提供参数给子查询。子查询可配合多种操作符使用,如IN、ANY、ALL,理解其行为对于编写复杂的查询语句至关重要。

语法

  • select语句的嵌套调用。
  • 子查询解决的问题:问题本身不能一步求解的情况。
  • 子查询语法格式:
    SELECT select_list
    FROM table
    WHERE expr operator (SELECT select_list FROM table);
//查询emp表中薪水比SCOTT高的员工信息:
select * from emp
where ename = 'SCOTT'; //假设查出的SCOTT的信息中显示薪水为3000
select * from emp 
where sal > 3000;
//将上述两步合为一步:
select * from emp
where sal > (select sal
			 from emp
			 where ename = 'SCOTT');

需注意的问题

  1. 合理的书写风格(换行、缩进、对齐)
  2. 勿忘加小括号()
  3. 主查询和子查询可以是不同表,只要子查询返回的查询结果可以被主查询使用
//查询部门SALES中的员工信息:
//部门名称和对应部门编号在表dept中,员工信息在表emp中(部门信息只有部门编号)
//多表查询法:
select e.*
from emp e, dept d
where e.deptno = d.deptno and dname = 'SALES';
//子查询法:
select *
from emp
where deptno = (select deptno
				from dept
				where dname = 'SALES');
//建议:在Oracle数据库中,多表查询和子查询均可完成查询任务时,优先使用子查询
//尽管一般来讲,每当执行一次from语句时,内存都要从磁盘数据库中取数据,因此应尽可能减少from的调用,由此可知应优先使用多表查询
//但Oracle数据库中,子查询更重要,其查询性能被深入优化过,较多表查询更有优势。
  1. 在主查询的where、select、having、from后均可以放置子查询
    注意:select后的子查询必须是单行子查询(只返回一条记录;2+叫多行子查询)。进一步理解查询语句:实际上是在表或数据集合中通过列名来得到行数据。如果子查询得到多行,select就无法实现查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值