MySQL UNION: 去重相等的数据
引言
在数据库中,我们经常需要对数据进行合并或者联接操作。MySQL提供了UNION操作符,可以用于合并两个或者多个SELECT语句的结果集。然而,在使用UNION操作符时,我们可能会遇到需要去重的情况,特别是当遇到某些数据在多个结果集中存在重复时。本文将介绍如何使用UNION操作符去重相等的数据,并给出相应的代码示例。
UNION操作符
在MySQL中,UNION操作符用于合并两个或者多个SELECT语句的结果集。其基本语法如下:
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
UNION操作符会将两个SELECT语句的结果集合并为一个结果集。需要注意的是,UNION操作符会去除结果集中的重复数据。
去重相等的数据
在某些情况下,我们可能需要保留重复数据,但是去重相等的数据。例如,假设我们有两个表,一个是employees
,包含员工的ID和姓名,另一个是customers
,包含客户的ID和姓名。我们想要找出既是员工又是客户的人员列表,但是不希望重复显示相同的人员。此时,我们可以使用UNION操作符去重相等的数据。
下面是一个示例的类图,描述了employees
和customers
两个表的结构:
classDiagram
class employees{
employeeID
employeeName
}
class customers {
customerID
customerName
}
示例代码
首先,我们创建employees
表并插入一些数据:
CREATE TABLE employees (
employeeID INT,
employeeName VARCHAR(100)
);
INSERT INTO employees (employeeID, employeeName)
VALUES (1, 'John'),
(2, 'David'),
(3, 'Mary');
接下来,创建customers
表并插入一些数据:
CREATE TABLE customers (
customerID INT,
customerName VARCHAR(100)
);
INSERT INTO customers (customerID, customerName)
VALUES (1, 'John'),
(4, 'Lisa'),
(5, 'David');
现在,我们可以使用UNION操作符来查找既是员工又是客户的人员列表,并去除重复的数据:
SELECT employeeID, employeeName
FROM employees
WHERE employeeName IN (
SELECT customerName
FROM customers
)
UNION
SELECT customerID, customerName
FROM customers
WHERE customerName IN (
SELECT employeeName
FROM employees
);
运行以上代码,将会得到以下结果:
+------------+--------------+
| employeeID | employeeName |
+------------+--------------+
| 1 | John |
| 2 | David |
+------------+--------------+
从结果可以看出,John和David既是员工又是客户,而且他们不会重复出现。
总结
本文介绍了如何使用UNION操作符去重相等的数据。通过使用UNION操作符,我们可以将两个SELECT语句的结果集合并为一个结果集,并去除重复的数据。在某些情况下,我们可能希望保留重复数据,但是去重相等的数据,这时候可以使用UNION操作符来实现。希望本文对你理解并使用UNION操作符有所帮助。
参考文献
- [MySQL UNION Operator](