Oracle 执行计划(三)-------表连接方式

本文详细介绍了SQL中创建表结构、添加主键与外键约束的方法,并通过具体实例展示了不同类型的表连接,包括排序-合并连接、嵌套循环、哈希连接及笛卡尔积的执行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL FOR TESTING:

create table qcb_student_test(

student_id number,

student_name varchar2(20),

student_age number,

class_id number

);

 

create table qcb_class_test(

class_id number,

class_name varchar2(20)

);

 

select * from qcb_student_test

select * from qcb_class_test

 

alter table qcb_student_test add primary key (student_id)

alter table qcb_class_test add primary key (class_id)

 

alter table tb_user add constraint fk_user_group foreign key(g_id) references tb_group(group_id);

 

alter table qcb_student_test add constraint class_id_foreign foreign key (class_id) references qcb_class_test (class_id);

 

 

insert into qcb_student_test values(1,'kevin',28,1);

insert into qcb_student_test values(2,'singo',25,1);

insert into qcb_student_test values(3,'james',26,1);

insert into qcb_class_test values(1,'teacher_zhan');

 

insert into qcb_student_test values(4,'sakula',28,2);

insert into qcb_student_test values(5,'allen',25,2);

insert into qcb_class_test values(2,'teacher_li');

 

insert into qcb_student_test values(6,'luomin',28,null);

 

insert into qcb_class_test values(3,'teacher_zeng');

 

 

表连接的几种方式:

1.SORT MERGE JOIN(排序-合并连接)

执行流程:

a.查询出表qcb_student_test s的数据,按照连接列s.class_id排序

b.查询出表qcb_class_test c的数据,按照连接列c.class_id排序

c.两边结果集做合并操作

 

2.NESTED LOOPS(嵌套循环)

执行流程:

表连接中查询出表qcb_class_test c的第一行数据并根据字段id,与qcb_student_test s表中所有数据做匹配,匹配的话,把数据放入结果集中。

                 二                                                                          所有数据

                                                             三                                                                          所有数据

 

 

 

3.HASH JOIN(哈希连接)

哈希连接只适用于等值连接(即连接条件为  =  )

HASH JOIN对两个表做连接时并不一定是都进行全表扫描,其并不限制表访问方式;

执行流程:

a) 取出 row source 1(驱动表,在HASH JOIN中又称为Build Table) 的数据集,然后将其构建成内存中的一个 Hash Table(Hash函数的Hash KEY就是连接操作关联列),创建Hash位图(bitmap)

b) 取出 row source 2(匹配表)的数据集,对其中的每一条数据的连接操作关联列使用相同的Hash函数并找到对应的 a) 里的数据在 Hash Table 中的位置,在该位置上检查能否找到匹配的数据

 

 

 

4.CARTESIAN PRODUCT(笛卡尔积)

 

转载于:https://www.cnblogs.com/zhougongjin/p/10712059.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值