1.组合查询
多数SQL查询只包含从一个或多个表中返回数据的单条SELECT语句,但是,SQL也允许执行多个查询(多个SELECT语句),并将结果作为查询结果集返回。这些组合查询通常称为并(union)或者复合查询。
主要有两种情况需要使用组合查询:
- 在一个查询中从不同的表返回结构数据
- 对一个表执行多个查询,按一个查询返回数据
2. 创建组合查询
2.1使用UNION
使用UNION很简单,只是给出每条SELECT语句,在各条语句之间放上关键字UNION
例子:我想直到商品表中那些属于商品类别为(7, 15, 20)的商品,还想知道商品名包含‘牛奶’的商品信息
首先,查询出属于商品类别为(7, 15, 20)的商品
SELECT id, name, category_id FROM `goods_goods` WHERE category_id IN (7, 15, 20);
其次,查询出商品包含‘牛奶’字段
SELECT id, name, category_id FROM goods_goods WHERE name LIKE '%牛奶%';
最后组合在一起:
SELECT id, name, category_id FROM `goods_goods` WHERE category_id IN (7, 15, 20) UNION SELECT id, name, category_id FROM goods_goods WHERE name LIKE '%牛奶%';
添加id时显示所有商品,不添加id,会以name去重。
结果:
上条sql语句的效果等于
SELECT id, name, category_id FROM `goods_goods` WHERE category_id IN (7, 15, 20) OR name LIKE '%牛奶%';
这说明,使用UNION有时并不合适,但是对于从多表中检索数据,UNION可能更简单。
2.2 UNION的规则
- UNION必须由两条由两条或者两条以上的SELECT语句组成,语句之间用关键字UNION分隔
- UNION中的每个查询必须包含相同的列、表达式或聚集函数
- 列数据类型必须兼容:类型不必完全相同,但必须是数据库可以隐含转换的类型(如int,flaot;datetime,date)
2.3 包含或取消重复的行
UNION从查询结果集中自动去除了重复的行。换句话说,它的行为与一条SELECT语句中使用WHERE子句条件一样。如果你想返回所有匹配的行,可以使用UNION ALL。
2.4 对组合查询结果排序
在使用UNION组合查询时,只能使用一条ORDER BY 子句,它必须位于最后一条SELECT 语句之后。对于结果集,不存在用一种方式排序一部分,又使用一种方式排序另一部分的情况
SELECT name, category_id, shop_price FROM `goods_goods` WHERE category_id IN (7, 15, 20) UNION ALL SELECT name,
category_id, shop_price FROM goods_goods WHERE name LIKE '%牛奶%' ORDER BY shop_price;
评论列表
已有0条评论