熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

跟我學SQL:查詢多個表格

2013-11-15 14:40:43  來源: SQL Server 

  在對跨多個表格的數據進行組合時有時很難搞清楚要使用哪一個SQL句法我將在這裡對將多個表格中的查詢合並至單一聲明中的常用方式進行闡述
  在這篇文章中的樣本查詢符合SQL ISO標准不是所有的數據庫生產商都遵循這項標准而且很多廠商采取的提升措施會帶來一些意料不到的後果如果你不確定你的數據庫是不是支持這些標准你可以參看生產廠商的有關資料
  
  SELECT
  
  一個簡單的SELECT聲明就是查詢多個表格的最基本的方式你可以在FROM子句中調用多個表格來組合來自多個表格的結果這裡是一個它如何工作的實例
  
  SELECT lumn lumn FROM table table WHERE lumn = lumn;
  
  這個實例中我使用點號(lumn)來指定專欄來自哪一個表格如果所涉及的專欄只在一個參考的表格中出現你就不需要加入完整的名稱但是加入完整名稱會對可讀性起到幫助
  
  在FROM子句中表格之間由逗號來分隔你可以加入所需的任意多的表格盡管一些數據庫有一個在引入正式的JOIN聲明之前他們可以有效地處理的內容這方面的限制這個將在下面談到
  
  這個句法是一個簡單的INNER JOIN一些數據庫將它看成與一個外部的JOIN是等同的WHERE子句告知數據庫哪一個區域要做關聯而且它返回結果時就像列出的表格在給定的條件下組合成一個單獨的表格一樣值得注意的是你的比較條件並不需要與你作為結果組返回的專欄相同在上面的例子中lumn和lumn用來組合表格但是返回的卻是lumn
  
  你可以在WHERE子句中使用AND關鍵字來將這個功能擴展至多於兩個的表格你還可以使用這樣的表格組合來限制你的結果而不用實際地從每個表格返回專欄在下面的例子中table與table匹配但是我沒有從table返回任何東西來顯示我只是確保來自table的有關專欄存在於table之中注意此例中table需要在FROM子句中被引用
  
  SELECT lumn lumn FROM table table table WHERE lumn = lumn AND lumn = lumn;
  
  然而要注意的是這個查詢多個表格的方式是一個暗指的JOIN你的數據庫可能對事物進行不同的處理這取決於它所使用的優化引擎而且忽略對與WHERE子句的相關特性的定義將會給你帶來不願看到的結果例如從余下的查詢中返回與每一個可能的結果相關的專欄的rogue域就像在CROSS JOIN之中一樣
  
  如果你習慣於你的數據庫處理這種類型的聲明的方式且你只對兩個或是少數幾個表格進行組合一個簡單的SELECT聲明就可以達到目的
  
  
  
  JOIN
  
  JOIN的工作方式與SELECT聲明是相同的它從不同的表格中返回一個帶有專欄的結果組在暗含的JOIN之上使用外部JOIN的優勢是對你的結果組的更好的控制而且還可能在涉及很多個表格的情況下提升性能表現
  
  JOIN的類型有幾種LEFTRIGHTFULL OUTERINNER和CROSS你所使用的類型是由你想要看到的結果所決定的例如使用LEFT OUTER JOIN將會從列出的第一個表格中返回所有有關的行而同時如果沒有信息與第一個表格相關的話將潛在地從所列出的第二個表格中加入行
  
  在這裡INNER JOIN和暗含的JOIN是不同的INNER JOIN將只返回那些在兩個表格中都有數據的行
  
  對第一個SELECT查詢使用如下JOIN聲明
  
  SELECT lumn lumn FROM table INNER JOIN table
  ON lumn = lumn;
  
  
  
  子查詢
  子查詢或叫子選擇聲明是在一個查詢中將結果組作為資源使用的一個途徑他經常被用來對結果進行限制或定義而不是運行多個查詢或操縱應用軟件之中的數據有了子查詢你可以參考表格來決定數據的內含或是在一些情況下返回一個專欄而這個專欄是一個子選擇的結果
  
  下面的例子中使用了兩個表格一個表格中包含了我想要返回的數據而另一個表格則給出一個比較點來確定什麼數據是我確實感興趣的
  
  SELECT column FROM table WHERE EXISTS ( SELECT column FROM table WHERE lumn = lumn );
  
  子查詢很重要的一個方面就是性能表現便利性是有代價的它取決於你所使用的表格和聲明的大小數量和復雜性還有你可能會允許你的應用軟件做處理工作每一個查詢在被主查詢作為資源使用之前都將被完整地單獨處理如果可能的話創造性地使用JOIN聲明可以以較少的滯後時間提供出相同的信息

From:http://tw.wingwit.com/Article/program/SQLServer/201311/22159.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.