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