oracle with 语句用法
来源:互联网 发布:贪心算法经典例题 编辑:程序博客网 时间:2024/06/09 05:53
2014/01/10
使用WITH AS 语句可以为一个子查询语句块定义一个名称,使用这个子查询名称可以 在查询语句的很多地方引用这个子查询。
Oracle 数据库像对待内联视图或临时表一样对待 被引用的子查询名称,从而起到一定的优化作用。with子句是9i新增语法。
你可以在任何一个顶层的SELECT 语句以及几乎所有类型的子查询语句前,使用子查询定义子句。被定义的子查询名称可以在主查询语句以及所有的子查询语句中引用,但未定义前不能引用。
with子句中不能嵌套定义<也就是with子句中不能有with子句>,但子查询中出现的“子查询定义”语句可以引用已定义的子查询名称。<可以引用前面已经定义的with子句>
1、在同级select前有多个查询定义的时候,第1个用with,后面的不用with,并且用逗号隔开。
2、最后一个with 子句与下面的查询之间不能有逗号,只通过右括号分割,with 子句的查询必须用括号括起来
3、如果定义了with子句,而在查询中不使用,那么会报ora-32035 错误:未引用在with子句中定义的查询名。(至少一个with查询的name未被引用,解决方法是移除未被引用的with查询),注意:只要后面有引用的就可以,不一定非要在主查询中引用,比如后面的with查询也引用了,也是可以的。
4、前面的with子句定义的查询在后面的with子句中可以使用。但是一个with子句内部不能嵌套with子句。
5、with查询的结果列有别名,引用的时候必须使用别名或*。
WITH语句的优点:
(1). SQL可读性增强。比如对于特定with子查询取个有意义的名字等。
(2)、with子查询只执行一次,将结果存储在用户临时表空间中,可以引用多次,增强性能。 举例:在进行导入EXCEL的过程中,有时候,需要将数据存储在临时表中,当下一次在进行导入的时候,进行清除临时表的数据,但是这时候,有时候发生并发问题的话,两个用户可能会分别操作对方的数据,所以,可能造成混乱,但是可以使用WITH函数和UNION语句拼接一个SQL语句,存储在SESSION中,当需要导出错误信息的时候,可以使用该语句构造数据。
例子:
1、查询出部门的总薪水大于所有部门平均总薪水的部门。部门表s_dept,员工表s_emp。分析:做这个查询,首先必须计算出所有部门的总薪水,然后计算出总薪水的平均薪水,再筛选出部门的总薪水大于所有部门总薪水平均薪水的部门。那么第1 步with 查询查出所有部门的总薪水,第2 步用with 从第1 步获得的结果表中查询出平均薪水,最后利用这两次 的with 查询比较总薪水大于平均薪水的结果,如下:
WITH DEPT_COSTS AS --查询出部门的总工资
(SELECT D.DNAME, SUM(E.SAL) DEPT_TOTAL
FROM DEPT D, EMP E
WHERE E.DEPTNO = D.DEPTNO
GROUP BY D.DNAME),
AVE_COST AS --查询出部门的平均工资,在后一个WITH语句中可以引用前一个定义的WITH语句
(SELECT SUM(DEPT_TOTAL) / COUNT(*) AVG_SUM FROM DEPT_COSTS)
SELECT *
FROM DEPT_COSTS DC
WHERE DC.DEPT_TOTAL > (SELECT AC.AVG_SUM FROM AVE_COST AC)--进行比较
- oracle with 语句用法
- Oracle with语句的用法
- Oracle with语句的用法
- Oracle with语句的用法
- Oracle with语句的用法
- Oracle with语句的用法
- ORACLE WITH语句的用法示例
- oracle中 sql语句:start with .. connect by prior.. 用法
- oracle中 sql语句:start with .. connect by prior.. 用法
- with语句的用法
- with语句的用法
- Python with语句用法
- Oracle with语句示例
- ORACLE WITH语句实例
- oracle with语句
- oracle with语句详解
- Oracle with语句示例
- Oracle with 语句详解
- 当while里有ssh,注意点
- JAVA文件的中文注释变成乱码,解决办法(亲测第二种)
- 简单入门
- Hadoop 安全机制认证---Kerberos
- Linux内核映像中的内核配置信息生成与获取详解
- oracle with 语句用法
- C# Excel 行高,列宽,合并单元格,单元格边框线,冻结(转载) - 关于C#操作EXCLE常见操作比较全的 (防找不到)
- matlab编程入门学习(7)--Matlab编程(第二版)--菜鸟入门教材(课后题)(第二章)
- Blackberry 10 js+html5 AES 128加密
- 看nginx内存管理的一些感想
- SP13使用JS读取social feed 时的报错 SCRIPT438: Object doesn't support property or method 'get_context
- 探讨PHP页面跳转几种实现技巧
- How to modify virtual address space in Windows
- 选取图片