一、前期准备
建立一张user表和一张order表,并填充相应的数据

表1: user 表 表2:order表
二、左连接(Left Join和Right Join)
- 运行代码:
SELECT * FROM user LEFT JOIN order ON user.id = order.uid;
- 查询结果为:

- 总结
(1)Left join 会查出左表中的所有数据,查出右表中符合连接条件的部分数据;
(2)当右侧数据没有时,会以null显示(如上图的最后一行);
(3)当右侧数据比左侧数据多的时候,左侧数据会出现重复;

图1:Left Join 图2:Right Join
三、内连接(Inner Join)
join是 inner join 的简便写法;
SELECT * FROM user INNER JOIN order ON user.id = order.uid;
- 执行结果

- 总结:
(1)Inner Join 会仅仅返回两个表匹配上的结果
图3:Inner Join
四、全连接(Union 和 Union All)
MySQL中没有Full Join,但是用过Union 和 Union All也能够实现
SELECT FROM user LEFT JOIN order ON user.id = order.uid UNION SELECT FROM user RIGHT JOIN order ON user.id = order.uid
- 执行结果

Union 结果集
Union All结果集
- 总结
(1)Union 会使结果集进行合并,并去除重复数据;
(2)Union ALL 同样会合并结果集,但是不去除重复数据;
图4:Union
五、左(右)表独有
SELECT * FROM user LEFT JOIN order ON user.id = order.uid WHERE order.uid IS NULL
执行结果:
- 总结:
(1)返回左侧独有的数据;
六、两表独有数据集合
SELECT FROM user LEFT JOIN order ON user.id = order.uid WHERE order.uid IS NULL UNION SELECT FROM user RIGHT JOIN order ON user.id = order.uid WHERE user.id IS NULL

- 总结
(1)取出两者独有的数据
图7:两表独有的数据集合

