我们在设计数据表的时候,根据范式会将表设计成不同的角色,这样在需要查询信息是就需要在不同的表中获取不同的字段,那么left join、right join、inner join这些东西就经常要用到,那么他们之间有什么区别的呢,我们做一个例子说明一下他们之间的区别。
表user
userid name
10001 user01
10002 user02
10003 user03
10004 user04
表order
id userid goodsid
200901 10001 50001
200902 10002 50002
200903 10010 50003
那么我们现在比较三个的不同之处
left join
select a.name,b.goodsid from user a
left join order b on b.userid = a.userid
结果:
name goodsid
10001 50001
10002 50002
10003 NULL
10004 NULL
我们可以看到left join是以表user为准,将符合条件的结果查询出来,没有订单的客户编号也显示。
right join
select a.name,b.goodsid from user a
right join order b on b.userid = a.userid
结果:
name goodsid
10001 50001
10002 50002
NULL 50003
我们可以看到right join是以表order为准,将符合条件的结果查询出来,没有用户编号的订单也显示。
inner join
select a.name,b.goodsid from user a
inner join order b on b.userid = a.userid
结果:
name goodsid
10001 50001
10002 50002
我们可以看到innerjoin是只显示符合b.userid = a.userid条件的数据。
表user
userid name
10001 user01
10002 user02
10003 user03
10004 user04
表order
id userid goodsid
200901 10001 50001
200902 10002 50002
200903 10010 50003
那么我们现在比较三个的不同之处
left join
select a.name,b.goodsid from user a
left join order b on b.userid = a.userid
结果:
name goodsid
10001 50001
10002 50002
10003 NULL
10004 NULL
我们可以看到left join是以表user为准,将符合条件的结果查询出来,没有订单的客户编号也显示。
right join
select a.name,b.goodsid from user a
right join order b on b.userid = a.userid
结果:
name goodsid
10001 50001
10002 50002
NULL 50003
我们可以看到right join是以表order为准,将符合条件的结果查询出来,没有用户编号的订单也显示。
inner join
select a.name,b.goodsid from user a
inner join order b on b.userid = a.userid
结果:
name goodsid
10001 50001
10002 50002
我们可以看到innerjoin是只显示符合b.userid = a.userid条件的数据。