SQL

SQL 知识量:22 - 44 - 129

14.1 使用组合查询><

什么是组合查询- 14.1.1 -

在SQL中,允许执行多条select语句,并将结果作为一个查询结果集返回,这样的查询就是组合查询,也叫并或复合查询。

通常在以下情况下使用组合查询:

  • 在一个查询中从不同的表返回结构数据。

  • 对一个表执行多个查询,按一个查询返回数据。

在多数情况下,组合相同表的两个查询所完成的工作与具有多个where子句条件(每个条件用or关键字分隔)的一个查询所完成的工作相同。

使用union- 14.1.2 -

创建组合查询需要使用union关键字,只需要在每个select语句间放上union关键字即可。

例如:查询年龄大于12岁或性别为男性的学生信息。

select * from student where age>=12 
union 
select * from student where sex='male';

结果:

+----+--------+-----+--------+
| id | name   | age | sex    |
+----+--------+-----+--------+
|  2 | Jame   |  12 | male   |
|  7 | Jack   |  13 | male   |
| 10 | Ella   |  12 | female |
|  3 | Bob    |  11 | male   |
|  4 | Robot  |  10 | male   |
|  6 | Toney  |  10 | male   |
|  9 | Bonnie |  11 | male   |
+----+--------+-----+--------+

以上使用组合查询的SQL语句与使用多个where子句的SQL语句完成的工作相同,如果使用多个where子句,SQL语句应修改为:

select * from student where age>=12 or sex='male';

其结果与使用组合查询一样,只是因为没有进行排序,因此,每行的顺序可能不同。

需要注意的是:

  • SQL对组合查询的select语句数量没有限制,但是DBMS可能有,使用时需要查看具体DBMS文档。

  • 对于使用组合查询和多个where子句,谁的速度更快,不同的DBMS可能会不一样,可以通过实际运行来测试一下。

union规则- 14.1.3 -

使用union需要注意以下规则:

  • union必须由两条及两条以上select语句组成,每条语句间使用union分隔。

  • 组合查询的每个查询必须包含相同的列、表达式或聚集函数(它们的次序可以不同)。

  • 列数据类型必须兼容,如果不是完全一样,也至少是DBMS可以隐含转换的类型。