背景
- 在一次面试的时候,面试官让我说一下这三者的使用场景和区别,当时瞬间懵逼,哈哈。回来赶快看一看,记下来。
详解
- inner join
- 等值查询:返回两张表中,联结字段值相等的组合记录
- 举例:所有学生参加考试,学生考试结果查询
- 表如下
表Student(学生表)记录如下: t_id name 1 龙 2 情 3 风 4 月 5 度 表Score(分数表)记录如下: c_id num t_id 1 50 1 2 88 2 3 90 3 4 62 4 5 0 5
- 查询语句:select s.t_id,s.name,c.num from Student s inner join Score c on s.t_id=c.t_id;
- 查询结果
t_id name num 1 龙 50 2 情 88 3 风 90 4 月 62 5 度 0
- 表如下
- left join
- 左外关联查询:返回包括左表中的所有记录和右表中联结字段有关的组合记录。如果左表中数据多于右表,查询结果中右表的数据为null。
- 举例:一个学生没有参加考试,查询考试结果
- 表如下
表Student(学生表)记录如下: t_id name 1 龙 2 情 3 风 表Score(分数表)记录如下: c_id num t_id 1 50 1 2 88 2 3 90 3 4 62 4
- 查询语句:select s.t_id,s.name,c.num from Student s left join Score c on s.t_id=c.t_id;
- 查询结果
t_id name num 1 龙 50 2 情 88 3 风 90 4 月 62 5 度 null
- 表如下
- right join
- 右外关联查询:返回包括右表中的所有记录和左表中联结字段相等的组合记录。如果右表中数据多于左表,查询结果中左表的数据为null。
- 举例
- 表如下
表Student(学生表)记录如下: t_id name 1 龙 2 情 3 风 表Score(分数表)记录如下: c_id num t_id 1 50 1 2 88 2 3 90 3 4 62 4
- 查询语句:select s.t_id,s.name,c.num from Student s rightjoin Score c on s.t_id=c.t_id;
- 查询结果如下
t_id name num 1 龙 50 2 情 88 3 风 90 null null 62
- 表如下