加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 在FROM子句和WHERE子句中连接有什么区别?

发布时间:2020-12-12 06:30:50 所属栏目:MsSql教程 来源:网络整理
导读:我们有一个Oracle 10g,我们的大多数应用程序都运行Oracle Forms 6i.我发现在views / packages / procedures / functions中编写的所有查询都是WHERE子句级别的JOINING表.例 SELECT * FROM TABLE_A A,TABLE_B B,TABLE_C C,TABLE_D DWHERE A.ID=B.ID(+)AND B.NO=
我们有一个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%'

此查询仅适用于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发明的?

解决方法

Q1.没有不同.您可以使用性能分析进行检查并比较执行计划.

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”().

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读