| 導購 | 订阅 | 在线投稿
分享
 
 
當前位置: 王朝網路 >> mssql >> 對跨多個表格的數據組合時需要用到的SQL
 

對跨多個表格的數據組合時需要用到的SQL

2008-07-19 08:21:46  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
 
  在對跨多個表格的數據進行組合時,有時很難搞清楚要使用哪一個SQL句法。我將在這裏對將多個表格中的查詢合並至單一聲明中的常用方式進行闡述。

  在這篇文章中的樣本查詢符合SQL92 ISO標准。不是所有的數據庫生産商都遵循這項標准,而且很多廠商采取的提升措施會帶來一些意料不到的後果。如果你不確定你的數據庫是不是支持這些標准,你可以參看生産廠商的有關資料。

  SELECT

  一個簡單的SELECT聲明就是查詢多個表格的最基本的方式。你可以在FROM子句中調用多個表格來組合來自多個表格的結果。這裏是一個它如何工作的實例:

  SELECT table1.column1, table2.column2 FROM table1,

  table2 WHERE table1.column1 = table2.column1;

  這個實例中,我使用點號(table1.column1)來指定專欄來自哪一個表格。如果所涉及的專欄只在一個參考的表格中出現,你就不需要加入完整的名稱,但是加入完整名稱會對可讀性起到幫助。

  在FROM子句中表格之間由逗號來分隔,你可以加入所需的任意多的表格,盡管一些數據庫有一個在引入正式的JOIN聲明之前他們可以有效地處理的內容這方面的限制,這個將在下面談到。

  這個句法是一個簡單的INNER JOIN。一些數據庫將它看成與一個外部的JOIN是等同的。WHERE子句告知數據庫哪一個區域要做關聯,而且它返回結果時,就像列出的表格在給定的條件下組合成一個單獨的表格一樣。值得注意的是,你的比較條件並不需要與你作爲結果組返回的專欄相同。在上面的例子中,table1.column1和table2.column1用來組合表格,但是返回的卻是table2.column2。

  你可以在WHERE子句中使用AND關鍵字來將這個功能擴展至多于兩個的表格。你還可以使用這樣的表格組合來限制你的結果而不用實際地從每個表格返回專欄。在下面的例子中,table3與table1匹配,但是我沒有從table3返回任何東西來顯示。我只是確保來自table1的有關專欄存在于table3之中。注意此例中table3需要在FROM子句中被引用。

  SELECT table1.column1, table2.column2 FROM table1,

  table2, table3 WHERE table1.column1 =

  table2.column1 AND table1.column1 = table3.column1;

  然而,要注意的是,這個查詢多個表格的方式是一個暗指的JOIN。你的數據庫可能對事物進行不同的處理,這取決于它所使用的優化引擎。而且,忽略對與WHERE子句的相關特性的定義將會給你帶來不願看到的結果,例如從余下的查詢中返回與每一個可能的結果相關的專欄的rogue域,就像在CROSS JOIN之中一樣。

  如果你習慣于你的數據庫處理這種類型的聲明的方式,且你只對兩個或是少數幾個表格進行組合,一個簡單的SELECT聲明就可以達到目的。

  JOIN

  JOIN的工作方式與SELECT聲明是相同的,它從不同的表格中返回一個帶有專欄的結果組。在暗含的JOIN之上使用外部JOIN的優勢是對你的結果組的更好的控制,而且還可能在涉及很多個表格的情況下提升性能表現。

  

  JOIN的類型有幾種:LEFT,RIGHT,FULL OUTER,INNER和CROSS。你所使用的類型是由你想要看到的結果所決定的。例如,使用LEFT OUTER JOIN將會從列出的第一個表格中返回所有有關的行,而同時如果沒有信息與第一個表格相關的話將潛在地從所列出的第二個表格中加入行。

  在這裏INNER JOIN和暗含的JOIN是不同的,INNER JOIN將只返回那些在兩個表格中都有數據的行。

  對第一個SELECT查詢使用如下JOIN聲明:

  SELECT table1.column1, table2.column2 FROM table1 INNER JOIN table2

  ON table1.column1 = table2.column1;

  子查詢

  子查詢,或叫子選擇聲明,是在一個查詢中將結果組作爲資源使用的一個途徑。他經常被用來對結果進行限制或定義,而不是運行多個查詢或操縱應用軟件之中的數據。有了子查詢,你可以參考表格來決定數據的內含,或是在一些情況下,返回一個專欄,而這個專欄是一個子選擇的結果。

  下面的例子中使用了兩個表格。一個表格中包含了我想要返回的數據,而另一個表格則給出一個比較點來確定什麽數據是我確實感興趣的。

  SELECT column1 FROM table1 WHERE EXISTS

  ( SELECT column1 FROM table2

  WHERE table1.column1 = table2.column1 );

  子查詢很重要的一個方面就是性能表現。便利性是有代價的,它取決于你所使用的表格和聲明的大小,數量和複雜性,還有你可能會允許你的應用軟件做處理工作。每一個查詢在被主查詢作爲資源使用之前,都將被完整地單獨處理。如果可能的話,創造性地使用JOIN聲明可以以較少的滯後時間提供出相同的信息。
 
 
 
