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