logo图片
MySql教程
MySql用户管理
MySQL数据库
MySql表格和视图
MySQL查询
MySQL索引
MySQL子句
MySQL授权
MySql控制流
MySQL条件
MySQL连接
MySQL键
MySQL触发器
MySQL聚合函数
MySQL常用
MySQL正则表达式
MySql差异性

MySQL Union

MySQL Union是一种运算符,它使我们可以将来自多个SELECT查询的两个或多个结果组合到单个结果集中。它具有默认功能,该功能可从结果集中删除 重复行。 MySQL始终在第一个SELECT语句中使用列名,即结果集(输出)的列名。
MySQL 联盟必须遵循以下基本规则:
要使用的所有表中列的数量和顺序应相同。 数据类型必须与每个选择查询的相应位置兼容。 在不同的SELECT查询中选择的列名必须具有相同的顺序。

MySQL Union语法

以下是MySQL中Union运算符的语法:
SELECT column_list FROM table1
UNION
SELECT column_list FROM table2;
我们可以使用以下直观表示来了解Union运算符:
MySQL Union
在上图,我们可以看到Union运算符删除了重复的行并仅返回唯一的行。

Union vs. Join

Union和Join子句不同因为联合总是将结果集 垂直组合在一起,而联接则将输出 水平附加。我们可以通过以下视觉表示来理解它:
MySQL Union

MySQL Union Example

让我们创建两个表,看看Union运算符在MySQL中如何工作。
表: student1
MySQL Union
表: student2
MySQL Union
以下语句通过组合两个表,返回包含 学生姓名主题的结果集。当您执行此语句时,您会注意到,如果两个表中的学生姓名和科目具有相同的字段,则每个学生名将被列出一次。这是因为Union运算符仅返回 不同的值。
SELECT stud_name, subject FROM student1
UNION
SELECT stud_name, subject FROM student2;
执行上面的语句后,我们将获得以下输出。
MySQL Union
在上面的输出,您可以看到MySQL Union使用结果集的列名称的 标题与第一个 SELECT语句。有时您想用另一个标题来更改输出的列名的标题。我们可以通过在第一个SELECT语句中显式使用 alias 列来完成此操作。
以下示例对其进行了更清晰的说明:
SELECT stud_name AS student_name, subject AS course FROM student1
UNION
SELECT stud_name, subject FROM student2;
在列名的标题从" stud_name "更改为" student_name "和" subject ""时,分别指向" 课程"将显示以下输出。
MySQL Union

带有ORDER BY的MySQL联合

如果要使用联合运算符对查询返回的结果进行排序,则需要在最后一个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 Union

MySQL Union All

此运算符通过将来自多个SELECT查询的两个或多个结果合并为一个操作符来返回所有行结果集。它不会从结果集中删除重复的行。
我们可以通过以下图形表示来理解它:
MySQL Union
Union和Union All运算符之间的区别在于," Union"将来自两个或更多表的所有不同行(消除重复行)返回到单个输出中。相反,"全部联合"返回所有行,包括重复的行。
语法
以下是MySQL中Union运算符的语法:
SELECT column_list FROM table1
UNION ALL
SELECT column_list FROM table2;
示例
让我们看一下我们之前创建的表(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;
执行上面的语句时,将获得以下输出,其中包含结果集中存在的所有重复行:
MySQL Union
昵称: 邮箱:
Copyright © 2020 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4