with as语法

  • 针对一个别名
    with tmp as (select * from tb_name)

  • 针对多个别名
    with
    tmp as (select * from tb_name),
    tmp2 as (select * from tb_name2),
    tmp3 as (select * from tb_name3),

--相当于建了个e临时表
with e as (select * from scott.emp e where e.empno=7499)
select * from e;--相当于建了e、d临时表
withe as (select * from scott.emp),d as (select * from scott.dept)
select * from e, d where e.deptno = d.deptno;其实就是把一大堆重复用到的sql语句放在with as里面,取一个别名,后面的查询就可以用它,这样对于大批量的sql语句起到一个优化的作用,而且清楚明了。

向一张表插入数据的with as用法

insert into table2
withs1 as (select rownum c1 from dual connect by rownum <= 10),s2 as (select rownum c2 from dual connect by rownum <= 10)
select a.c1, b.c2 from s1 a, s2 b where...;

select s1.sid, s2.sid from s1 ,s2需要有关联条件,不然结果会是笛卡尔积。
with as 相当于虚拟视图。

with as短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个sql片断,该sql片断会被整个sql语句所用到。有的时候,是为了让sql语句的可读性更高些,也有可能是在union all的不同部分,作为提供数据的部分。
  
特别对于union all比较有用。因为union all的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用with as短语,则只要执行一遍即可。如果with as短语所定义的表名被调用两次以上,则优化器会自动将with as短语所获取的数据放入一个temp表里,如果只是被调用一次,则不会。而提示materialize则是强制将with as短语里的数据放入一个全局临时表里。很多查询通过这种方法都可以提高速度。

withsql1 as (select to_char(a) s_name from test_tempa),sql2 as (select to_char(b) s_name from test_tempb where not exists (select s_name from sql1 where rownum=1))
select * from sql1
union all
select * from sql2
union all
select 'no records' from dualwhere not exists (select s_name from sql1 where rownum=1)and not exists (select s_name from sql2 where rownum=1);

WITH语句的优点:

(1). SQL可读性增强。比如对于特定with子查询取个有意义的名字等。

(2)、with子查询只执行一次,将结果存储在用户临时表空间中,可以引用多次,增强性能。

举例:在进行导入EXCEL的过程中,有时候,需要将数据存储在临时表中,当下一次在进行导入的时候,进行清除临时表的数据,但是这时候,有时候发生并发问题的话,两个用户可能会分别操作对方的数据,所以,可能造成混乱,但是可以使用WITH函数和UNION语句拼接一个SQL语句,存储在SESSION中,当需要导出错误信息的时候,可以使用该语句构造数据。

转发自:
https://blog.csdn.net/u013412535/article/details/43502501#

Sql的with as 的使用相关推荐

  1. java 必备面试必备

    1.JDK 和 JRE 有什么区别? JDK(Java Development Kit),Java开发工具包 JRE(Java Runtime Environment),Java运行环境 JDK中包含 ...

  2. sql特殊字符转义,oracle中将字符 ‘ 转义

    oracle中使用sql语句或多或少地会遇到使用特殊字符,比如" ' ",这时,这个单引号就会与前面的单引号匹配,将文本从中间断开,引发问题和错误.这就需要我们进行转义. 而ora ...

  3. weblogic项目java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配 at oracle.jdbc.....错误解决

    原因:数据源配置时间格式问题 解决方案: 1.进入weblogic控制台 2.左侧菜单栏选择Service- JDBC- Data Source 3.选择你的数据源,然后进入Configuration ...

  4. 如何定位并优化慢查询Sql

    根据慢日志定位慢查询SQL. 查询慢日志相关变量,并进行设置: 主要关注下述三个变量: long_query_time.show_query_log_file.show_query_log 慢查询sq ...

  5. Go 学习笔记(55)— Go 标准库 sql (初始化数据库、插入、更新、删除数据库表、单行查询、多行查询、事务处理)

    1. 标准库说明 Go 的标准库中是没有数据库驱动,只提供了驱动接口,有很多第三方实现了驱动,我们这里选择 go-sql-driver 这个实现是目前使用最多的.github 地址是:https:// ...

  6. SQL与NoSQL的区别 以MySQL与MongoDB为例

    异同对比 1.语言和结构层面 SQL数据库,是基于表的,并且用结构化语言也就是SQL来定义和操纵数据.一方面,这是非常强大的:SQL是最通用和最广泛使用的选项之一,使其成为一个安全的选择,尤其适用于复 ...

  7. 【Sql Server】数据库的3大服务

    在数据库SQL SERVER中,处理常用的sql server数据库引擎,还有其他3大服务,分别是集成服务,报表服务,分析服务. 集成服务商可以配置包,这里的包可以理解是数据库引擎里的用户数据库.可以 ...

  8. 【Sql Server】DateBase-自动化

    强大的SQL Server有着神奇的自动化功能,来处理一些人为处理不了的事情! 自动化功能:T-sql语言,系统命令.脚本语言.复制命令.创建角色.索引重建.报表 管理元素:作业.警报.操作员.计划 ...

  9. 【Sql Server】DateBase-触发器

    触发器是数据库中一种特殊的对象,当使用触发器时,一旦执行某个操作,就会触发执行的一段代码! 语法: Create trigger 名 On[table|view] { For after instea ...

  10. 【Sql Server】Database-存储过程

    存储过程是实现编写好的一组特定语言,用来实现的特定功能! 创建 Create procedure存储过程名[参数,参数类型] Default output With Recompile|encrypt ...

最新文章

  1. 10万奖金:天池OCR大赛来了!
  2. 影响计算机算法世界的十位大师(上)
  3. 医疗信息化、医学相关资料下载
  4. TS中补充的六个类型
  5. 【必看】CCNA初学者必看的一篇文章
  6. linux系统基本操作命令
  7. php怎么给接口里的方法传参,PHP接口中方法的参数和实现类方法中的参数可以不一致的问题...
  8. 【Flink】Flink 周期性 watermark 的 传播 AssignerWithPeriodicWatermarks
  9. WebService - RoadMap
  10. 一级域名是什么?和二级域名有什么区别?
  11. 创维电视显示无服务器,常见创维电视机故障及维修方法【详解】
  12. 关于Java单例模式的思考
  13. 伯克利摘得最佳论文,陈丹琦、杨笛一等华人团队获杰出论文,ACL2022奖项公布...
  14. 表格维护生成器-部分字段不能修改或不能看见
  15. hive3.x异常- return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask
  16. 原来RA是Router Advertisement的意思
  17. 关于BUUCTF yxx和异性相吸
  18. 华为荣耀magic是鸿蒙系统,荣耀Magic3是什么系统-采用什么系统
  19. 电销团队外呼管理难,外呼系统录音功能解决无监管现状
  20. 简述计算机监督分类的基本原理,(揽宇方圆)遥感图像的计算机分类方法包括监督分类和非监督分类...

热门文章

  1. python builtwith识别网站所用技术
  2. Spring Cloud+Vue、Element-Ui、日常ip-config 君子:洪君
  3. 【场景图生成】Graphical Contrastive Losses for Scene Graph Parsing
  4. 腾讯云账号怎么看服务器密码是什么格式,腾讯云服务器怎么查看FTP账号密码?...
  5. Ubuntu安装mysql并连接(使用vscode插件)
  6. mldonkey配置小结
  7. 记录:指针仪表盘视觉读取项目的学习过程
  8. cpp map 获取所有 key_久一英语,6-8月雅思口语题库-Part 1-Map
  9. 民盟中央蒋树声:高等教育质量观一定要变
  10. 无人驾驶用到哪些具体技术