MySQL UNION运算符

2024年10月21日 MySQL UNION运算符 极客笔记

MySQL UNION运算符

MySQL联合是一种运算符,允许我们将多个SELECT查询的结果合并为一个结果集。它默认具有删除结果集中重复行的功能。MySQL总是使用第一个SELECT语句的列名作为结果集的列名。

MySQL 联合必须遵循以下基本规则:

  • 所有要使用的表中的列的数量和顺序应该相同。
  • 数据类型必须与每个SELECT查询的相应位置兼容。
  • 在不同的SELECT查询中选择的列名必须按照相同的顺序。

MySQL联合语法

下面是MySQL中联合运算符的语法:

SELECT column_list FROM table1
UNION
SELECT column_list FROM table2;

我们可以通过以下可视化表示来理解并操作联合运算符:

在上面的图片中,我们可以看到Union运算符删除重复的行,并仅返回唯一的行。

Union vs. Join

Union和Join子句是不同的,因为Union总是将结果集合并 垂直地 而Join则是将输出 水平地 追加。我们可以通过以下的可视化表示来理解它:

MySQL Union示例

让我们创建两个表并了解MySQL中Union运算符的工作原理。

表:student1

表格:student2

下面的语句返回一个结果集,其中包含 学生姓名科目 ,通过将两个表合并起来。当您执行这个语句时,您会注意到,如果学生姓名和科目在两个表中具有相同的字段,则每个字段将只列出一次。这是因为Union运算符只返回 不同的值

SELECT stud_name, subject FROM student1
UNION
SELECT stud_name, subject FROM student2;

执行上述语句后,我们将得到以下输出。

在上面的输出中,您可以看到MySQL Union使用结果集的列名称作为第一个SELECT语句的列名称的标题。有时候您想用不同的标题来更改输出的列名称的标题。我们可以通过在第一个SELECT语句中显式使用列别名来实现这一点。

下面的示例更清晰地解释了这一点:

SELECT stud_name AS student_name, subject AS course FROM student1
UNION
SELECT stud_name, subject FROM student2;

将会得到以下输出,其中列名的标题从 ” stud_name ” 改变为 ” student_name “,而 ” subject ” 则改为 ” course “。

MySQL Union with ORDER BY

如果您想使用联合运算符对查询结果进行排序,需要在最后一个SELECT语句中使用ORDER BY子句。我们可以将每个 SQL SELECT查询 放在括号中,然后在最后一个SELECT语句中使用 ORDER BY子句 ,如下面的示例所示:

(SELECT stud_name, subject, marks FROM students)
UNION
(SELECT stud_name, subject, marks FROM student2)
ORDER BY marks;

在上述语句成功执行后,我们将获得以下输出,按照获得的分数对学生姓名和科目进行升序排列:

MySQL联合所有

此运算符将多个SELECT查询的两个或多个结果组合成一个结果集,返回所有行。它不从结果集中删除重复的行。

我们可以用以下的图示表示来理解它:

联合(Union)和联合全(Union All)运算符的区别在于,”Union”从两个或多个表中返回所有不重复的行(去除重复的行)到一个单一的输出中。相反,”Union All”返回所有行,包括重复行。

语法

以下是MySQL中Union运算符的语法:

SELECT column_list FROM table1
UNION ALL
SELECT column_list FROM table2;

示例

让我们来看一个之前创建的表格(student1和student2),并了解MySQL中Union All运算符的工作原理。

下面的语句返回所有学生的姓名、科目和分数,包括所有重复行,并按照获得的分数使用ORDER BY子句按姓名升序排序。

(SELECT stud_name, subject, marks FROM students)
UNION ALL
(SELECT stud_name, subject, marks FROM student2)
ORDER BY marks;

执行上述语句时,您将获得以下输出,其中包含结果集中的所有重复行:

本文链接:http://so.lmcjl.com/news/15921/

展开阅读全文