Oracle中的外连接(三)

本文探讨了SQL中WITH AS语句的应用技巧,通过创建临时表简化复杂查询,提高可读性和执行效率。尤其在多表连接场景下,利用视图结合外连接能更清晰地展示数据关系。

3、更好的解决办法

在我写sql语句越来越多的时候,我发现在文章(二)中介绍的外连接确是那么的不好用。第二天一个学弟跟我说了另外一种语句,让我顿时豁然开朗起来。这种解法比外连接要好用很多。

with 别名 as (select * from *)

select * from 别名;

其实就相当于建个临时表,语法就是:with tempname as(select ......)select ......

3.1例子

还是我在文章(二)中提到的获取一个系的毕业设计指导教师的答辩安排

WITH A AS
 (SELECT *
    FROM SJ_GD_REPLY B
   WHERE B.ZT = 1
     AND B.FOPENGRAGE = SJ_GD_GENERALMETHOD.GETCURRENTGRADUATIONYEAR)
SELECT *
  FROM SJ_GD_TEACHERS C, A
 WHERE A.FTEACHERID(+) = C.FTEACHERID AND C.FOPENGRADE = SJ_GD_GENERALMETHOD.GETCURRENTGRADUATIONYEAR AND C.ZT = 1;
临时表 A 中存放的是对月本毕业年届已经安排的有效的毕设指导教师答辩信息(有限制条件),接着就是将这个表和SJ_GD_TEACHERS表做了右连接。得到的结果是正确的。


1)这种做法,其实就是把一大堆重复用到的SQL语句放在with as 里面去,取一个别名,后面的查询就可以用到它,这样对于大批量的SQL语句起到了一个优化的作用,而且比起先前使用的外连接更加的清楚明了一些,可读性也高一些。当然对于我来说更好理解和使用;

2)当然这是一个临时存储的,一般是在存储过程中使用的。就我目前的使用而言,最大的好处就是做多表的连接,结果集的连接查询,实在是太方便了。

3)我在网上看到有人说 WITH AS 在存储过程中使用,声明了就一定要用,不然会报错。可是我测试了却不是这么回事,声明了没有使用,仍然是正确的。

4)当要创建多个临时表以供使用时,应该这样写

WITH TEMPNAME1
 (SELECT .. .),
TEMPNAME2
 (SELECT .. .. ..)
SELECT .. . FROM TEMPNAME1, TEMPNAME2 .. .. ..
5)以上所记录的用法,就涉及到视图的使用了,内联视图、标量子查询、WITH子查询


http://blog.itpub.net/post/12871/244801

总结:纠结了这么久,最好最好的解决办法就是使用视图,配合外连接,这样理解起来方便,看得人看得也舒服。很多测试,我就不一一记下了。知识都是在慢慢使用的过程中积累起来的。如果一下子去看那么多东西,没有深入到实践中去,到头来我还是会忘记。





转载于:https://my.oschina.net/eillenme/blog/100575

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值