Oracle的表如何连接

62次阅读
没有评论

共计 3042 个字符,预计需要花费 8 分钟才能阅读完成。

这篇文章主要介绍 Oracle 的表如何连接,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Oracle 表连接方法有四种:
  ● 排序合并连接(Sort Merge Join)
  ● 嵌套循环连接(Nested Loops Join)
  ● 哈希连接(Hash Join)
  ● 笛卡尔积(Cartesian Product)

如果 where 条件有 exists、in 或 =any 操作符 + 子查询,则 Oracle 会将其处理为半连接,执行计划中对应的关键字为 SEMI。

SQL select department_id,department_name from departments d where exists (select 1 from employees e where d.department_id = e.department_id and e.salary 2500);

11 rows selected.

Execution Plan
———————————————————-
Plan hash value: 2188966913

——————————————————————————————–
| Id  | Operation  | Name  | Rows  | Bytes | Cost (%CPU)| Time  |
——————————————————————————————–
|  0 | SELECT STATEMENT  |  |  10 |  230 |  6  (17)| 00:00:01 |
|  1 |  MERGE JOIN SEMI  |  |  10 |  230 |  6  (17)| 00:00:01 |
|  2 |  TABLE ACCESS BY INDEX ROWID| DEPARTMENTS |  27 |  432 |  2  (0)| 00:00:01 |
|  3 |  INDEX FULL SCAN  | DEPT_ID_PK  |  27 |  |  1  (0)| 00:00:01 |
|*  4 |  SORT UNIQUE  |  |  105 |  735 |  4  (25)| 00:00:01 |
|*  5 |  TABLE ACCESS FULL  | EMPLOYEES  |  105 |  735 |  3  (0)| 00:00:01 |
——————————————————————————————–

SQL select department_id,department_name from departments d where department_id in (select department_id from employees e where d.department_id = e.department_id and e.salary 2500);

11 rows selected.

Execution Plan
———————————————————-
Plan hash value: 2188966913

——————————————————————————————–
| Id  | Operation  | Name  | Rows  | Bytes | Cost (%CPU)| Time  |
——————————————————————————————–
|  0 | SELECT STATEMENT  |  |  10 |  230 |  6  (17)| 00:00:01 |
|  1 |  MERGE JOIN SEMI   |  |  10 |  230 |  6  (17)| 00:00:01 |
|  2 |  TABLE ACCESS BY INDEX ROWID| DEPARTMENTS |  27 |  432 |  2  (0)| 00:00:01 |
|  3 |  INDEX FULL SCAN  | DEPT_ID_PK  |  27 |  |  1  (0)| 00:00:01 |
|*  4 |  SORT UNIQUE  |  |  105 |  735 |  4  (25)| 00:00:01 |
|*  5 |  TABLE ACCESS FULL  | EMPLOYEES  |  105 |  735 |  3  (0)| 00:00:01 |
——————————————————————————————–

SQL select department_id,department_name from departments d where department_id=any(select department_id from employees e where d.department_id = e.department_id and e.salary 2500);

11 rows selected.

Execution Plan
———————————————————-
Plan hash value: 2188966913

——————————————————————————————–
| Id  | Operation  | Name  | Rows  | Bytes | Cost (%CPU)| Time  |
——————————————————————————————–
|  0 | SELECT STATEMENT  |  |  10 |  230 |  6  (17)| 00:00:01 |
|  1 |  MERGE JOIN SEMI  |  |  10 |  230 |  6  (17)| 00:00:01 |
|  2 |  TABLE ACCESS BY INDEX ROWID| DEPARTMENTS |  27 |  432 |  2  (0)| 00:00:01 |
|  3 |  INDEX FULL SCAN  | DEPT_ID_PK  |  27 |  |  1  (0)| 00:00:01 |
|*  4 |  SORT UNIQUE  |  |  105 |  735 |  4  (25)| 00:00:01 |
|*  5 |  TABLE ACCESS FULL  | EMPLOYEES  |  105 |  735 |  3  (0)| 00:00:01 |
——————————————————————————————–

以上是“Oracle 的表如何连接”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计3042字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)