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

版权声明:本文为博主原创文章,转载请注明出处,谢谢。 https://blog.csdn.net/nailnehc/article/details/86328034

 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 与 空白记录连接 存入结果集汇总。										 
	}
}  

猜你喜欢

转载自blog.csdn.net/nailnehc/article/details/86328034