oracle如何多表联查,oracle多表联查效率优化-成都快上网建站

oracle如何多表联查,oracle多表联查效率优化

oracle中怎么实现多表查询

查询,首先你得清楚你需要什么数据,以及你所需要的数据,存在于哪些表中,或者说与哪些表有关联。

成都服务器托管,创新互联公司提供包括服务器租用、服务器托管、带宽租用、云主机、机柜租用、主机租用托管、CDN网站加速、域名与空间等业务的一体化完整服务。电话咨询:028-86922220

SQL 语句基本查询语法: 不加条件查询,select * from 表名 ; 加条件查询:select * from 表名 where 满足的条件;

多表查询 :select a.* ,b.* from 表1 a,表2 b where a.字段=b.字段;

oracle数据库 多表连接查询

以oracle使用rownum伪列实现分页为例:

三表连接分页示例代码如下:

select * from (select rownum r,k.kch,k.kcm,cj.cj,x.xh,x.xm from KCB k,CJB cj,XSB x where k.kch = cj.kch and cj.xh = x.xh and rownum=10) where r0

特别注意这样外层查询时由于内层查询的字段有重复列名,所以内层查询最后不要用*。取完每一个表字段,这样很容易报错(“无效字段”)

oracle数据库多表连接查询

以oracle使用rownum伪列实现分页为例:

三表连接分页示例代码如下:

select * from (select rownum r,k.kch,k.kcm,cj.cj,x.xh,x.xm from KCB k,CJB cj,XSB x where k.kch = cj.kch and cj.xh = x.xh and rownum=10) where r0

特别注意这样外层查询时由于内层查询的字段有重复列名,所以内层查询最后不要用*。取完每一个表字段,这样很容易报错(“无效字段”)

oracle 多表关联查询

第一种查询的语法不全吧,如果补齐了的话,就是先连接的要写到子查询中。

如果理解没错的话,看着觉得应该效果一样。

是这样吗?

SELECT ...... FROM (select * from (select * from 表1 LEFT JOIN 表2 ON 表1关联表2条件) 表11 LEFT JOIN 表3 ON 表3关联表11条件) 表111 LEFT JOIN 表4 ON 表111关联表4条件 LEFT JOIN 表5 ON 表111关联表5条件 where ……

oracle 多表联合查询

这种外连接用oracle的写法是很简单的。。。你试试。。。

select a.qymc 企业名称,

a.swdjzh 税务号,

a.gsdjzh 工商号,

b.ZCHJM 资产合计,

b.FZHJM 负债合计,

b.SYZQYHM 所有者权益,

b.YJSJM 地税收入,

c.ZYSRL 主营业务收入,

c.QTLRL 其他收入,

c.LRZEL 利润总额,

c.LRZEL 入地方财政收入,

d.ZRS 员工人数

from tb_qyxx a,

(select a.*

from tb_ZCFZXX a,

(select ZZJGDM,

max(nd||yd) ny,

from tb_ZCFZXX

group by ZZJGDM) b

where a.ZZJGDM = b.ZZJGDM

and (a.nd||a.yd) = b.ny)) b

(select a.*

from tb_lrxx a,

(select ZZJGDM,

max(nd||yd) ny,

from tb_lrxx

group by ZZJGDM) b

where a.ZZJGDM = b.ZZJGDM

and (a.nd||a.yd) = b.ny)) c

(select a.*

from tb_qyrcqk a,

(select ZZJGDM,

max(nd||yd) ny,

from tb_qyrcqk

group by ZZJGDM) b

where a.ZZJGDM = b.ZZJGDM

and (a.nd||a.yd) = b.ny)) d

where a.ZZJGDM = b.ZZJGDM(+)

and a.ZZJGDM = c.ZZJGDM(+)

and a.ZZJGDM = d.ZZJGDM(+)

order by b.nd,b.ny asc

注意几点:

max(nd),max(yd)之后并不能选出最近日期。。。例如:两条记录有(nd,yd)为(2012,12),(2013,1)则max(nd),max(yd) 选出的是(2013,12),这个就在原集里面可能就没有记录。。。max(nd+yd) 也不对,因为2012+12会被oracle转化为数字加法=2024,2013+1=2014。。。如果懒得转换为日期型来比较,只有nd||yd才行。。。

另外,以a表为中心,保留a表全部,则b表没有交集的部分填充空值的oracle表示法是

a.id = b.id(+) 下面的人写反了。。。


本文标题:oracle如何多表联查,oracle多表联查效率优化
链接URL:http://kswjz.com/article/dseogsj.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流