重庆oracle认证培训机构

新闻分类

产品分类

热门关键词

联系我们

企业名称:重庆科禄德科技有限公司

联系人:冷老师

手机:17754917523

邮箱:93865813@qq.com

网址:www.cqora.com

地址:重庆石桥铺高创锦业

Oracle子查询详解

您的当前位置: 首 页 >> 新闻资讯 >> 行业新闻

Oracle子查询详解

发布日期:2021-09-09 作者: 点击:

Oracle子查询详解

子查询

1

简单子查询

1.先于主查询执行。

2.主查询调用了子查询的结果。

3.注意列的个数和类型要匹配。

4.查询返回多行要用多行关系运算操作。

5.子查询要用括号括起来。

查询工资总和高于10号部门工资总和的部门。

select deptno,sum(sal)

from emp

group by deptno

having sum(sal)>(select sum(sal) from emp where deptno=10);

DEPTNO SUM(SAL)

------ ----------

30 9400

查询每个部门的最大工资是谁。

select deptno,ename,sal

from emp

where (deptno,sal) in (select deptno,max(sal) from emp group by deptno);

DEPTNO ENAME SAL

------ ---------- ----------

30 BLAKE 2850

10 KING 5000

20 FORD 3000

子查询返回多行,用=不可以,得用in。

子查询返回多列,所以对比的列也要匹配。

Any 和all操作

SQL> select ename,sal from emp where sal<any(1000,2000);

ENAME SAL

---------- ----------

SMITH 800

ALLEN 1600

WARD 1250

MARTIN 1250

TURNER 1500

JAMES 950

MILLER 1300

7 rows selected.

小于2000就可以

SQL> select ename,sal from emp where sal<all(1000,2000);

ENAME SAL

---------- ----------

SMITH 800

JAMES 950

必须小于1000

小于all小于最小,大于all大于最大

SQL> select ename,sal,deptno from emp

2 where sal<all(select avg(sal) from emp group by deptno);

ENAME SAL DEPTNO

---------- ---------- ------

SMITH 800 20

WARD 1250 30

MARTIN 1250 30

TURNER 1500 30

JAMES 950 30

MILLER 1300 10

小于any小于最大,大于any大于最小

select ename,sal,deptno from emp

where sal>any(select avg(sal) from emp group by deptno)

ENAME SAL DEPTNO

ALLEN 1600 30

JONES 2975 20

BLAKE 2850 30

CLARK 2450 10

KING 5000 10

FORD 3000 20

2

From子句中的子查询

查询工资大于本部门平均工资的员工。

select ename,e.deptno,sal,asal

from emp e,

(select deptno ,avg(sal) asal from emp group by deptno) a

where e.deptno=a.deptno and sal>asal;

A为视图,为什么要使用别名asal,因为表达式不能当列的名称,别名的本质使用方法是使非法的合法化。

ENAME DEPTNO SAL ASAL

---------- ------ ---------- ----------

BLAKE 30 2850 1566.66667

ALLEN 30 1600 1566.66667

FORD 20 3000 2258.33333

JONES 20 2975 2258.33333

KING 10 5000 2916.66667

3

相互关联的子查询

select ename,sal ,deptno

from emp o

where sal>(select avg(sal) from emp where deptno=o.deptno) ;

ENAME SAL DEPTNO

---------- ---------- ------

ALLEN 1600 30

JONES 2975 20

BLAKE 2850 30

KING 5000 10

FORD 3000 20

先运行主查询,得到第一行,将DEPTNO传入到子查询,由子查询求出AVG(SAL),在判定主查询的行是否符合查询的条件。

执行计划是将子查询看作视图的关联。这叫做SQL的自动改写。

4

Exists操作

select ename,empno,mgr from emp o

where exists(select 3 from emp where mgr=o.empno);

ENAME EMPNO MGR

---------- ---------- ----------

FORD 7902 7566

BLAKE 7698 7839

KING 7839

JONES 7566 7839

CLARK 7782 7839

找领导,其中3是常量,你写什么都可以。

当子查询有行时,Exists返回true

查到行后就不再继续查询

当子查询没有行时为假,Exists返回false

本文网址:http://www.cqora.com/news/816.html

关键词:Oracle认证,Oracle认证培训,Oracle认证培训公司

上一篇:​oracle融合语句
下一篇:Ora工具说明

最近浏览:

报名咨询

点击咨询报名

QQ群

赛烽达技术群

冷老师

17754917523

加微信咨询

张老师微信.jpg

93865813@qq.com