数据库之连接之外连接
1、left join是SQL语言中的查询类型,即连接查询。它的全称是左外连接(left outer join),是外连接中的一种。
2、Oracle中有三类OUTER JOIN -- 分别是LEFT,RIGHT和FULL。一个LEFT OUTER JOIN包含“左”表中的所有记录,即使它与在此连接中指定的“右”表并不存在任何匹配。
3、RIGHT OUTER JOIN包含“右”表中的所有记录,即使它与在此连接中指定的“左”表并不存在任何匹配。而一个FULL OUTER JOIN则包含左右两表中的所有记录。
left join(左连接)是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的。换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录。
right join(右连接),返回右表中所有记录和左表中连接字段相等的记录,即返回的记录数和右表的记录数一样。
join(等值连接),只返回两个表中连接字段相等的记录。
这些都是在网上搜的..
刚在b站看了教学视频自己总结如下:
外连接区分于内连接呢,就是不仅可以把两个表串连在一起,并且能让部分不匹配的数据展示出来,例如两个表:学生表和选课表:通过两表的学号来匹配:如果是内连接:那么
select *
from stu t join sc s
on(t.sno=sc.sno)
只会查询出学号对应的数据
但如果是外连接中的左外连接 left outer join
select *
from stu t
left (outer) join sc s
on(t.sno=sc.sno)
除了显示匹配的数据,还可以显示左表的不匹配数据,即显示左表的全部数据,及时其中部分数据的学号与选课表不匹配。
即:相比于内连接查询多出的几列数据,有学生信息,没有选课信息
同理:右外连接会比内连接显示出选课表的不匹配数据 即:多出的几列信息,有选课信息,没有学生信息
全外连接会比内连接显示出学生表、选课表的不匹配数据
但目前mysql不知道全外连接,会报错;而sqlserver和oracle支持
mysql的另一种全外连接变式:取左外和右外的并集
即:
select *
from stu t
left outer join sc s
on(t.sno=sc.sno)
union
select *
from stu t
right outer join sc s
on(t.sno=sc.sno)
如果是union all
则是左外连接查询结果+右外查询结果,不去重,相当于集合中的A+B
oracle中还有求交集的函数minus mysql不支持..