MySQL Union条件

MySQL Union 是一个运算符,它允许我们将来自多个 SELECT 查询的两个或多个结果组合成一个结果集。它带有一个默认功能,可以从结果集中删除重复的行。MySQL 总是使用第一个 SELECT 语句中的列名作为结果集(输出)的列名。

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

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

一、MySQL Union条件 语法

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

SELECT column_list FROM table1  
UNION  
SELECT column_list FROM table2;  

我们可以通过以下图片表示来理解 Union 运算符:

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

二、MySQL Union 与 Join 区别

Union 和 Join 子句不同,因为 union 总是垂直组合结果集,而 join水平附加输出。我们可以通过以下图片表示来理解它:

三、MySQL Union条件 示例

让我们创建两个表,看看 Union 运算符在 MySQL 中是如何工作的。

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 与 ORDER BY

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

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

上述语句执行成功后,我们会得到如下输出,根据得到的分数,对学生姓名和学科进行升序排序:

五、MySQL Union All

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

我们可以通过以下图形表示来理解它:

Union 和 Union All 运算符之间的区别在于“Union”将两个或多个表中的所有不同行(消除重复行)返回到单个输出中。相反,“Union All”返回所有行,包括重复行。

Union All语法

SELECT column_list FROM table1  
UNION ALL  
SELECT column_list FROM table2;  

Union All示例

让我们拿一张我们之前创建的表(student1 和 student2)来了解 Union All 运算符在 MySQL 中的工作原理。

以下语句返回所有学生姓名、科目和分数,包括单个结果中的所有重复行。它还根据使用 ORDER BY 子句获得的分数按升序对学生姓名进行排序。

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

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

热门文章

优秀文章