暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 加入where子句

askTom 2017-10-20
337

问题描述

你好,

我有一个示例,下面我不确定oracle如何执行where子句。

选择a.id,b.column_A,b.column_B,b.column_C
从左连接B
在a.id = b.id上
其中b.column_C = “是”

我的问题是,oracle执行 'where' 子句首先从表b过滤记录,然后做连接。
或者它会先加入两个表,然后过滤加入的结果。

如果是第二个猜测,它实际上会将此左联接转换为内部联接,对吗?

专家解答

是后者。

因此,“on” 是连接条件,而 * where * 子句是过滤条件。这就是为什么您会看到优化器选择内部联接而不是外部联接的原因

SQL> create table a as select object_id id, d.* from dba_objects d;

Table created.

SQL> create table b as select * from a;

Table created.

SQL>
SQL> set autotrace traceonly explain
SQL> select *
  2  from A left join B
  3  on a.id = b.id
  4  where b.owner = 'XXXX';

Execution Plan
----------------------------------------------------------
Plan hash value: 4090908061

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |  2232 |   597K|   881   (1)| 00:00:01 |
|*  1 |  HASH JOIN         |      |  2232 |   597K|   881   (1)| 00:00:01 |
|*  2 |   TABLE ACCESS FULL| B    |  2232 |   298K|   439   (1)| 00:00:01 |
|   3 |   TABLE ACCESS FULL| A    | 78404 |    10M|   441   (1)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("A"."ID"="B"."ID")
   2 - filter("B"."OWNER"='XXXX')

SQL> set autotrace off
SQL> select *
  2  from A left join B
  3  on a.id = b.id
  4  where b.owner = 'XXXX';   <===  nothing matches this

no rows selected


将此与您的所有者条款作为联接的 * 一部分 * 进行比较

SQL> set autotrace off
SQL> set feedback only
SQL> select *
  2  from A left join B
  3  on a.id = b.id
  4  and b.owner = 'XXXX';

78404 rows selected.    <<====


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论