【原创】JOIN 详述(上)
几种常见 join 的用法
创建表
![](https://img.haomeiwen.com/i4099866/01f3174ecaee04de.png)
![](https://img.haomeiwen.com/i4099866/815d76e77eb70205.png)
插入数据
![](https://img.haomeiwen.com/i4099866/43e41a49c41e9127.png)
![](https://img.haomeiwen.com/i4099866/f451a0d82ea4be51.png)
INNER JOIN
select * from join_user u inner join join_order o on u.id = o.user_id
结果如下:
![](https://img.haomeiwen.com/i4099866/b4a50d276f294e87.png)
结论:在表中存在至少一个匹配时,INNER JOIN 关键字返回行。
LEFT JOIN
select * from join_user u left join join_order o on u.id = o.user_id
结果如下:
![](https://img.haomeiwen.com/i4099866/0af2c2ca22ec2e6b.png)
结论:left join 会返回左表所有的行,即使右表中没有匹配的行
select * from join_user u left join join_order o on u.id = o.user_id WHERE o.user_id is null
结果如下:
![](https://img.haomeiwen.com/i4099866/7b96bf61f7647660.png)
结论:返回左表特有的行
RIGHT JOIN
select * from join_user u right join join_order o on u.id = o.user_id
结果如下:
![](https://img.haomeiwen.com/i4099866/1d59f9daef935e90.png)
结论:right join 会返回右表所有的行,即使左表中没有匹配的行
select * from join_user u right join join_order o on u.id = o.user_id WHERE u.id is null
结果如下:
![](https://img.haomeiwen.com/i4099866/d15396d485456cea.png)
结论:会返回右表中独有的行
full join
MySQL 不支持 full join,通过left join 、right join、union 组合实现
select * from join_user u right join join_order o on u.id = o.user_id UNION select * from join_user u left join join_order o on u.id = o.user_id
结果如下:
![](https://img.haomeiwen.com/i4099866/66b93189343cd16c.png)
两表中都没有出现的数据
select * from join_user u right join join_order o on u.id = o.user_id WHERE u.id is null UNION select * from join_user u left join join_order o on u.id = o.user_id WHERE o.user_id is null
结果如下:
![](https://img.haomeiwen.com/i4099866/77539d759d54575b.png)