select * from A inner join B on A.a=B.b inner join C on C.c=A.a
上述请教各位,表C关联的基表是A表 还是A表和B表关联后的表呢?
求: 不胜感激!!!
上述请教各位,表C关联的基表是A表 还是A表和B表关联后的表呢?
求: 不胜感激!!!
解决方案 »
- 有了解oracle商业智能的朋友嘛?
- 存储过程,取返回值和传sql问题
- oracle插入最大值的问题
- 关于用户误操作的回退问题,向大家请教方法和策略.我oracle9i的闪回(flashback)以及表空间含多个数据的问题,
- 在9i的SQL文中怎么获得当天日期呢?getdate?!谢谢
- 在linux下用proc/c++往oracle里写汉字的问题(汉字给拆了,不知如何解决)
- SQL语句问题!急!
- 急,急,急!!!麻烦看下这个存储过程
- oracle stored procedure和sequence的标识符字符最多多长?
- C#连接oracle
- PL/SQL Developer 问题
- oracle数据库查询变慢,在线等回复!
基表是什么意思呢?
如果单纯从语句上看,是表C关联的是 A表与B表INNER JOIN的结果
但是
实际的实行过程中要收到优化器的影响,实际的执行顺序受到很多因素制约:比如结果集的大小、初始化参数中一次执行块的大小、索引建立的列、有无索引、该表的并发程度、是否排序、是否存在唯一键约束等等条件,优化器会综合考虑上面的各种因素,选择合适的执行顺序。也就是说,可能在实际的执行过程中,B和C先做INNER JOIN操作,然后再与A做INNER JOIN操作,也是未可知的,取决于当时的环境。
具体的还要看执行计划,
SQL> set autotrace trace exp;
SQL> select * from a inner join b on a.a=b.b inner join c on c.c=a.a;执行计划
----------------------------------------------------------
Plan hash value: 4163918451------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 36 | 7 (15)| 00:00:01 |
|* 1 | HASH JOIN | | 1 | 36 | 7 (15)| 00:00:01 |
| 2 | MERGE JOIN CARTESIAN| | 1 | 24 | 4 (0)| 00:00:01 |
| 3 | TABLE ACCESS FULL | B | 1 | 12 | 2 (0)| 00:00:01 |
| 4 | BUFFER SORT | | 1 | 12 | 2 (0)| 00:00:01 |
| 5 | TABLE ACCESS FULL | C | 1 | 12 | 2 (0)| 00:00:01 |
| 6 | TABLE ACCESS FULL | A | 1 | 12 | 2 (0)| 00:00:01 |
------------------------------------------------------------------------------Predicate Information (identified by operation id):
--------------------------------------------------- 1 - access("C"."C"="A"."A" AND "A"."A"="B"."B")Note
-----
- dynamic sampling used for this statement (level=2)可以看出B和Cmerge join之后与A做hash join。