前面介绍了如何使用 WHERE 给查询加上条件约束,本小节介绍如何使用 UNION 联合查询。实际业务中,有时候需要把满足多种独立条件的结果集整合到一起,就可以使用 UNOIN 联合查询,本小节介绍 UNION 和 UNION ALL 的用法和区别。
1.UNION ALL联合查询
同样为了演示方便,先向 teacher 表插入多条测试数据:
INSERT INTO teacher
(name,age,id_number,email)
VALUES
(姓名一,,42011720200604077X,NULL),
(姓名二,,42011720200604099X,@qq.com),
(姓名三,,42011720200604020X,NULL),
(姓名四,,42011720200604022X,@qq.com),
(姓名五,,42011720200604033X,NULL),
(姓名六,,42011720200604077X,NULL),
(姓名七,,42011720200604099X,@qq.com),
(姓名八,,42011720200604020X,NULL),
(姓名九,,42011720200604022X,@qq.com),
(姓名十,,42011720200604033X,NULL),
(姓名1,,42011720200604077X,NULL),
(姓名2,,42011720200604099X,@qq.com),
(姓名3,,42011720200604020X,NULL),
(姓名4,,42011720200604022X,@qq.com),
(姓名5,,42011720200604033X,NULL),
(姓名6,,42011720200604077X,NULL),
(姓名7,,42011720200604099X,@qq.com),
(姓名8,,42011720200604020X,NULL),
(姓名9,,42011720200604022X,@qq.com),
(姓名0,,42011720200604033X,NULL)
执行结果如下图:
现在使用 UNION ALL 把满足两种查询条件的结果集并到一起:
SELECT * FROM teacher WHERE age >
UNION ALL
SELECT * FROM teacher WHERE age > ;
执行结果如下图:
Tips:如上图所示,UNION ALL 将两种查询结果并到一起,仔细观察可以发现结果集中有重复的数据,所以使用 UNION ALL 联合查询的结果集没有去掉重复的数据。
2.UNION 联合查询
现在使用 UNION 把上面两种结果集并到一起:
SELECT * FROM teacher WHERE age >
UNION
SELECT * FROM teacher WHERE age > ;
执行结果如下图:
Tips:如上图所示,UNION 将两种查询结果并到一起,可以看到结果集中已经去掉重复的数据,需要根据具体业务选择使用 UNION 还是 UNION ALL。
3.小结
本小节介绍了如何使用 UNION 和 UNION ALL 联合查询需要结果集,需要注意的是要根据具体业务选择使用 UNION 还是 UNION ALL 其中 UNION 联合查询已经去除了重复的结果集 UNION ALL 联合查询没有去除重复结果集,但是 UNION ALL查询性能要比 UNION好一些。