SQL 关于 ‘内外连接’ 的个人理解

 SQL关于'内外连接'的个人理解

‘内外连接’韦恩图

内连接: 
    显示内连接
        模板:select * from 表1 inner join 表2 on 连接条件;

    隐式内连接
        模板:select * from 表1, 表2 where 连接条件;


外链接:
    左外连接
        模板:select * from 表1 left outer join 表2 on 连接条件;
        我的理解为:

for(int i = 1; i <= 表1.size; i++) {//遍历 左表【位于外连接关键字左边的表,称为左表】 
	获取表1中的第i条记录 K; 
	for(int j = 1; j <= 表2.size; j++) {
		将K与表2中的所有记录匹配,看是否满足连接条件,
			若满足,则把 K 与 表2中的第j条记录连接 存入结果集中,
			若不满足,则把 K 与 空白记录连接 存入结果集汇总。										 
	}
} 

    右外连接
        模板:select * from 表1 right outer join 表2 on 连接条件;

for(int i = 1; i <= 表2.size; i++) {//遍历 右表【位于外连接关键字右边的表,称为右表】 
	获取表2中的第i条记录 K; 
	for(int j = 1; j <= 表1.size; j++) {
		将K与表1中的所有记录匹配,看是否满足连接条件,
			若满足,则把 K 与 表1中的第j条记录连接 存入结果集中,
			若不满足,则把 K 与 空白记录连接 存入结果集汇总。										 
	}
} 


    oracle特有外连接(+)
        例如在oracle中:selecte * from emp e, dept d where e.deptno = d.deptno(+);
        【外连接查询雇员表[emp] 和 部门表[dept],将雇员表中所有的雇员与其对应的部门信息列出来。】 
        
        模板1-1:select * from 表1, 表2 where 表1.列名 = 表2.列名(+); 
        模板1-2:select * from 表2, 表1 where 表1.列名 = 表2.列名(+); 
        上述两个模板是一样的意思 
        
        模板2-1:select * from 表1, 表2 where 表1.列名(+) = 表2.列名; 
        模板2-2:select * from 表2, 表1 where 表1.列名(+) = 表2.列名;
        上述两个模板是一样的意思 
         
        理解:哪个'表.列名'后边有(+),哪个表就在for循环内层,
        比如模板1-1和1-2: 

for(int i = 1; i <= 表1.size; i++) {//遍历
	获取表1中的第i条记录 K; 
	for(int j = 1; j <= 表2.size; j++) {
		将K与表2中的所有记录匹配,看是否满足连接条件,
			若满足,则把 K 与 表2中的第j条记录连接 存入结果集中,
			若不满足,则把 K 与 空白记录连接 存入结果集汇总。										 
	}
}  

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值