繁体   English   中英

带条件的SQL

[英]SQL with condition

如果我有一条sql语句,例如:

Select * from Order, OrderDetail 
where Order.ID = OrderDetail.OrderID and OrderDetail.Amount > 5

当与OrderDetail的订单联合查找行满足条件Amount> 5时,这意味着在所有行中循环吗?

请帮帮我。

我的问题是:如果联接2个表之后,请在创建的所有行中执行数据库循环以查找满足条件的行。

该查询通过Order.ID = OrderDetail.OrderID将两个表连接Order.ID = OrderDetail.OrderID 是否在I / O取决于数据库期间或之后过滤结果行。 如果您有一个关于Amount的索引,则可以想象它会查找匹配的行然后合并。 最好看的EXPLAIN查询。

但是您的查询最好表示为:

select *
from Order
join OrderDetail on Order.ID = OrderDetail.OrderID
where OrderDetail.Amount > 5

该语法非常清楚什么是连接条件,什么是行过滤条件。 像这样格式化它也使它更容易阅读!

通常,表被赋予别名,使其更易于阅读:

Select *
from Order o
join OrderDetail od on o.ID = od.OrderID
where od.Amount > 5

改写为...

Select *
from Order, OrderDetail
where Order.ID = OrderDetail.OrderID
and OrderDetail.Amount > 5

...此查询使用的是旧的等值连接语法(来自Order,OrderDetail)。 这与进行连接相同,例如:

Select *
from Order
join OrderDetail ON ID=OrderId
where OrderDetail.Amount > 5

我写这个的方式可能是:

SELECT *
FROM Order o
JOIN OrderDetail od ON o.ID = od.OrderId AND od.Amount > 5

此查询从Order获取所有在OrderDetail中具有匹配记录且金额大于5的记录。


您提到了一个UNION,我想指出的是,JOIN和UNION是不同的东西。 UNION会将合并为一组,而JOIN会将合并为一组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM