如果我有这样一条sql语句:
Select * from Order, OrderDetail
where Order.ID = OrderDetail.OrderID and OrderDetail.Amount > 5
Order union with OrderDetail 找到满足Amount>5 的行时,是否意味着在所有行中循环??
请帮帮我。
我的问题是:如果在连接 2 个表之后,在创建的所有行中执行数据库循环以查找满足条件的行。
请您参考如下方法:
该查询通过 Order.ID = OrderDetail.OrderID
连接两个表。它是否在 I/O 由数据库决定期间或之后过滤结果行。如果您在 Amount
上有一个索引,可以想象它会查找匹配的行,然后 加入。最好查看查询的 EXPLAIN
。
但是您的查询最好表达为:
select *
from Order
join OrderDetail on Order.ID = OrderDetail.OrderID
where OrderDetail.Amount > 5
这个语法很清楚什么是join条件,什么是行过滤条件。像这样格式化它也更容易阅读!
通常,表格都有别名,使其更易于阅读:
Select *
from Order o
join OrderDetail od on o.ID = od.OrderID
where od.Amount > 5