解释MySQL外连接、内连接与自连接的区别

来源:互联网 发布:淘宝 售后时间 编辑:程序博客网 时间:2024/06/05 16:55
先说什么是交叉连接: 交叉连接又叫笛卡尔积,它是指不使用任何条件,直接将一个表的所有记录和另一个表中的所有记录一一匹配。


笛卡尔积又叫笛卡尔乘积,是由一个笛卡尔人提出来的,简单地来说就是两个集合相乘的结果。直观的说 集合A{a1,a2,a3} 集合B{b1,b2} 他们的笛卡尔积就是A*B ={(a1,b1),(a1,b2),(a2,b1),(a2,b2),(a3,b1),(a3,b2)} 


例子:
--表stu id name 
1, Jack 
2, Tom 
3, Kity 
4, nono 
--表exam id grade 
1, 56 
2, 76 
11, 89 






内连接:是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合条件的记录不会出现在结果集中,即内连接只连接匹配的行。
内连接例子:(只显示两表id匹配)
    select stu.id,exam.id,stu.name, exam.grade from stu inner join exam on stu.id=exam.id 
结果:1 1 Jack 56 
     2 2 Tom 76 
                  

外连接:其结果集中不仅包含符合连接条件的行,而且还会包括左表、右表或两个表中的所有数据行,这三种情况依次称之为左外连接,右外连接,和全外连接。


左外连接,也称左连接,左表为主表,左表中的所有记录都会出现在结果集中,对于那些在右表中并没有匹配的记录,仍然要显示,右边对应的那些字段值以NULL来填充。
左外连接例子:(显示join左边的所有数据,exam只有两条记录,所以stu.id,grade都用Null来表示)
    select stu.id,exam.id,stu.name, exam.grade from stu left join exam on stu.id=exam.id
结果: 1 1 Jack 56 
2 2 Tom 76 
3 NULL Kity NULL 
4 NULL nono NULL 

右外连接,也称右连接,右表为主表,右表中的所有记录都会出现在结果集中。左连接和右连接可以互换,MySQL目前还不支持全外连接。
右外连接例子:(与左外连接相反,显示join右边表的所有数据)
select stu.id,exam.id,stu.name, exam.grade from stu right join exam on stu.id=exam.id 
 结果:1 1 Jack 56 
2 2 Tom 76 
NULL 11 NULL 89 
原创粉丝点击