不等值連接


到目前為止,本書中所有的連接幾乎都是等值連接,也就是在這種連接的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM