除了傳統的三種聯接查詢外,還有一些特殊的聯接查詢。這篇文章就將對其進行總結,主要有以下幾種特殊的聯接查詢。
1,組合聯接查詢
2,不等聯接查詢
3,多表聯接查詢
組合聯接查詢組合聯接就是聯接條件涉及聯接兩邊的多個列的查詢。當需要根據主鍵-外鍵關系來聯接兩個表,而且主外鍵關系是組合的(即關系基于多個列)時,通常就要使用組合聯接。
例如,假設dbo.Table2表上定義了兩個外鍵(col1列和col2列),引用了dbo.Table1表的col1和col2列,現在要寫一個根據主外鍵關系來聯接兩個表的查詢語句。該查詢語句可以寫成下面這樣:
-- 組合聯接查詢FROM dbo.Table1 AS T1JOIN dbo.Table2 AS T2 ON T1.col1= T2.col1 AND T1.col2= T2.col2不等聯接查詢
聯接條件只包含等號運算符的聯接我們一般稱之為等值聯接。而不等聯接剛好相反,它的聯接條件包含除了等號以外的其它運算符。
作為一個不等聯接查詢的例子,以下查詢語句對Employees表的兩個實例進行聯接,以生成職員之間的唯一配對。
USE TSQLFundamentals2008;GO-- 不等聯接查詢SELECT employees1.empid,employees1.firstname,employees1.lastname,employees2.empid,employees2.firstname,employees2.lastname FROM HR.Employees AS employees1JOIN HR.Employees AS employees2 ON employees1.empid<employees2.empidORDER BY employees1.empid
查詢結果:
如果說上面兩種特殊聯接用得還比較少的話,那么多表聯接查詢用得就比較多。
一個聯接表運算符只對兩個表進行操作,而一條查詢語句可以包含多個聯接。通常,當FROM子句中包含多個表運算符時,表運算符在邏輯上是按從左到右的順序處理的。也就是說,第一個表運算符的結果表將作為第二個表運算符的輸入,第二個表運算符的結果將作為第三個表運算符左邊的輸入,以此類推。
所以如果FROM子句中包含多個聯接,邏輯上只有第一個聯接對兩個基礎表進行操作,而其他聯接則將前一個聯接的結果作為其左邊的輸入。
例如,以下查詢先對Customers表和Orders表進行聯接,以匹配客戶和它們的訂單,再把第一個聯接的結果表和OrderDetails表進行聯接,以匹配訂單和訂單詳情。
SQL查詢代碼:
-- 多表聯接查詢SELECT customers.custid,customers.companyname,orders.orderid,orderdetails.PRoductid,orderdetails.qty FROM Sales.Customers AS customersLEFT JOIN Sales.Orders AS orders ON customers.custid = orders.custidLEFT JOIN Sales.OrderDetails AS orderdetails ON orders.orderid = orderdetails.orderidORDER BY customers.custid;
查詢結果:
新聞熱點
疑難解答