@[TOC]
0 写在前面
实际业务中,有时候需要把满足多种独立条件的结果集整合到一起,就可以使用 UNOIN 联合查询。
1 格式
[查询一] UNOIN [查询二]……
:将多条查询语句的结果合并成一个结果并去重[查询一] UNOIN ALL [查询二]……
:将多条查询语句的结果合并成一个结果
2 SQL准备
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`sex` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`date_birth` datetime DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Records of person
-- ----------------------------
INSERT INTO `person` VALUES ('1', '小明', '男', '21', '2001-02-02 12:29:30');
INSERT INTO `person` VALUES ('2', '小红', '女', '20', '2002-01-01 00:00:00');
INSERT INTO `person` VALUES ('3', '张三', '男', '22', '2002-01-01 00:00:01');
INSERT INTO `person` VALUES ('4', '李四', '男', '30', '1992-07-10 12:00:00');
DROP TABLE IF EXISTS `person02`;
CREATE TABLE `person02` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`sex` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`age` int(11) NULL DEFAULT NULL,
`date_birth` datetime NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = COMPACT;
-- ----------------------------
-- Records of person02
-- ----------------------------
INSERT INTO `person02` VALUES (1, '小明', '男', 21, '2001-02-02 12:29:30');
INSERT INTO `person02` VALUES (2, '小红', '女', 20, '2002-01-01 00:00:00');
INSERT INTO `person02` VALUES (3, '张三', '男', 22, '2002-01-01 00:00:01');
INSERT INTO `person02` VALUES (4, '李四', '男', 30, '1992-07-10 12:00:00');
SET FOREIGN_KEY_CHECKS = 1;
3 代码示例
3.1 UNION ALL
查询两个表的人大于20岁的集合。
sql:
SELECT * FROM person WHERE age >20
UNION ALL
SELECT * FROM person02 WHERE age > 20;
查询结果:
这样的结果有一点问题,有相同的数据。
3.2 UNION
同样的查询条件:
sql:
SELECT * FROM person WHERE age >20
UNION
SELECT * FROM person02 WHERE age > 20;
查询结果:
可以看到使用UNION可以去重复的数据。
4 写在最后
使用 UNION 还是 UNION ALL 其中 UNION 联合查询已经去除了重复的结果集 UNION ALL 联合查询没有去除重复结果集,但是 UNION ALL查询性能要比 UNION好一些。
最后还是需要根据具体业务选择使用 UNION 还是 UNION ALL。