之前一直对左右连接的区别与联系模糊不清,今天自己做了一个例子,清晰易懂。
- 首先 建两张表:表a 、表b
![](https://img.haomeiwen.com/i2610324/fae7b0d0839c66e2.png)
![](https://img.haomeiwen.com/i2610324/5ae34ac562005c9e.png)
left join
- 先看这一种情况:
SELECT *
FROM a A
LEFT JOIN b B
ON A.id=B.id
查询结果:
![](https://img.haomeiwen.com/i2610324/c84d3d54f64c1d20.png)
left join 左边是主表,即主表是a表,所以优先参考a,在b表中没有对应的数据就显示为空。
- 第二种情况:
SELECT *
FROM b B
LEFT JOIN a A
ON A.id=B.id
查询结果:
![](https://img.haomeiwen.com/i2610324/0c078ec352e6b1d5.png)
这种情况主表是 b 表,所以优先考虑b表数据,对应的在a表中没有的数据显示为null,但是不存在这种情况,所以只能显示a表中,符合条件的两条数据。
同时可以发现,在sql语句中,from后面先出现的表,在查询的时候最先显示出来。
同理,在select 的后面,先查询的字段会在查询结果中,先显示出来。
right join
- 第一种情况:
SELECT *
FROM a A
RIGHT JOIN b B
ON A.id=B.id
查询结果:
![](https://img.haomeiwen.com/i2610324/ae3ff02281414c29.png)
可以看到与 left join 的第二种情况 查询的数据是一样的,但是表中显示的结果是相反的。
- 第二种情况:
SELECT *
FROM b B
RIGHT JOIN a A
ON A.id=B.id
查询结果:
![](https://img.haomeiwen.com/i2610324/5b6755374b30b24d.png)
网友评论