拓扑园

  • Oracle性能优化
  • Oracle项目案例
    • Oracle近期项目案例(目录)
    • Oracle实战问题解析(目录)
    • Oracle数据库名变更流程(2种方式)
    • Oracle数据库目录更换流程(使用Oracle的clone工具)
    • Oracle数据库迁移方案(目录)
    • 标准化文档系列
  • 技术研究-密保
    • FG-MySQL
    • FG-Docker/K8S
    • FG-PostgreSQL
    • FG-ORACLE_BBED
    • FG-ORACLE
    • FG-Elasticsearch(ES)+ELK
    • Oracle-19C-OCP
    • WERN_ORACLE培训
    • redis数据库
    • Nginx培训学习系列
  • 图灵小队
    • MySQL8.0/Oracle/Memcached/Redis等安装配置于RHEL/OL6/7/8.X系列-运行环境最优配置
    • PG安装配置于RHEL/9X系列-运行环境最优配置
    • 自动维护任务详解-开启、关闭信息统计收集(统计信息)
    • 图灵小队-Oracle存储过程导出表的明细_UTL_FILE(文章)
    • 图灵小队-Oracle数据库删除/卸载操作指南(文章)
    • 图灵小队-Oracle常用性能查询SQL语句(文章)
    • 图灵小队-Oracle数据库上线前检查(文章)
    • 图灵小队-Oracle常用SQL语句(文章)
    • 图灵小队-Oracle脚本合集(文章)
    • 图灵小队-Oracle技巧记录(文章)
    • LLL的Oracle培训(目录)
    • LLL的docker培训(目录)
    • 标准化文档系列(目录)
    • Oracle/MySQl等面试题
    • 图灵小队
  • Oracle
    • Oracle
    • ADG
    • RAC
    • ASM
    • EXPDP/IMPDP
    • 工厂数据导入导出系列
    • OGG
    • RMAN
  • 云计算
    • 云计算
    • docker
    • kubernetes
  • Linux
    • Linux
    • PHP
    • Nginx
    • haproxy
    • mail
    • 网站
    • 域名
    • 网址收藏
  • 数据中心
    • 数据中心
    • EBS数据文件库容
    • VMware虚拟化
    • mysql
    • EBS系列
    • 大数据
    • SVN
    • zabbix
    • SAP
    • 备份相关
    • FC交换机
    • SVN
  • 其他
    • 外研英语4年级下册-听力
    • 影视系列
    • 如何使用iTunes软件通过抓包下载旧版本的ios的app
Oracle数据库恢复专家团队:TEL:18562510581(微信同号);QQ:284833194;QQ群:496333360
天高任鸟飞
  1. 首页
  2. 图灵小队
  3. 正文

oracle with as语法与用法(转)

2023年7月19日 86点热度 0人点赞 0条评论

目录

  • 一、简介
    • 1、with as 是做什么的?
    • 2、wtih功能
    • 3、with优点
  • 二、使用方法
    • 1、多次使用抽取出来
    • 2、在union 语句中使用
    • 3、注意点:
    • (2) 前面定义的with..as语句可以在后面定义的with..as语句中使用
  • 二、总结

一、简介

1、with as 是做什么的?

Oracle查询中的with as子句相当于创建一个临时表,将一个语句中的某些中间结果放在临时表空间。将查询中的子查询命名,放到SELECT语句的最前面。语法如下:

with temptablename([字 段列表]) as 
(select ...)select ...

2、wtih功能

with..as关键字,是以‘with’关键字开头的sql语句,在实际工作中,我们经常会遇到同一个查询sql会同时查询多个相同的结果集,即sql一模一样,这时候我们可以将这些相同的sql抽取出来,使用with..as定义。

with..as时一张临时表,可以简单理解为sql片段(类似java复用代码)。

3、with优点

增加了SQL的易读性,如果构造了多个子查询,结构会更清晰;更重要的是:“一次分析,多次使用”,这也是为什么会提供性能的地方,达到了“少读”的目标。

第一种使用子查询的方法表被扫描了两次,而使用WITH Clause方法,表仅被扫描一次。这样可以大大的提高数据分析和查询的效率。

另外,观察WITH Clause方法执行计划,其中“SYS_TEMP_XXXX”便是在运行过程中构造的中间统计结果临时表。

二、使用方法

1、多次使用抽取出来

--with as 可以理解为一张临时表或者理解成sql片段,在多次查询语句相同的时候可以抽取出来,达到'一次解析,多次使用'
--如果每个部分都去执行一遍的话,则成本比较高,可以使用with as短语,则只要执行一遍即可

with temp as
(select '10001' as province_code from dual)
select case
         when (select * from temp) = '10001' then
          'equals'
         when (select * from temp) = '10002' then
          'not equals'
         else
          'unknown'
       end is_equals
  from dual;

2、在union 语句中使用

--with as 非常适合在union 语句中
--注意:with as 语句最后面不能加分号,否则报缺失select关键字错误。
with temp1 as
 (select 'female' sex, 'zhangsan' stu_name from dual),
temp2 as
 (select 'male' sex, 'lisi' stu_name from dual),
temp3 as
 (select 'female' sex, 'wangwu' stu_name from dual)
select *  from temp1
union all 
select *    from temp2
union all select * from temp3

 

注意点:with..as后面不能加分号,否则报错。

3、注意点:

(1)不能只定义with..as语句,定义了要使用它,否则会报错

--只定义with..as会报错

with temp1 as

(select 'female' sex, 'zhangsan' stu_name from dual),

temp2 as
(select 'male' sex, 'lisi' stu_name from dual)

(2) 前面定义的with..as语句可以在后面定义的with..as语句中使用

--前面定义的with..as语句可以在后面定义的with..as语句使用

with temp1 as
 (select 'female' sex, 'zhangsan' stu_name from dual),
temp2 as  (select 'male' sex, 'lisi' stu_name from dual),
temp3 as  (select * from temp2)
select *   from temp1
union all
select *   from temp2
union all 
select * from temp3


二、总结

with..as其实就是将经常需要查询的语句抽取出来,形成一个虚拟表,我们后面可以多次使用,达到‘一次解析,多次使用’的效果,大大提高执行的效率。

转:https://blog.csdn.net/qq_18975791/article/details/102882141

 

标签: 暂无
最后更新:2023年7月19日

admin

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2022 拓扑园. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021020523号

鲁ICP备2021020523号