簡體   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