MySQL中UNION定义

在MySQL数据库中,UNION是一种用于合并多个查询结果的操作符。这个操作符可以将两个或多个SELECT语句的结果集合并为一个结果集,并去除重复的行。它的语法结构如下:

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

在这个语法结构中,我们需要注意以下几点:

  • column_name(s):表示需要查询的字段名,可以是一个或多个字段。
  • table1table2:表示需要查询的表名,可以是一个或多个表。

UNION的工作原理

UNION操作符的工作原理非常简单明了。当我们使用UNION操作符时,它会将第一个SELECT语句和第二个SELECT语句的结果集合并在一起,并自动去除重复的行。举个例子来说,我们有两个表,customerssuppliers,它们的结构如下:

customers表:

id name city
1 John New York
2 Lisa Paris
3 Michael London

suppliers表:

id name city
1 James Berlin
2 Lisa Paris
3 Michael London

如果我们执行以下的SQL语句:

SELECT name, city FROM customers
UNION
SELECT name, city FROM suppliers;

那么,我们将会得到以下结果:

name city
John New York
Lisa Paris
Michael London
James Berlin

从上面的例子中,我们可以看到,UNION操作符将两个表的结果集合并在了一起,并去除了重复的行。

UNION ALL

除了UNION操作符外,MySQL还提供了另一个类似的操作符,叫做UNION ALL。与UNION操作符不同的是,UNION ALL不会去除重复的行,它直接将所有的行合并在一起。这个操作符的语法结构与UNION操作符相同。

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

使用UNION ALL操作符可能会导致结果集中包含重复的行,因此在使用时要格外小心。

代码示例

让我们通过一个具体的例子来演示如何使用UNION操作符。

假设我们有两个表,studentsteachers,它们的结构如下:

students表:

CREATE TABLE students (
  id INT,
  name VARCHAR(50),
  score INT
);

teachers表:

CREATE TABLE teachers (
  id INT,
  name VARCHAR(50),
  subject VARCHAR(50)
);

现在,我们需要查询学生和教师的姓名,并将结果合并在一起。我们可以使用以下SQL语句:

SELECT name FROM students
UNION
SELECT name FROM teachers;

这个查询语句将返回所有学生和教师的姓名,并去重。

关系图

下面是一个使用mermaid语法中的erDiagram标识的关系图:

erDiagram
    CUSTOMER ||--o{ ORDER : places
    ORDER ||--|{ LINE-ITEM : contains
    CUSTOMER }|--|| ADDRESS : "billing address"
    CUSTOMER }|--|| SHIPPING-ADDRESS : "shipping address"
    ORDER |o--o{ PRODUCT : "ordered products"
    PRODUCT }|--|{ PRODUCT-CATEGORY : "falls into"
    PRODUCT-CATEGORY }|--|| CATEGORY : "categories"

结语

在MySQL中,UNION操作符可以帮助我们将多个查询结果集合并为一个结果集,并且去除重复的行。通过这篇文章的介绍,相信你对UNION的定义和使用已经有了更清晰的认识。希望这篇文章对你有所帮助!