赞
赏
Mysql 可以将多个 SQL 语句合并,同时执行多个查询语句,这样的查询叫做并查询,也叫做组合查询。组合查询使用场景:
组合查询需要用到关键字 UNION
。它可以将多条 sql 语句进行组合。将多个查询结果集合并成一个结果集。
SELECT 列1,列2... FROM tableName [WHERE 条件] UNION [ALL] SELECT column1,column2... FROM tablename [WHERE 条件]
描述
- 在使用 UNION 的时候,必须要有两条或两条以上的 SELECT 语句组成。语句之间用 UNION 分割。
- 被 UNION 关联的 SQL 语句里面查询的列必须要包含相同的列,表达式或聚集函数。
- 列数据类型必须要兼容。
UNION 可以将重复的数据过滤掉,UNION ALL 可以将所有的数据获取出来。这个用户可以根据需要来进行操作。
案例
本章节使用的 sql 如下
-- 学生表 CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `stu_no` int(11) DEFAULT NULL, `stu_name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, `class_id` int(11) NOT NULL COMMENT '班级ID', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; INSERT INTO `student` VALUES (1, 1001, 'xiaoming', 17, 1); INSERT INTO `student` VALUES (2, 1002, 'honghong', 16, 2); INSERT INTO `student` VALUES (3, 1003, 'xiaojun ', 18, 3); INSERT INTO `student` VALUES (4, 1004, '小亮', 19, 1); INSERT INTO `student` VALUES (5, 1005, 'LIANGLIANG', 19, 4); INSERT INTO `student` VALUES (6, 1006, ' 小 杰 ', 16, 4); INSERT INTO `student` VALUES (7, 1007, '小亮', NULL, 1); INSERT INTO `student` VALUES (8, 1008, '无年龄', NULL, 2); INSERT INTO `student` VALUES (9, 1009, '欧阳亮亮', 19, 5);
我们对同一张表进行操作,将班级 class_id 是 1 的学生和学生姓名中有 亮 字的学生关联。
-- 嗨客网(www.haicoder.net) SELECT id,stu_no,stu_name FROM student where class_id = 1 UNION SELECT id,stu_no,stu_name FROM student where stu_name LIKE '%亮%';
运行结果如下
UNION 默认的将查询到到结果重复的数据过滤不展示,如果想让所有的结果展示,可以使用 UNION ALL 关键字。可以看到,将两个 sql 语句查询到的结果给连接了起来。
使用 UNION ALL 运行结果如下,将重复的数据展示出来。
Mysql组合查询总结
利用 UNION 可以将多条查询结果作为一条结果给返回。使用 UNION 可以极大的简化复杂的 WHERE 子句。