本文整理自网络,侵删。
目录
- 一、概述
- 1、单行子查询(子查询只返回一行)
- 2、多行单列子查询(子查询返回多行)
- 3、多列子查询
- 二、在DDL语句中使用子查询
- 1、create table
- 2、create View
- 3、create materialized view 建立实体化视图
- 三、在DML语句中使用子查询
- 1.INSERT
- 2.UPDATE
- 3.DELETE
- 四、WITH语句
- 五、相关子查询。
一、概述
在一个SQL语句中嵌套另一个SQL语句成为子查询。包括单行子查询,多行子查询,多列子查询。
注意,当在DDL语句中引用子查询时,可以带有Order By子句;但是当在where子句、Set子句中引用子查询时,不能带有Order by 子句。子查询具有以下一些作用:
- 通过在insert或create table语句中使用子查询,可以将源表数据插入目标表中。
- 通过在create view或create materialieed view中使用子查询,可以定义视图或实体化视图所对应的select语句。
- 通过在update语句中使用子查询可以修改一列或多列数据。
- 通过在where、having、start with子句中使用子查询,可以提供条件值。
非相关(非关联)子查询的使用:
- FROM语句可以包含任意类型的非关联子查询。
- SELECT和ORDER BY可以包含标量子查询。
- GROUP BY语句不能包含子查询。
- SHART WITH和CONNECT BY语句可以包含子查询。
- WITH语句包含一个命名的非关联子查询,它可以被父查询引用多次而只执行一次。
- MERGE的USING语句可以包含非关联子查询。
- UPDATE的SET语句可以包含标量子查询或者单行多列子查询
- INSERT语句可以在VALUES的位置包含标量子查询。
1、单行子查询(子查询只返回一行)
又称为标量子查询,因为它的结果用作父查询的标量。通常与比较运算符比如=
、>
、<
、!=
、<=
、>=
联合使用。
--查询scott用户下的emp表中工资比scott高的员工的信息(此操作中的子查询只返回一行记录) select * from emp where sal>(select sal from emp where ename='SCOTT');
2、多行单列子查询(子查询返回多行)
使用特定的关键字如IN,ANY和ALL来将外层查询的单个值与子查询的多行进行比较运算。
(1)子查询出现在where子句中的子查询语法(内嵌子查询)
--查询scott用户下的emp表中所有的经理的信息(此操作子查询会返回多行记录) select * from emp where empno in ( select mgr from emp);
(2)子查询出现在from子句中(内嵌视图)
--将scott用户下的emp表中查询出的数据作为一个内嵌视图在FROM子句中使用 select * from (select empno,ename,job,sal from emp);
(3)子查询出现在select列表中,此时子查询只能是一个单行子查询。
select (select job from emp where empno=7369) from emp;
(4)子查询也可以出现在having字句中。
select empno,ename, sal,deptno from emp group by deptno,empno,ename,sal having deptno in ( select deptno from emp where deptno=10 or deptno=20) order by deptno,sal;
3、多列子查询
1、where之后
相关阅读 >>
oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)
oracle 11g从 11.2.0.1升级到11.2.0.4 详细实战教程
更多相关阅读请进入《oracle》频道 >>

数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » Oracle在PLSQL中使用子查询
标签:oracle
相关推荐
评论
管理员已关闭评论功能...