oracle with as用法
2016-07-21 17:27
465 查看
用于一个语句中某些中间结果放在临时表空间的SQL语句
如
WITH channel_summary AS (
SELECT channels.channel_desc, SUM(amount_sold) AS channel_total
FROM sales, channels
WHERE sales.channel_id = channels.channel_id
GROUP BY channels.channel_desc
)
SELECT channel_desc, channel_total
FROM channel_summary
WHERE channel_total > (
SELECT SUM(channel_total) * 1/3
FROM channel_summary);
CHANNEL_DESC CHANNEL_TOTAL
-------------------- -------------
Direct Sales 312829530
channel_summary表就是WITH生成的中间表
1: 这个临时表空间channel_summary 什么时候清除呢?是一个会话结束自动消失嘛?
临时表在会话结束就自动被PGA清除
2:就这一功能来说,子查询就可以达到啊,为什么要用with呢? 用with有什么好处,不会仅仅是 ...
都能写,但执行计划不同的。当有多个相似子查询的时候,用with写公共部分,因为子查询结果在内存临时表中,执行效率当然就高啦。
如果你后面需要不止一次地引用这个结果,那么WITH就会大大提高效率。
代码的可读性好
如
WITH channel_summary AS (
SELECT channels.channel_desc, SUM(amount_sold) AS channel_total
FROM sales, channels
WHERE sales.channel_id = channels.channel_id
GROUP BY channels.channel_desc
)
SELECT channel_desc, channel_total
FROM channel_summary
WHERE channel_total > (
SELECT SUM(channel_total) * 1/3
FROM channel_summary);
CHANNEL_DESC CHANNEL_TOTAL
-------------------- -------------
Direct Sales 312829530
channel_summary表就是WITH生成的中间表
1: 这个临时表空间channel_summary 什么时候清除呢?是一个会话结束自动消失嘛?
临时表在会话结束就自动被PGA清除
2:就这一功能来说,子查询就可以达到啊,为什么要用with呢? 用with有什么好处,不会仅仅是 ...
都能写,但执行计划不同的。当有多个相似子查询的时候,用with写公共部分,因为子查询结果在内存临时表中,执行效率当然就高啦。
如果你后面需要不止一次地引用这个结果,那么WITH就会大大提高效率。
代码的可读性好
相关文章推荐
- sql-1-oracle
- oracle undo 解析
- Oracle SOA Suit Medicator and OSB
- Oracle SOA Suit Adapter
- Oracle学习记录整理笔记3-默认的管理表
- Oracle SOA Suite OverView
- oracle12c cdb和pdb参数修改
- oracle创建job权限
- 解决 oracle IO占用率很高的问题
- 解决 oracle IO占用率很高的问题
- Oracle sql 去除重复 和 字段去除空格
- 【转】oracle SCHAME的含义
- Excel导入Oracle数据库C#winform完整代码
- Linux下Oracle配置开机自启动
- 甲骨文中间件与主数据管理平台
- Oracle Fusion Middleware产品系简介
- oracle 事务简介,锁的概念,java访问数据库注意事项
- oracle数据库sql语句优化
- Oracle同义词学习
- Oracle全文检索配置方法