博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle中的外连接(三)
阅读量:5820 次
发布时间:2019-06-18

本文共 1206 字,大约阅读时间需要 4 分钟。

hot3.png

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子查询

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

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

你可能感兴趣的文章
Android图片添加水印图片并把图片保存到文件存储
查看>>
BigDecimal 舍入模式(Rounding mode)介绍
查看>>
开源 免费 java CMS - FreeCMS1.2-标签 infoSign
查看>>
开源 免费 java CMS - FreeCMS1.9 移动APP生成栏目列表数据
查看>>
Java IO流详尽解析
查看>>
Linux VSFTP服务器
查看>>
DHCP中继数据包互联网周游记
查看>>
Squid 反向代理服务器配置
查看>>
Java I/O操作
查看>>
Tomcat性能调优
查看>>
项目管理心得
查看>>
Android自学--一篇文章基本掌握所有的常用View组件
查看>>
灰度图像和彩色图像
查看>>
通过vb.net 和NPOI实现对excel的读操作
查看>>
TCP segmentation offload
查看>>
java数据类型
查看>>
数据结构——串的朴素模式和KMP匹配算法
查看>>
FreeMarker-Built-ins for strings
查看>>
验证DataGridView控件的数据输入
查看>>
POJ1033
查看>>