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;
执行上述语句时,您将获得以下输出,其中包含结果集中存在的所有重复行:
热门文章
优秀文章