内连接与外连接(左右)的区别

数据库:


内连接与外连接:


内连接是获取两个表的公共部分C,(其中一个表的ID是另外一个表的连接字段)

select * from A,B where A.Aid=B.Bnameid与Select * from A JOIN B ON A.Aid=B.Bnameid

的运行
结果是一样的。

外连接:分为左连接和右连接
左连接(Left JOIN):即图3公共部分记录集C+表A记录集A1。

select * from A Left JOIN B ON A.Aid=B.Bnameid

右连接(Right JOIN):即图3公共部分记录集C+表B记录集B1。
  
select * from A Right JOIN B ON A.Aid=B.Bnameid


通过上面的运算解说,相信很多人已经想到,上面的情况(包括图3的关系图)说明的都只是A在B的左边的情况,
以下语句B在A的右边的又会出现什么情况呢??
select * from B Left JOIN A ON A.Aid=B.Bnameid
select * from B Right JOIN A ON A.Aid=B.Bnameid




其实对图3左右翻转一下就可以得出以下结论:
select * from B Left JOIN A ON A.Aid=B.Bnameid和select * from A Right JOIN B ON A.Aid=B.Bnameid所得出的记录集是一样的

select * from B Right JOIN A ON A.Aid=B.Bnameid和select * from A Left JOIN B ON A.Aid=B.Bnameid所得出的记录集也是一样的。


--表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
stu.id   exam.id  name     grade
--------------------------------
1 1 Jack 56
2 2 Tom 76
 
 
左连接(显示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
 
右连接(与作连接相反,显示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

你可能感兴趣的:(MySQL)