带条件的SQL

时间:2011-12-21 04:44:49

标签: sql

如果我有一个sql语句,如:

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

是否意味着当订单联合使用OrderDetail查找行符合条件时所有行中的循环数量> 5 ??

请帮帮我。

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

2 个答案:

答案 0 :(得分:4)

该查询通过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

答案 1 :(得分:3)

重写为......

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

...此查询使用旧的equijoin语法(来自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

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


你提到了一个UNION,我想说明一个JOIN和UNION是不同的东西。 UNION会将合并到一个集合中,而JOIN会将合并到一个集合中。