inner join&left join&right join的区别?
2017-08-10 14:49
786 查看
今天复习了一下多表查询,简单做个笔记。
下面这个图很清楚的描述了各连接方式的区别:
举个例子来了解有两张表,student、score,字段如下:
一、inner join(内连接,等同于等值连接)
1、inner join :
select stu.sname as 姓名, s.subject as 科目, s.grade as 分数 from student stu inner join score s on stu.sid = s.sid;
2、等值连接:
select stu.sname as 姓名, s.subject as 科目, s.grade as 分数 from student stu, score s where stu.sid = s.sid;
效果是一样的:
二、left join(左连接:包含左子表的全部记录)
select stu.sname as 姓名, s.subject as 科目, s.grade as 分数 from student stu left join score s on stu.sid = s.sid;
三、right join(右连接:包含右子表的全部记录)
select stu.sname as 姓名, s.subject as 科目, s.grade as 分数 from student stu right join score s on stu.sid = s.sid;
四、full join(全连接:包含左右子表的全部记录)
select stu.sname as 姓名, s.subject as 科目, s.grade as 分数 from student stu full join score s on stu.sid = s.sid;
要注意的:在MySQL中并不支持全连接,但是我们可以使用union(会自动去除重复字段),将左右子表联合起来构造全连接,例如
select stu.sname as 姓名, s.subject as 科目, s.grade as 分数 from student stu left join score s on stu.sid = s.sid
union
select stu.sname as 姓名, s.subject as 科目, s.grade as 分数 from student stu right join score s on stu.sid = s.sid;
这个效果跟上面的full join是一样的。
下面这个图很清楚的描述了各连接方式的区别:
举个例子来了解有两张表,student、score,字段如下:
一、inner join(内连接,等同于等值连接)
1、inner join :
select stu.sname as 姓名, s.subject as 科目, s.grade as 分数 from student stu inner join score s on stu.sid = s.sid;
2、等值连接:
select stu.sname as 姓名, s.subject as 科目, s.grade as 分数 from student stu, score s where stu.sid = s.sid;
效果是一样的:
二、left join(左连接:包含左子表的全部记录)
select stu.sname as 姓名, s.subject as 科目, s.grade as 分数 from student stu left join score s on stu.sid = s.sid;
三、right join(右连接:包含右子表的全部记录)
select stu.sname as 姓名, s.subject as 科目, s.grade as 分数 from student stu right join score s on stu.sid = s.sid;
四、full join(全连接:包含左右子表的全部记录)
select stu.sname as 姓名, s.subject as 科目, s.grade as 分数 from student stu full join score s on stu.sid = s.sid;
要注意的:在MySQL中并不支持全连接,但是我们可以使用union(会自动去除重复字段),将左右子表联合起来构造全连接,例如
select stu.sname as 姓名, s.subject as 科目, s.grade as 分数 from student stu left join score s on stu.sid = s.sid
union
select stu.sname as 姓名, s.subject as 科目, s.grade as 分数 from student stu right join score s on stu.sid = s.sid;
这个效果跟上面的full join是一样的。
相关文章推荐
- inner join on, left join on, right join on的区别与介绍
- hibernate 中left join 与left join fetch ,right join与right join fetch 等的区别
- 解析sql语句中left_join、inner_join中的on与where的区别
- 解析sql语句中left_join、inner_join中的on与where的区别
- (inner\left\right\full)join连接的区别!
- sql语法中的inner join on, left join on和 right join on的区别和详细使用方法(转载)
- Left Join Right Join Inner Join的用法与区别
- Left/Right/Inner Join用法和区别
- 图解SQL inner join、left join、right join、full outer join、union、union all的区别
- 外链接操作小结 inner join & left join & right join
- left join inner join 区别
- SQL中INNER、LEFT、RIGHT JOIN的区别和用法详解
- SQL left join(左关联)right join(右关联)inner join(自关联)的区别
- cross join & natural join & inner join & left outer join & right outer join & full outer join
- sql中join的修饰字段(left,right,inner)的区别
- 数据库左连接left join、右连接right join、内连接inner join on 及 where条件查询的区别
- MySQL left join right join inner join 区别
- INNER JOIN, LEFT JOIN & RIGHT JOIN
- sql中left、inner、right join on和where的区别
- left join /right join/inner join区别