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