Oracle高级SQL培训与讲解.doc

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Oracle高级SQL培训与讲解

Oracle高级SQL培训与讲解 李康康 liakngkang@126.com QQ:353730289 With子句 学习目标 掌握with子句用法,并且了解with子句能够提高查询效率的原因。 With子句要点 with子句的返回结果存到用户的临时表空间中,只做一次查询,反复使用,提高效率。 如果定义了with子句,而在查询中不使用,那么会报ora-32035 错误:未引用在with子句中定义的查询名。 前面的with子句定义的查询在后面的with子句中可以使用。但是一个with子句内部不能 嵌套with子句。 当一个查询块名字和一个表名或其他的对象相同时,解析器从内向外搜索,优先使用子查询块名字。 with查询的结果列有别名,引用的时候必须使用别名或*。 with有可能影响执行计划。 with子句语法 With alias_name as (select1), --as和select中的括号都不能省略 alias_name2 as (select2),--后面的没有with,逗号分割,同一个主查询同级别地方,with子 查询只能定义一次 … alias_namen as (select n) –与下面的实际查询之间没有逗号 Select …. with使用例子: 最简单的使用方法: 如查询部门名称包含“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); 多层同级只能用一个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); 不同级查询可以使用多个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子句呢?以下我就举几个简单的例子,简单的说明以下: 我想测试一句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 当一个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 de

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档