上一篇《SQL Server數據庫查詢優化的常用方法總結》
下一篇《教你在SQL Server數據庫中導入導出數據》
 
 
 
日版寵物情人插曲《Winding Road》歌詞

日版寵物情人2017的插曲,很帶節奏感,日語的,女生唱的。 最後聽見是在第8集的時候女主手割傷了,然後男主用嘴幫她吸了一下,插曲就出來了。 歌手:Def...

兄弟共妻,我成了他們夜裏的美食

老鍾家的兩個兒子很特別,就是跟其他的人不太一樣,魔一般的執著。兄弟倆都到了要結婚的年齡了,不管自家老爹怎麽磨破嘴皮子,兄弟倆說不娶就不娶,老父母爲兄弟兩操碎了心...

如何磨出破洞牛仔褲?牛仔褲怎麽剪破洞?

把牛仔褲磨出有線的破洞 1、具體工具就是磨腳石,下面墊一個硬物,然後用磨腳石一直磨一直磨,到把那塊磨薄了,用手撕開就好了。出來的洞啊很自然的。需要貓須的話調幾...

我就是掃描下圖得到了敬業福和愛國福

先來看下敬業福和愛國福 今年春節,支付寶再次推出了“五福紅包”活動,表示要“把欠大家的敬業福都還給大家”。 今天該活動正式啓動,和去年一樣,需要收集“五福”...

冰箱異味産生的原因和臭味去除的方法

有時候我們打開冰箱就會聞到一股異味,冰箱裏的這種異味是因爲一些物質發出的氣味的混合體,聞起來讓人惡心。 産生這些異味的主要原因有以下幾點。 1、很多人有這種習...

《極品家丁》1-31集大結局分集劇情介紹

簡介 《極品家丁》講述了現代白領林晚榮無意回到古代金陵,並追隨蕭二小姐化名“林三”進入蕭府,不料卻陰差陽錯上演了一出低級家丁拼搏上位的“林三升職記”。...

李溪芮《極品家丁》片尾曲《你就是我最愛的寶寶》歌詞

你就是我最愛的寶寶 - 李溪芮 (電視劇《極品家丁》片尾曲) 作詞:常馨內 作曲:常馨內 你的眉 又鬼馬的挑 你的嘴 又壞壞的笑 上一秒吵鬧 下...

烏梅的功效與作用以及烏梅的食用禁忌有哪些?

烏梅,又稱春梅,中醫認爲,烏梅味酸,性溫,無毒,具有安心、除熱、下氣、祛痰、止渴調中、殺蟲的功效,治肢體痛、肺痨病。烏梅泡水喝能治傷寒煩熱、止吐瀉,與幹姜一起制...

什麽是脂肪粒?如何消除臉部脂肪粒?

什麽是脂肪粒 在我們的臉上總會長一個個像脂肪的小顆粒,弄也弄不掉,而且顔色還是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒雖然也是由油脂...

網絡安全治理:國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰受害者

