不等值連線
阿新 • • 發佈:2018-11-08
到目前為止,本書中所有的連線幾乎都是等值連線,也就是在這種連線的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