mysql中union的使用

union 就是联合的意思,使用它可以在一条查询语句中把多个查询结果合并到一个结果集中。

举个简单的例子,当我们需要对表数据进行多条件筛选数据,例如我们在一个会员表中需要选出包括用户名称为‘admin123’的5条数据,如何'admin123'用户不存在,就选用其他会员补齐。此时用union就能很好实现,如下语句

SELECT * FROM `member` WHERE username IN ('admin123') UNION SELECT * FROM `member` WHERE username NOT IN ('admin123') LIMIT 5

union 查询时会合并相同的行,如果需要得到所有的行数据可以使用union all

需要注意的是UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同

MySQL 中的 `UNION` 操作符用于将两个或多个 `SELECT` 语句的结果集合并为一个结果集。默认情况下,`UNION` 会自动去除重复的行,而如果需要保留所有行(包括重复行),则可以使用 `UNION ALL` [^1]。这种操作符在需要从多个表或查询中提取数据并进行整合时非常有用,例如合并不同时间段的销售记录或多个用户表的数据 [^2]。 ### 基本语法 ```sql SELECT column1, column2, ... FROM table1 UNION [ALL] SELECT column1, column2, ... FROM table2 [ORDER BY column_list]; ``` 其中: - `UNION`:合并多个 `SELECT` 查询结果,并自动去重。 - `UNION ALL`:合并多个 `SELECT` 查询结果,并保留所有记录,包括重复项。 - 所有 `SELECT` 语句必须具有相同数量的列,且列的数据类型应兼容 [^3]。 - `ORDER BY` 子句用于对最终合并后的结果集进行排序。 ### 使用示例 假设存在两个表 `employees` 和 `contractors`,它们的结构如下: ```sql CREATE TABLE employees ( id INT, name VARCHAR(100), department VARCHAR(100) ); CREATE TABLE contractors ( id INT, name VARCHAR(100), department VARCHAR(100) ); ``` 如果需要将两个表中的员工姓名和部门合并,并去除重复项,可以使用以下语句: ```sql SELECT name, department FROM employees UNION SELECT name, department FROM contractors ORDER BY name; ``` 如果希望保留所有记录(包括重复项),则使用 `UNION ALL`: ```sql SELECT name, department FROM employees UNION ALL SELECT name, department FROM contractors ORDER BY name; ``` ### 注意事项 - `UNION` 操作符会自动去除重复行,而 `UNION ALL` 不会。 - 所有 `SELECT` 语句中的列数量必须一致,且列的数据类型应兼容 [^4]。 - 结果集的列名来自于第一个 `SELECT` 语句。 - `ORDER BY` 子句只能在最后使用一次,用于对整个结果集排序 [^1]。 ### 性能考虑 - `UNION` 会执行去重操作,因此性能上通常比 `UNION ALL` 稍差。如果明确不需要去重,建议使用 `UNION ALL` 以提高查询效率 [^2]。 - 在使用 `UNION` 时,如果涉及大量数据,应注意索引的使用,以提高查询性能 [^3]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值