语法:

WITH query_name AS (subquery)

[, query_name AS (subquery) ]...

使用在主select关键字前,oracle将其当做一个内联视图或者临时表使用。

例子:

1.最简单的使用方法:

如查询部门名称包含“A”的所有员工信息

--with clause

with a as

(select deptno from dept where dname like '%A%')

select * from emp where deptno in (select * from a);

with a as

(select deptno from dept where dname like '%A%'),--a结果集

a2 as(select * from a where deptno>20)--a1结果集直接从a中筛选

select * from emp where deptno in (select * from a2);

2.多层同级只能用一个with,并且后面的结果集可以使用前面的结果集:

查询部门名称包含“A”并且部门编号大于20的所有员工信息

with a as

(select deptno from dept where dname like '%A%'),--a结果集

a2 as(select * from a where deptno>20)--a1结果集直接从a中筛选

select * from emp where deptno in (select * from a2);

3.不同级查询可以使用多个with:

查询部门名称包含“A”并且部门编号大于20的所有员工信息的另外一种实现方式如下

with a as

(select deptno from dept where dname like '%A%')--a结果集

select * from emp where deptno in (--括号内层作为子查询,为第二级

with a2 as(select * from a where deptno>20)--a1结果集直接从a中筛选

select * from a2

);

使用场景:

那什么情况下能使用到with子句呢?以下我就举几个简单的例子,简单的说明以下:

1.我想测试一句sql,而我不想专门建立一个测试表:

我想测试成绩大于90的学生,我不想建立学生表,可以用到with子句

with stu as(

select '张娜' sname,99 score from dual union

select '王杰' ,35 from dual union

select '宋丽' ,85 from dual union

select '陈晓' ,73 from dual union

select '李元' ,100 from dual

)--with 组成一个临时的结果集,存放在用户的临时表空间

select * from stu where score>90

2.         当一个sql重复用到某个相同的结果集作为子查询:

--查询销售部工资>1500或者销售部工资小于1000的员工

select * from emp where deptno=(select deptno from dept where dname ='SALES') and sal >1500

union all

select * from emp where deptno=(select deptno from dept where dname ='SALES') and sal <1000

--以上sql select deptno from dept where dname ='SALES'需要执行两次,影响效率

--可以使用with优化一下

with salno as(select deptno from dept where dname ='SALES')

select * from emp where deptno=(select * from salno) and sal >1500

union all

select * from emp where deptno=(select * from salno) and sal <1000

oracle中的with的用法,oracle中with子句的用法(转)相关推荐

  1. oracle with as内存,oracle中with as子句的用法小结(转)

    with as也叫做子查询部分,首先定义一个sql片段,该sql片段会被整个sql语句所用到,为了让sql语句的可读性更高些,作为提供数据的部分,也常常用在union等集合操作中.with as最大的 ...

  2. oracle中rollback用法,Oracle中SAVEPOINT和ROLLBACK用法

    savepoint是事务内部允许部分rollback的标志符.因为事务中对记录做了修改,我们可以在事务中创建savepoint来标识不同的点.如果遇到错误,就可以rollback到不同的点或直接回来事 ...

  3. oracle中call用法,Oracle数据库中 call 和 exec的区别

    Oracle数据库中 call 和 exec的区别 今天发现了一个小东西,觉得很有意思,查找了一些资料,跟大家分享一下: 在sqlplus中: 在第三方提供的工具(如:plsqldev) 总结: ex ...

  4. oracle中minus作的应用,Oracle minus用法详解及应用实例

    Oracle minus用法详解及应用实例 Oracle minus用法 "minus"直接翻译为中文是"减"的意思,在Oracle中也是用来做减法操作的,只不 ...

  5. oracle数据库insert into,oracle中insert into用法 oracle中insert如何带条件添加数据?

    oracle insert into 脚本怎么写 INSE INTO BOOK(bookid,name,price) VALUES('100123','oracle ',54); 或者 INSE IN ...

  6. oracle insert into insert,总结下Oracle 中的Insert用法

    1.标准Insert --单表单行插入 语法: INSERT INTO table [(column1,column2,...)] VALUE (value1,value2,...) 例子: inse ...

  7. Oracle中start with...connect by子句的用法

    connect by 是结构化查询中用到的,其基本语法是: select - from tablename start with 条件1 connect by 条件2 where 条件3; 例: se ...

  8. Oracle中查询树结构start with...connect by prior子句用法

    connect by 是结构化查询中用到的,其基本语法是:  select ... from tablename start with 条件1  connect by 条件2  where 条件3; ...

  9. oracle里有limit怎么用,[ORACLE]ORACLE 实现mysql中的limit 功能

    [ORACLE]ORACLE 实现mysql中的limit 功能 项目从mysql迁移到ORACLE中遇到移植问题,mysql中支持limit 而ORACLE say no . 解决方法 利用ORAC ...

  10. oracle复制数据库文件不动,复制数据库中需要注意的几点事项

    任务简介: 此次复制的生产库数文件为9.18TB,实际分配的数据大小为5.16TB,使用RMAN压缩备份后为1.1TB. 复制端数据库采用单实例ASM存储方式管理,数据库版本为11.2.0.4. 数据 ...

最新文章

  1. 数人云PaaS Innovation 2017,重新定义PaaS进化
  2. linux关闭和开启防火墙(Ubuntu、centos、Redhat)
  3. Disruptor 分析
  4. 为centos5.5添加axel插件
  5. bootstrap-table 树形结构
  6. java ftp 重命名文件_FTP服务器文件重命名
  7. .NET 3.5 Socket APM
  8. python自动化任务_更好用的 Python 任务自动化工具:nox 官方教程
  9. 【转】vue中如何实现数据的双向绑定
  10. 支付宝刷脸支付颠覆传统?网友:我不刷脸
  11. QQ群排名霸屏:快速上排名方法
  12. 高速公路测量计算CASIO程序全套
  13. 不要迷恋哥,哥只是个传说!
  14. 浅谈程序员的数学修养
  15. 单片机位寻址举例_基于80C51单片机位寻址编程
  16. 歌德巴赫猜想。任何一个偶数都可以分解为两个素数之和。(其实这是个C二级考试的模拟试题)...
  17. C++实现暴力筛、朴素素数筛、埃氏素数筛、欧拉素数筛的解法
  18. java输入两个整数_求平均值._用C语言编写:完成从键盘输入两个整数a和b,求平均值ave,并输出平均值...
  19. visio调整形状位置_如何在Visio 中设置形状的属性?
  20. computer_network CPT实验

热门文章

  1. http网站转换成https网站
  2. 【原】相煎何太急——input的blur事件与button的click事件
  3. 两列自适应布局的4种思路
  4. CSS未知宽高元素水平垂直居中
  5. 不到50行代码实现一个能对请求并发数做限制的通用RequestDecorator
  6. 后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值
  7. noip模拟赛 写代码
  8. 浅谈我所见的CSS命名风格
  9. string 大小写转换
  10. Android 网络状态的监控