Sql 在并集和布尔条件之间进行选择

Sql 在并集和布尔条件之间进行选择,sql,Sql,这需要工会吗 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); 选择供应商id、产品id、产品价格 来自产品 其中prod_price是的,在本例中是相同的。不完全相同如果您的供应商id为1001,且价格小于5,则您将从第一个

这需要工会吗

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);
选择供应商id、产品id、产品价格
来自产品

其中prod_price是的,在本例中是相同的。

不完全相同如果您的供应商id为1001,且价格小于5,则您将从第一个查询中获得两行,从第二个查询中仅获得一行


一般来说,第二种形式更好,因为它既易于阅读,也可能执行得更快。

数据库将为这两种查询生成不同的执行计划。如果没有实际的性能问题,我会使用更简单的查询。将
替换为
联合
会使简单查询变得相当复杂。但这将使复杂的查询难以理解


两个查询之间也有细微的区别。数据库将为第二个查询过滤掉重复项(您使用的是
union
,而不是
union all
),如果您对未选择的列进行过滤,这可能会产生令人惊讶的效果。

在您的示例中,这两者都是相同的


但是第二种方法会更快,因为UNION会对可能较慢的结果集进行排序

您不会得到两行,因为
UNION
会过滤掉重复的结果(而不是
UNION all
SELECT vend_id, prod_id, prod_price
FROM products
WHERE prod_price <= 5
OR vend_id IN (1001,1002);