MSSQL基礎教程:多表格查詢
在對跨多個表格的資料進行組合時,有時很難搞清楚要使用哪一個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宣告可以以較少的滯後時間提供出相同的資訊。
JOIN宣告和子查詢
對於JOINS的更詳細的闡述和有關的理念,請參閱 掌握連線的一些概念。關於子查詢的更多內容,請參閱使用SQL子選擇來合併查詢。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-580354/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MSSQL基礎教程:使用SQL子選擇來合併查詢SQL
- MSSQL基礎教程:SELECT語句選項SQL
- 資料庫——基礎(資料庫操作,表格操作)——增加高階查詢資料庫
- 資料庫基礎查詢--單表查詢資料庫
- MySQL資料庫基礎——多表查詢:子查詢MySql資料庫
- SQL的基礎查詢案例SQL
- MySQL基礎查詢語句MySql
- mysql查詢表基礎資訊MySql
- Django:查詢基礎語法Django
- ElasticSearch基礎及查詢語法Elasticsearch
- SQL語言基礎(子查詢)SQL
- MySQL(三)DQL之基礎查詢MySql
- 《MySQL 基礎篇》四:查詢操作MySql
- Linux基礎命令---查詢程式idLinux
- MySQL學習(三) SQL基礎查詢MySql
- SQL語言基礎(高階查詢)SQL
- es 筆記二之基礎查詢筆記
- 基礎二分查詢總結
- MyBatis基礎:MyBatis關聯查詢(4)MyBatis
- javascript基礎(DOM查詢)(二十六)JavaScript
- Linux基礎:檔案查詢findLinux
- Sql介紹 與 Sql基礎查詢SQL
- MSSQL查詢收縮和備份進度SQL
- VUE-表格佈局、表格查詢、工具欄、表格、分頁欄Vue
- excel表格查詢功能在哪裡 excel表格怎麼快速查詢Excel
- 史上最簡單MySQL教程詳解(基礎篇)之多表聯合查詢MySql
- C++多執行緒基礎教程C++執行緒
- Linux基礎命令---host域名查詢工具Linux
- SQL基礎的查詢語句烈鉍SQL
- Docker基礎:查詢映象和執行容器Docker
- 閃回查詢(基礎例項講解)
- mybatis入門基礎(八)-----查詢快取MyBatis快取
- MySQL基礎篇快速記憶和查詢MySql
- 玩轉Bootstrap基礎——表格boot
- PostgreSQL 原始碼解讀(17)- 查詢語句#2(查詢優化基礎)SQL原始碼優化
- 【WEB基礎】HTML & CSS 基礎入門(7)表格WebHTMLCSS
- 【PyTorch基礎教程7】多維特徵inputPyTorch特徵
- mysql查詢結果多列拼接查詢MySql