1. 程式人生 > >不等值連線

不等值連線

到目前為止,本書中所有的連線幾乎都是等值連線,也就是在這種連線的ON子句的條件包含一個等號運算。等值連線是最常用的連線,因為它指定的連線條件是一個表中的一個欄位必須等於另一個表中的一個欄位。

處理等值連線,還存在另外一種不等值連線,也就是在連線的條件中可以使用小於(<)、大於(>)、不等於(<>)等運算子,而且還可以使用LIKE、BETWEEN AND等運算子,甚至還可以使用函式。

例如,如果需要檢索價格小於每個客戶的年齡的五倍值的訂單列表,那麼就可以使用不等值連線,實現的SQL語句如下所示:


SELECT T_Order.FNumber,T_Order.FPrice,T_Customer.FName,T_Customer.FAge FROM T_Order INNER JOIN T_Customer ON T_Order.FPrice< T_Customer.FAge*5 

執行完畢我們就能在輸出結果中看到下面的執行結果:


FNumber FPrice FName FAge

K001 100.00 TOM 21

K001 100.00 MIKE 24

K001 100.00 JACK 30

K001 100.00 TOM 25

N002 100.00 TOM 21

N002 100.00 MIKE 24

N002 100.00 JACK 30

N002 100.00 TOM 25

T002 100.00 TOM 21

T002 100.00 MIKE 24

T002 100.00 JACK 30

T002 100.00 TOM 25

不等值連線產生了大量的查詢結果,因為它是對被連線的兩張表做了笛卡爾運算,所以如果只想檢視與客戶對應的訂單,那麼就要在不等值連線後新增等值連線匹配條件。實現的SQL語句如下:


SELECT T_Order.FNumber,T_Order.FPrice,T_Customer.FName,T_Customer.FAge FROM T_Order INNER JOIN T_Customer ON T_Order.FPrice< T_Customer.FAge*5 and T_Order.FCustomerId=T_Customer.FId 

這裡添加了“and T_Order.FCustomerId=T_Customer.FId”這個條件來限制匹配規則。執行完畢我們就能在輸出結果中看到下面的執行結果:


FNumber FPrice FName FAge

K001 100.00 TOM 21

N002 100.00 MIKE 24