嗨客网搜索
数据库教程

Mysql组合查询

Mysql组合查询教程

Mysql 可以将多个 SQL 语句合并,同时执行多个查询语句,这样的查询叫做并查询,也叫做组合查询。组合查询使用场景:

  1. 需要使用到组合查询的地方有在一个查询中从不同的表返回数据结构。
  2. 对一个表执行多个查询,按照一个查询的结果进行返回。

组合查询需要用到关键字 UNION。它可以将多条 sql 语句进行组合。将多个查询结果集合并成一个结果集。

UNION详解

语法

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 '%亮%';

运行结果如下

15 union.png

UNION 默认的将查询到到结果重复的数据过滤不展示,如果想让所有的结果展示,可以使用 UNION ALL 关键字。可以看到,将两个 sql 语句查询到的结果给连接了起来。

使用 UNION ALL 运行结果如下,将重复的数据展示出来。

16 union_all.png

Mysql组合查询总结

利用 UNION 可以将多条查询结果作为一条结果给返回。使用 UNION 可以极大的简化复杂的 WHERE 子句。

嗨客网顶部