使用ISQL執行SELECT查詢
當你安裝SQL Sever時,你同時安裝了一個叫作ISQL/w的應用程序。ISQL/w允許你執行交互的SQL查詢。在把查詢包括到你的ASP網頁中之前,用ISQL/w對其進行測試是非常有用的。
注意:
在這本書的第一部份,你學習了怎樣安裝和配置Microsoft SQL Sever 。如果沒有安裝SQL Sever或者SQL Sever不能運行,請參閱第三章“安裝和使用SQL Sever”。
選擇任務上SQL Sever程序組中的ISQL_w以啟動該程序。程序啟動時,首先會出現一個對話框,要求輸入服務器信息和登錄信息(見圖10.1)。在Sever框中,輸入你的SQL服務器的名字。如果服務器正運行在本地計算機上,服務器名字就是你計算機的名字。
在登錄信息框中,輸入一個登錄帳號和密碼或選擇使用“可信連接”,然後單擊Connect按鈕。
注意:
如果你將SQL Sever配置為使用完整安全或混合安全,那麼你可以使用可信連接。如果你使用標准安全,你則需要提供用戶帳號和
密碼。要了解更多信息,參見第三章。
如果一切正常,在你單擊連接按鈕後會出現一個查詢窗口,如圖10.2所示。(如果有異常,請參考第三章)
在執行查詢之前,你需要選擇數據庫。安裝 SQL Sever時你已為自己創建了一個數據庫,SQL Sever還有許多系統數據庫,如master,model,msdb,和tempdb。
方便的是,SQL Sever帶有一個特殊的名為pubs的例子數據庫。庫 pubs中包含供一個虛擬的出版商使用的各個表。文檔中所有的例子程序都是針對這個庫來設計的。本書中的許多例子也使用這個數據庫。
在查詢窗口頂部的DB下拉框中選擇數據庫pubs,這樣你就選擇了數據庫。你所有的查詢都將針對這個庫中的各個表來執行。現在你可以執行你的第一個查詢了。這真讓人興奮!
你的第一個查詢將針對一個名為autrors的表,表中包含所有為某個虛擬出版商工作的作者的相關數據。單擊查詢窗口並輸入以下的語句:
SELECT phone FROM authors WHERE au_name="Ringer"
輸入完成後,單擊執行查詢按鈕(一個綠色三角形,看起來像VCR播放鍵)。單擊此按鈕後,任何出現在查詢窗口中的語句均會被執
行。查詢窗口會自動變成結果顯示窗口,你可以看到查詢的結果(見圖10.3)。
你看到的查詢結果也許與圖10.3所示的不同。在SQL Sever的不同版本中,庫pubs中的數據會有所不同。對SQL Sever 6.5來說,
將會找到兩條記錄。結果顯示窗口中應顯示如下內容:
phone
……………….
801 826_0752
801 826_0752
(2 row(s) affected)
你所執行的SELECT語句從表authors中取出所有名字為Ringer的作者的電話號碼。
你通過在WHERE子句中使用特殊的選擇條件來限
制查詢的結果。你也可以忽略選擇條件,從表中取出所有作者的電話號碼。要做到這一點,單擊Query標簽,返回到查詢窗口,輸
入以下的SELECT語句:
SELECT Phone FROM authors
這個查詢執行後,會取出表authors中的所有電話號碼(沒有特定的順序)。如果表authors中包含一百個電話號碼,會有一百個記
錄被取出,如果表中有十億個電話號碼,這十億條記錄都會被取出(這也許需要一些時間)。
表authrs的字段包括姓,名字,電話號碼,地址,城市,州和郵政編碼。通過在SELECT語句的第一部份指定它們,你可以從表中取
出任何一個字段。你可以在一個SELECT語句中一次取出多個字段,比如:
SELECT au_fname ,au_lname, phone FROM authors
這個SELECT語句執行後,將取出這三個列的所有值。下面是這個查詢的結果的一個示例(為了節省紙張,只顯示查詢結果的一部
分,其余記錄用省略號代替):
au_fname au_lname phone
………………………………………………………………………….
Johnson White 408 496_7223
MarjorIE Green 415 986_7020
Cheryl Carson 415 548_7723
Michael O’Leary 408 286_2428
…
(23 row(s) affected)
在SELECT語句中,你需要列出多少個字段,你就可以列出多少。不要忘了把字段名用逗號隔開。你也可以用星號(*)從一個表中
取出所有的字段。這裡有一個使用星號的例子:
SELECT * FROM authors
這個SELECT語句執行後,表中的所有字段的值都被取出。你會發現你將在SQL查詢中頻繁使用星號。
技巧:
你可以使用星號來查看一個表的所有列的名字。要做到這一點,只需要在執行完SELECT語句後看一下查詢結果的列標題。
操作多個表
到現在為止,你只嘗試了用一句SQL查詢從一個表中取出數據。你也可以用一個SELECT語句同時從多個表中取出數據,只需在
SELECT語句的FROM從句中列出要從中取出數據的表名稱即可:
SELECT au_lname ,title FROM authors, titles
這個SELECT語句執行時,同時從表authors和表titles中取出數據。從表authors中取出所有的作者名字,從表titles中取出所有
的書名。在ISQL/w程序中執行這個查詢,看一下查詢結果。你會發現一些奇怪的出乎意料的情況:作者的名字並沒有和它們所著的
書相匹配,而是出現了作者名字和書名的所有可能的組合,這也許不是你所希望見到的。
出了什麼差錯?問題在於你沒有指明這兩個表之間的關系。你沒有通過任何方式告訴SQL如何把表和表關聯在一起。由於不知道如何
關聯兩個表,服務器只能簡單地返回取自兩個表中的記錄的所有可能組合。
要從兩個表中選出有意義的記錄組合,你需要通過建立兩表中字段的關系來關聯兩個表。要做到這一點的途徑之一是創建第三個
表,專門用來描述另外兩個表的字段之間的關系。
表authors有一個名為au_id的字段,包含有每個作者的唯一標識。表titles有一個名為title_id的字段,包含每個書名的唯一標
識。如果你能在字段au_id和字段title_id 之間建立一個關系,你就可以關聯這兩個表。數據庫pubs中有一個名為titleauthor的
表,正是用來完成這個工作。表中的每個記錄包括兩個字段,用來把表titles和表authors關聯在一起。下面的SELECT語句使用了
這三個表以得到正確的結果:
SELECT au_name,title FROM authors,titles,titleauthor
WHERE authors.au_id=titleauthor.au_id
AND titles.title_id=titleauthor.title_id
當這個SELECT語句執行時,每個作者都將與正確的書名相匹配。表titleauthor指明了表authors和表titles的關系,它通過包含
分別來自兩個表的各一個字段實現這一點。第三個表的唯一目的是在另外兩個表的字段之間建立關系。它本身不包含任何附加數
據。
注意在這個例子中字段名是如何書寫的。為了區別表authors和表titles中相同的字段名au_id,每個字段名前面都加上了表名前
綴和一個句號。