[英]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.