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%'
此查询仅适用于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%'
我看到的非查询是在FROM子句中使用join进行编写的.
我的问题可以分为三个部分:
问:假设我有相同的Oracle环境,哪个查询在性能,缓存,cpu负载等方面更好.第一个(在WHERE加入)或第二个(在FROM加入)
问:是否有任何其他sql实现接受除oracle之外的()连接限定符?如果是的话,哪个?
问:也许在WHERE子句中编写连接会使查询更具可读性但会影响LEFT / RIGHT连接的能力,这就是()的原因.我在哪里可以阅读更多关于this()的起源以及为什么它是专门为Oracle发明的?
解决方法
Q2.据我所知,只有oracle支持它.但不建议在最新版本的Oracle RDBMS中使用:
Oracle recommends that you use the FROM clause OUTER JOIN Syntax
rather than the Oracle join operator. Outer join queries that use the
Oracle join operator (+) are subject to the following rules and
restrictions,which do not apply to the FROM clause OUTER JOIN Syntax:
Q3.在sql ANSI中指定了外连接之前的Oracle“invent”().
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。