当前位置:嗨网首页>书籍在线阅读

15-合并查询结果

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

8.9 合并查询结果

本节视频教学录像:2分钟

MySQL中使用UNION关键字,可以将多个SELECT结果集合并为单个结果集,但要求参加合并的结果集对应的列数和数据类型必须相同。在第一个SELECT语句中被使用的列名称也被用于结果的列名称。语法格式如下。

SELECT ... UNION [ALL | DISTINCT] SELECT ... [UNION [ALL | DISTINCT] SELECT ...]

语法中不使用关键词ALL,则所有返回的行都是唯一的,就好像对整个结果集合使用了DISTINCT一样。如果指定了ALL,SELECT语句中得到所有匹配的行都会出现。DISTINCT关键词是一个自选词,不起任何作用,但是根据SQL标准的要求,在语法中允许采用。

【范例8-46】

查询女生的信息或年龄大于20的学生信息。

MySQL> select -> from student -> where ssex='女' -> union -> select -> from student -> where sage>20;

结果如下。

+-----+-------+------+------+--------+ |sno|sname|ssex|sage|sdept | +-----+-------+------+------+--------+ | 1|刘敏 |女 | 19|计算机| | 4|孟欣 |女 | 21|信管 | | 2|周松 |男 | 21|计算机| +-----+-------+------+------+--------+ 3 rows in set (0.09 sec)

可以看一下参加合并的两个查询单独执行的结果。

MySQL> select * -> from student -> where ssex='女'; +-----+-------+------+------+--------+ | sno|sname|ssex|sage|sdept | +-----+-------+------+------+--------+ | 1|刘敏 |女 | 19|计算机| | 4|孟欣 |女 | 21|信管 | +-----+-------+------+------+--------+ 2 rows in set (0.00 sec)

年龄大于20岁的学生信息。

MySQL> select * -> from student -> where sage>20; +-----+-------+------+------+--------+ |sno|sname|ssex|sage|sdept | +-----+-------+------+------+--------+ | 2|周松 |男 | 21|计算机| | 4|孟欣 |女 | 21|信管 | +-----+-------+------+------+--------+ 2 rows in set (0.00 sec)

可以看到,学生孟欣的记录在两个查询中都出现了,但合并的结果只出现了一次,因为没有加关键字ALL,系统自动删除了所有重复的行。

范例中如果加上关键字ALL, 结果如下。

MySQL> select -> from student -> where ssex='女' -> union all -> select -> from student -> where sage>20; +-----+-------+------+------+--------+ |sno|sname|ssex|sage|sdept | +-----+-------+------+------+--------+ | 1|刘敏 |女 | 19|计算机| | 4|孟欣 |女 | 21|信管 | | 2|周松 |男 | 21|计算机| | 4|孟欣 |女 | 21|信管 | +-----+-------+------+------+--------+ rows in set (0.00 sec)

加入关键字ALL之后,两个查询中所有符合条件的记录都出现在结果中,没有消除重复记录。