任何熟悉SQL和關系數據庫的人都遇見過大量的連接類型。最簡單的說,連接(join)會把兩個表的內容組合到一個虛擬表或者recordset內。假如數據表有效地規一化,或許你會經常從某一個表中選出特定的信息再從另一個表中選出關聯信息。這樣做就需要簡單的“同等連接(equijoin)”。
為了了解實際的連接操作,現在讓我們假設在一個數據庫內存放了某類軟件的相關記錄。某個表(Software)包含了軟件產品的名稱、軟件的版本以及其他有關細節:[image004.gif]
另一個表(Releases)則存儲了軟件發布歷史的信息,其中包括發布日期和發布狀態等(比如測試版、當前版、過時等):[image005.gif]
上表中還包含了一個列,內容指向軟件表中采用的ID號。所以,通過這種索引軟件表的方式,你就知道發布表中software_ID 等于 2的軟件是Rome。
你采用連接組合信息,這樣就不需要在兩個表之間來回折騰了。不過,除了組合信息之外還可以通過連接把有關信息合并。這樣,只要發布表內的software_ID 匹配軟件表內的ID,你就把匹配信息一起放到一個記錄內。
代碼如下: SQL = "SELECT * FROM Software, Releases WHERE software.ID = releases.softwareID"
仔細分析以上的語句,首先注意到兩個表名列在了FROM的后面。再根據所采用的連接,今后你可能還會發現語法會有所變化(或者連接類型有變),但是以上的語法是最基本的,顯示了數據的聯合選擇方式。這里的WHERE 子句用來比較特定的ID值。在Software 表內,存在ID 列。同樣的,Releases 表內則有個software_ID 列。為了明確你在WHERE 子句里要比較的值,你用表名作為前綴,后面還加上了一個點號(.)。
以下是連接選取數據之后的結果:[image006.gif]
注意:在創建連接的時候要仔細考慮選出數據的列。以上代碼采用 * 通配符是為了讓讀者關注于SELECT 代碼行的其他部分。但是,正如你從上圖看到的那樣,你無法選出softwareID 列,因為這一列沒有作為recordset部分的增加值。它的作用就是為WHERE 子句所用。
|