,如果我有一個像SQL語句:SQL與條件
Select * from Order, OrderDetail
where Order.ID = OrderDetail.OrderID and OrderDetail.Amount > 5
意思循環時的OrderDetail訂單工會找到一行滿足的條件金額> 5的所有行?
請幫我一把。
我的問題是:如果加入2個表後,Do數據庫循環創建的所有行中查找行符合條件。
,如果我有一個像SQL語句:SQL與條件
Select * from Order, OrderDetail
where Order.ID = OrderDetail.OrderID and OrderDetail.Amount > 5
意思循環時的OrderDetail訂單工會找到一行滿足的條件金額> 5的所有行?
請幫我一把。
我的問題是:如果加入2個表後,Do數據庫循環創建的所有行中查找行符合條件。
該查詢通過Order.ID = OrderDetail.OrderID
加入兩個表。在I/O期間還是在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
...這個查詢使用舊的等值連接語法(從訂單,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.
你提到了一個聯盟,我想說明一點,JOIN和UNION是不同的東西。 UNION將行合併成一個集合,而JOIN將合併列合併成一個集合。
我第二.. – Vineeth