您的位置:首页 > 数据库 > Oracle

Oracle-子查询

2015-10-10 15:42 417 查看

Oracle-子查询

子查询就是位于SELECT、UPDATE、或DELETE语句中内部的查询

本文中涉及到的表:



概述

在MySQL文档中给出的子查询的优势:

1)子查询允许结构化的查询,这样就可以把一个语句的每个部分隔离开。

2)有些操作需要复杂的联合和关联。子查询提供了其它的方法来执行这些操作。

3)在许多人看来,子查询是可读的。实际上,子查询给予人们调用早期SQL“结构化查询语言”的原本的想法,这是子查询的创新。

其实使用子查询可以将一些未知事物查出来, 其实就是帮助我们把未知的分解成已知的,就像问题分步走一样。

例如这个问题: 查询工资比SMITH高的员工信息 —> 要想的到我们想要查询的员工信息,我想我们应该先查询出来SMITH的工资。

我们对这个问题进行分解:

第一:查询SMITH的工资?

select sal from emp where ename = ‘SMITH’; //我们得到SMITH的工资为1250, 然后问题就变为了下一步!

第二:查询工资比1250高的员工信息?

select * from emp where sal > 1250;

然后我们利用子查询将这两步查询合成一个SQL语句。

select *

from emp

where sal > (

select sal

from emp

where ename = ‘WARD’

);

NT:子查询即可与父查询针对同一张表,也可以不针对同一张表

并且子查询与父查询在传统参数时,数量、类型、含义要相同

子查询的规则

1)将子查询括在括号中

2)将子查询放置在比较条件的右侧

3)只有在执行排序Top-N分析时,子查询中才需要使用ORDER BY 子句

4)单行运算符用于单行子查询,多行运算符用于多行子查询

单行子查询

就是子查询只会返回一个结果, 例如一个子查询返回数值800. 我们的父查询可以使用这些符号来进行比较 =、<>、>=、<=

例如: 查询工资最低的员工信息

第一:查询出工资最低是多少?

select min(sal) from emp; //结果为800

第二:查询工资为800的员工信息?

select * from emp where sal = 800;

子查询:

select *

from emp

where sal = (

select min(sal)

from emp

);

多行子查询

子查询会返回多于一个结果,例如一个子查询返回:30,20。父查询用in/any/all这些符号来比较

->in接收子查询结果

例如:查询部门名为’ACCOUNTING’或’SALES’的员工信息

select *

from emp

where deptno in (

select deptno

from dept

where dname in (‘ACCOUNTING’,’SALES’)

);

->any接收子查询结果

在oracle看来小于any即小于any集合中的最大值。

例如:查询工资比20号部门【任意any】一个员工工资【低<】的员工信息

select *

from emp

where sal

子查询与多表查询

在有些情况下,子查询可以解决的问题,多表查询也是可以解决的,那么他们之间如何选择呢?

看下图:



即在Oracle下,我们应优先考虑多表查询。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 子查询