oracle natural join是一个比较方便的用法。如果两个表的某些字段名称相同,类型相同,natural join就会把他们做等值连接。比如下面我们知道这两个视图的结构如下:
SQL> desc v$sesstat Name Null? Type ------------------------------------------- -------- ------------------------------ SID NUMBER STATISTIC# NUMBER VALUE NUMBER SQL> desc v$statname Name Null? Type ------------------------------------------- -------- ------------------------------ STATISTIC# NUMBER NAME VARCHAR2(64) CLASS NUMBER STAT_ID NUMBER
它们的statistic# 也就是统计信息id 这个字段名字和类型都相同,所以如果用 natural join 就可以如下:
select sum(value) from v$statname natural join v$sesstat where name='session pga memory';
这个查询也等价于
select sum(value) from v$statname a join v$sesstat b on a.STATISTIC#=b.STATISTIC# where name='session pga memory';
但是要注意的是这两个查询返回的值略有不同,因为这个查询返回PGA总使用量。而pga总使用量是会变化的。