麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > 文庫 > 正文

SQL多表查詢合并至單一聲明的常用方式

2024-09-07 22:12:21
字體:
來源:轉載
供稿:網友

  在對跨多個表格的數據進行組合時,有時很難搞清楚要使用哪一個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聲明可以以較少的滯后時間提供出相同的信息。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品午夜未成人免费观看 | 国产一区二区三区视频观看 | 欧美日韩视频网站 | 91久久久久| 日韩黄在线 | 久久日本 | 久久久入口 | 91精品国产日韩91久久久久久360 | 中文字幕在线免费看 | 欧美日韩亚洲视频 | 国产一级淫片免费看 | 一本色道精品久久一区二区三区 | 久久亚洲精选 | 欧美顶级毛片在线播放小说 | 爱视频福利 | 日本在线播放一区二区三区 | 久久精品性视频 | 天天干天天透 | 一本色道久久综合亚洲精品小说 | a黄色片 | 国产精品亚洲一区二区三区在线观看 | 把娇妻调教成暴露狂 | 日本在线一区二区 | 成人在线观看免费爱爱 | 国产精品成人av片免费看最爱 | 亚洲成在人| 国产毛片自拍 | 亚洲视频综合网 | 日韩精品久久久久久久九岛 | 国产999精品久久久久 | 国产成人高潮免费观看精品 | 成人国产高清 | 毛片毛片免费看 | 日韩欧美电影在线观看 | 中文在线观看视频 | 极品大长腿啪啪高潮露脸 | 精品一区二区电影 | 9191色| 日韩黄网站| gogo全球大胆高清人露出91 | a一级黄色大片 |