來源:中國青年報 新的攻擊方法不斷湧現,黑客幾乎永遠占據網絡攻擊的上風,我們不可能通過技術手段杜絕網絡攻擊。國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰...

 
 
 
在對跨多個表格的數據進行組合時,有時很難搞清楚要使用哪一個SQL句法。我將在這裏對將多個表格中的查詢合並至單一聲明中的常用方式進行闡述。 在這篇文章中的樣本查詢符合SQL92 ISO標准。不是所有的數據庫生産商都遵循這項標准,而且很多廠商采取的提升措施會帶來一些意料不到的後果。如果你不確定你的數據庫是不是支持這些標准,你可以參看生産廠商的有關資料。 SELECT 一個簡單的SELECT聲明就是查詢多個表格的最基本的方式。你可以在FROM子句中調用多個表格來組合來自多個表格的結果。這裏是一個它如何工作的實例: SELECT table1.column1, table2.column2 FROM table1, table2 WHERE table1.column1 = table2.column1; 這個實例中,我使用點號(table1.column1)來指定專欄來自哪一個表格。如果所涉及的專欄只在一個參考的表格中出現,你就不需要加入完整的名稱,但是加入完整名稱會對可讀性起到幫助。 在FROM子句中表格之間由逗號來分隔,你可以加入所需的任意多的表格,盡管一些數據庫有一個在引入正式的JOIN聲明之前他們可以有效地處理的內容這方面的限制,這個將在下面談到。 這個句法是一個簡單的INNER JOIN。一些數據庫將它看成與一個外部的JOIN是等同的。WHERE子句告知數據庫哪一個區域要做關聯,而且它返回結果時,就像列出的表格在給定的條件下組合成一個單獨的表格一樣。值得注意的是,你的比較條件並不需要與你作爲結果組返回的專欄相同。在上面的例子中,table1.column1和table2.column1用來組合表格,但是返回的卻是table2.column2。 你可以在WHERE子句中使用AND關鍵字來將這個功能擴展至多于兩個的表格。你還可以使用這樣的表格組合來限制你的結果而不用實際地從每個表格返回專欄。在下面的例子中,table3與table1匹配,但是我沒有從table3返回任何東西來顯示。我只是確保來自table1的有關專欄存在于table3之中。注意此例中table3需要在FROM子句中被引用。 SELECT table1.column1, table2.column2 FROM table1, table2, table3 WHERE table1.column1 = table2.column1 AND table1.column1 = table3.column1; 然而,要注意的是,這個查詢多個表格的方式是一個暗指的JOIN。你的數據庫可能對事物進行不同的處理,這取決于它所使用的優化引擎。而且,忽略對與WHERE子句的相關特性的定義將會給你帶來不願看到的結果,例如從余下的查詢中返回與每一個可能的結果相關的專欄的rogue域,就像在CROSS JOIN之中一樣。 如果你習慣于你的數據庫處理這種類型的聲明的方式,且你只對兩個或是少數幾個表格進行組合,一個簡單的SELECT聲明就可以達到目的。 JOIN JOIN的工作方式與SELECT聲明是相同的,它從不同的表格中返回一個帶有專欄的結果組。在暗含的JOIN之上使用外部JOIN的優勢是對你的結果組的更好的控制,而且還可能在涉及很多個表格的情況下提升性能表現。 JOIN的類型有幾種:LEFT,RIGHT,FULL OUTER,INNER和CROSS。你所使用的類型是由你想要看到的結果所決定的。例如,使用LEFT OUTER JOIN將會從列出的第一個表格中返回所有有關的行,而同時如果沒有信息與第一個表格相關的話將潛在地從所列出的第二個表格中加入行。 在這裏INNER JOIN和暗含的JOIN是不同的,INNER JOIN將只返回那些在兩個表格中都有數據的行。 對第一個SELECT查詢使用如下JOIN聲明: SELECT table1.column1, table2.column2 FROM table1 INNER JOIN table2 ON table1.column1 = table2.column1; 子查詢 子查詢,或叫子選擇聲明,是在一個查詢中將結果組作爲資源使用的一個途徑。他經常被用來對結果進行限制或定義,而不是運行多個查詢或操縱應用軟件之中的數據。有了子查詢,你可以參考表格來決定數據的內含,或是在一些情況下,返回一個專欄,而這個專欄是一個子選擇的結果。 下面的例子中使用了兩個表格。一個表格中包含了我想要返回的數據,而另一個表格則給出一個比較點來確定什麽數據是我確實感興趣的。 SELECT column1 FROM table1 WHERE EXISTS ( SELECT column1 FROM table2 WHERE table1.column1 = table2.column1 ); 子查詢很重要的一個方面就是性能表現。便利性是有代價的,它取決于你所使用的表格和聲明的大小,數量和複雜性,還有你可能會允許你的應用軟件做處理工作。每一個查詢在被主查詢作爲資源使用之前,都將被完整地單獨處理。如果可能的話,創造性地使用JOIN聲明可以以較少的滯後時間提供出相同的信息。
󰈣󰈤
 
 
 
  免責聲明:本文僅代表作者個人觀點,與王朝網路無關。王朝網路登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
成熟風韻的Meinv
甜美少女
此女子姿色過人也
愛恨情愁傷哀怨
痞子的甘南日記
疑是銀河落九天
雪域壩上四——純美色
冬日戀歌——西城楊柳弄輕柔
 
>>返回首頁<<
 熱帖排行
 
 
王朝网络微信公众号
微信扫码关注本站微信公众号 wangchaonetcn
 
© 2005- 王朝網路 版權所有