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);