联表查询
最近使用连表查询时,老是忘记它们之间的区别,今天就总结一下。
外连接
外连接可分为:左连接,右连接,完全外连接。
- 左外连接
select *
from student
left join Course on Course.ID=student.ID
结果图如下:左连接是以左表为主,左表有ID的都显示出来,右与左表满足连接条件的就显示出来没有就为空。
- 右外连接
select *
from student
right join Course on(student.ID=Course.ID)
结果图如下:右连接是以右边表为主,右表有ID的都显示出来,左与右表满足连接条件的就显示出来没有就为空。
注:本文左表是指sql语句中join左边的表,右表是join右边的表
- 完全外连接
select *
from student
full join Course on(student.ID=Course.ID)
结果图如下:完全外连接,两个表都为主表,有点像两个集合的全集。
内连接
内连接为join或者inner join
select *
from student
inner join Course on(student.ID=Course.ID)
结果图如下:内连接是左右两个表同时都满足连接条件时才显示,像求两个集合的交集。
相当于
select * from student,course where student.ID=course.ID
- 交叉联表
select * from student cross join course
不带where条件的交叉连接,结果是笛卡尔积,第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。
如果带where条件结果和内连接一样。
注意事项
以上所有连接都要注意一对多和多对多的情况,出现这些情况的条件是连接条件不是主键,即不是唯一的。(此处只举两个例子)
右连接结果图:
左连接结果图:
内连接结果图: