Ahm*_*mad 8 sql oracle join inner-join outer-join
我们有一个Oracle 10g,我们的大多数应用程序都运行Oracle Forms 6i.我发现在views/packages/procedures/functions中编写的所有查询都是WHERE子句级别的JOINING表.例
SELECT * FROM
TABLE_A A,
TABLE_B B,
TABLE_C C,
TABLE_D D
WHERE
A.ID=B.ID(+)
AND B.NO=C.NO(+)
AND C.STATUS=D.ID
AND C.STATUS NOT LIKE 'PENDING%'
Run Code Online (Sandbox Code Playgroud)
此查询仅适用于ORACLE,因为它具有(+)在其他SQL平台中不可接受的连接限定符.以上查询相当于:
SELECT * FROM
TABLE_A A LEFT JOIN TABLE_B B ON A.ID=B.ID
LEFT JOIN TABLE_C C ON B.NO=C.NO
JOIN TABLE_D D ON C.STATUS=D.ID
WHERE
C.STATUS NOT LIKE 'PENDING%'
Run Code Online (Sandbox Code Playgroud)
我看到的非查询是在FROM子句中使用join进行编写的.
我的问题可以分为三个部分:
问:假设我有相同的Oracle环境,哪个查询在性能,缓存,CPU负载等方面更好.第一个(在WHERE加入)或第二个(在FROM加入)
问:是否有任何其他SQL实现接受(+)除oracle之外的连接限定符?如果是的话,哪个?
问:也许在WHERE子句中编写连接会使查询更具可读性,但会影响LEFT/RIGHT连接的能力,这就是为什么(+).我在哪里可以阅读更多关于它的起源(+)以及为什么它是专门为Oracle发明的?
Q1.没有不同.您可以使用性能分析进行检查并比较执行计划.
Q2.据我所知,只有oracle支持它.但不建议在最新版本的Oracle RDBMS中使用:
Oracle建议您使用FROM子句OUTER JOIN语法而不是Oracle join运算符.使用Oracle连接运算符(+)的外连接查询受以下规则和限制的约束,这些规则和限制不适用于FROM子句OUTER JOIN语法:
Q3.在SQL ANSI中指定外连接之前的Oracle"发明"(+).
| 归档时间: |
|
| 查看次数: |
3702 次 |
| 最近记录: |