Mysql组合查询-UNION-多个SELECT语句作为单个查询结果返回

来源:互联网 发布:windows telnet服务器 编辑:程序博客网 时间:2024/06/05 10:20

有两种基本情况需要使用组合查询:

1、在单个查询中从不同的表返回结构类似的数据;

2、对单个表执行多个查询,按单个查询返回数据。

使用UNION

创建组合查询很简单,所需要做的只是给出每条SELECT语句,然后在各SELECT语句中间放上UNION。

举例:需要查询价格小于等于5的所有物品的一个列表,而且还想包括供应商1001和1002生产的所有物品(不考虑价格)。当然,可以利用WHERE子句来完成此工作。

1)查询价格小于等于5的所有物品的一个列表

mysql> SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price<=5;
结果:

+---------+---------+------------+
| vend_id | prod_id | prod_price |
+---------+---------+------------+
|    1003 | FC      |       2.50 |
|    1002 | FU1     |       3.42 |
|    1003 | SLING   |       4.49 |
|    1003 | TNT1    |       2.50 |
+---------+---------+------------+
4 rows in set (0.02 sec)

2)查询供应商1001和1002生产的所有物品

mysql> SELECT vend_id,prod_id,prod_price FROM products WHERE vend_id IN (1001,1002);
结果:

+---------+---------+------------+
| vend_id | prod_id | prod_price |
+---------+---------+------------+
|    1001 | ANV01   |       5.99 |
|    1001 | ANV02   |       9.99 |
|    1001 | ANV03   |      14.99 |
|    1002 | FU1     |       3.42 |
|    1002 | OL1     |       8.99 |
+---------+---------+------------+
5 rows in set (0.10 sec)

3)组合返回结果

mysql> SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price<=5    -> UNION    -> SELECT vend_id,prod_id,prod_price FROM products WHERE vend_id IN (1001,1002);
结果:

+---------+---------+------------+
| vend_id | prod_id | prod_price |
+---------+---------+------------+
|    1003 | FC      |       2.50 |
|    1002 | FU1     |       3.42 |
|    1003 | SLING   |       4.49 |
|    1003 | TNT1    |       2.50 |
|    1001 | ANV01   |       5.99 |
|    1001 | ANV02   |       9.99 |
|    1001 | ANV03   |      14.99 |
|    1002 | OL1     |       8.99 |
+---------+---------+------------+
8 rows in set (0.03 sec)

发现组合查询比分开查询的总结果少了一行,这是因为默认情况下UNION会过滤掉重复的行。

使用UNION的规则

1)必须由多条SELECT语句组成,语句中间用关键词UNION分割。

2)UNION的每个查询必须含有相同的列,表达式或者聚集函数(次序无关紧要)

3)列数据类型必须兼容(例如,不同的数值类型或不同的日期类型)

0 0
原创粉丝点击