sql課后《習題》答案_第1頁
sql課后《習題》答案_第2頁
sql課后《習題》答案_第3頁
sql課后《習題》答案_第4頁
sql課后《習題》答案_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第1章SQLServer概述

1、有個用戶的計算機不能連接到中心機房的SQLServer2000上。你在調(diào)試過程中發(fā)現(xiàn)這個

用戶的計算機的網(wǎng)絡功能是正常的,而且其他用戶都能正常地連接到SQLServer2000。

下面的哪些工具有助于你診斷和解決該問題?(多選)

A.EnterpriseManager

B.ServerNetworkUtility

C.Profiler

D.QueryAnalyzer

E.ClientNetworkUtility

答:B和E

2、你在SQLServer2000創(chuàng)建了酒店管理系統(tǒng)的數(shù)據(jù)庫HotelDB,并創(chuàng)建了表Custlnfo。當

下面的哪些數(shù)據(jù)庫被刪除的情況下,仍能正確地執(zhí)行“SELECT*FROMCustlnfo?

A.Model

B.Tempdb

C.Msdb

D.Master

E.Pubs

答:A、C、E

3、你正在使用SQLServer2000開發(fā)銀行交易系統(tǒng),為了保證商業(yè)數(shù)據(jù)在網(wǎng)絡傳輸(用

TCP/IP協(xié)議)時不會被竊取,你在SQLServer2000中啟用了網(wǎng)絡加密功能。請問該功能

在哪一層被實現(xiàn)?

A.TCP/IP協(xié)議軟件

B.超級套接字層

C.開放式數(shù)據(jù)服務

D.關系引擎

E.存儲引擎

答:B

4、你正在使用SQLServer2000開發(fā)超市收銀系統(tǒng)。在客戶端編寫軟件時使用SQL語句

“SELECT*FROMProducts”來查詢商品的信息,但是不小心把Products輸入成Product。

請問該錯誤在哪一層被發(fā)現(xiàn)?

A.客戶端的數(shù)據(jù)庫API

B.客戶端的NET-LIBRARY

C.服務器端的開放式數(shù)據(jù)服務

D.服務器端的關系引擎

E.服務器端的存儲引擎

答:D

5、你要為中小型商場開發(fā)一個商場收銀軟件,該軟件由多個收銀員在各自的收銀臺使用。

后端數(shù)據(jù)庫是SQLServer2000,所有收銀員的收銀信息集中存放在幾個表內(nèi)。在采用兩

層架構(2-Tier)的軟件開發(fā)時,商場收銀軟件需要數(shù)據(jù)庫的帳號和密碼(SQLServer認

證)或Windows認證才能連接和訪問數(shù)據(jù)庫,就象SQLServer2000的查詢分析器在剛運

行的時候要求你輸入帳號和密碼或使用Windows認證才能訪問數(shù)據(jù)庫。顯然,你希望只

有商場收銀軟件才有權力訪問數(shù)據(jù)庫,而收銀員不應當有使用查詢分析器等其它軟件直

接修改數(shù)據(jù)庫數(shù)據(jù)的權力,否則可能會導致貪污和惡意破壞的發(fā)生。所以,

(1)軟件使用的數(shù)據(jù)庫帳號采用Windows認證還是SQLServer認證,如何實現(xiàn)該目

標?

(2)在采用三層架構(3-Tier)的軟件開發(fā)時,客戶端程序會不會出現(xiàn)該問題?

答:(1)不能采用Windows認證,只能采用SQLServer認證。因為商場收銀軟件若

采用Windows認證,收銀員登錄到Windows系統(tǒng)后,不光商場收銀軟件可以訪問數(shù)據(jù)庫,

收銀員也可以用SQLServer2000的查詢分析器等軟件以Windows認證方式來訪問數(shù)據(jù)

庫。

如果采用SQLServer認證方式,商場收銀軟件需要帳號和密碼,當然這不能

由收銀員來提供。一種典型的做法是:將數(shù)據(jù)庫的帳戶和密碼放在商場收銀軟件中(或在

Windows的注冊表中),并禁止在數(shù)據(jù)庫中改動該帳號和密碼.帳號和密碼在軟件中要適

當加密,就很難從軟件的可執(zhí)行代碼內(nèi)獲得帳號和密碼,這種安全級別對一般的商場收銀

系統(tǒng)已經(jīng)足夠。為了檢驗收銀員的身份,你要自己編寫管理收銀員的軟件代碼,在收銀軟

件剛開始運行時要求輸入收銀員的代號和密碼,這些代號和密碼可以放在數(shù)據(jù)庫的一個表

中。

(2)在采用三層架構(3-Tier)的軟件開發(fā)時,客戶端程序不會出現(xiàn)該問題。

三層架構分為:客戶端(收銀員操作界面),應用服務器(商業(yè)邏輯),數(shù)據(jù)庫服務器(SQL

Server2000)??蛻舳酥幌驊梅掌靼l(fā)出請求,應用服務器接收請求后,根據(jù)商業(yè)邏輯

對數(shù)據(jù)庫服務器發(fā)出命令來訪問數(shù)據(jù)庫,最后將結(jié)果傳送給客戶端。因為客戶端不直接訪

問數(shù)據(jù)庫服務器,它不需要數(shù)據(jù)庫服務器的帳號和密碼。

6、已經(jīng)在SQLServer中為Windows2000用戶創(chuàng)建了一個新的登錄賬戶。希望該組的成員能

夠使用SQLServer,那么你還需要完成其他哪些額外的安全設置任務?

答:首先,必須把Windows2000用戶組添加到希望用戶訪問的數(shù)據(jù)庫中,之后,將

權限授予希望用戶訪問的數(shù)據(jù)庫對象。

7、希望瀏覽SQLServer數(shù)據(jù)庫中對象的元數(shù)據(jù)。那么你應該使用什么方法?

答:可以查詢信息架構視圖、執(zhí)行系統(tǒng)存儲過程或使用系統(tǒng)函數(shù)。也可以直接查詢系

統(tǒng)表,但不推薦使用這種方法,原因是在產(chǎn)品的后續(xù)版本中,這些表可能會發(fā)生變化。

8、希望引用同一個服務器上的不同數(shù)據(jù)庫中的兩個表。從Inventory數(shù)據(jù)庫中,希望引用

Sales數(shù)據(jù)庫中的某個表。那么如何在?個查詢中引用Sales數(shù)據(jù)庫中的該表?

答:應該使用完整修飾名稱引用Sales數(shù)據(jù)庫中的表。例如,應該指定

Sales.dbo.tablename或Sales.tablename?

第2章創(chuàng)建和管理數(shù)據(jù)庫

1.數(shù)據(jù)庫操作時服務器突然掉電,當重新啟動后,您如何恢復已經(jīng)完成但還沒把數(shù)據(jù)寫入

硬盤的事務,以及正在進行一半的事務?

A、運行ROLLFORWARDALLTRANSACTION

B、不用。SQLServer2000自動恢復,即通過日志恢復所有已經(jīng)完成但還沒把數(shù)據(jù)寫

入硬盤的事務到硬盤,并撤消正在進行一半的事務。

C、先備份事務日志,再將數(shù)據(jù)庫恢復到上一完全數(shù)據(jù)庫備份,再把剛備份的事務日

志恢復到當前數(shù)據(jù)庫的日志中。

D、沒有辦法。只能使用數(shù)據(jù)庫以前的備份。

答:B

9、你使用SQLServer2000數(shù)據(jù)庫開發(fā)一個小型的酒店管理系統(tǒng)。你用下面的語句創(chuàng)建數(shù)據(jù)庫:

CREATEDATABASEJiuDian

ONPRIMARY

(NAME=JiuDianData,

HLENAME='c:\cyjUiuDianData.mdf,

SIZE=100,

MAXSIZE=200,

FILEGROWTH=10)

LOGON

(NAME=JiuDianLog,

FILENAME='c:\cyj\JiuDianLog\

SIZE=50,

MAXSIZE=100,

FILEGROWTH=10

現(xiàn)在酒店營業(yè)的數(shù)據(jù)為150MB。對其中50%的數(shù)據(jù)進行備份并刪除后,要把數(shù)據(jù)庫

立即縮小為初始的大小(即100MB)。下面哪條語句能夠?qū)崿F(xiàn)該功能?

A.DBCCSHRINKFILE(JiuDianData,NOTRUNCATE)

B.DBCCSHRINKDATABASE(JiuDianData,25)

C.DBCCSHRINKDATABASE(JiuDianData,100)

D.ALTERDATABASEJiuDianDataSETAUTOSHRINKON

答:B

10、用SQL語句創(chuàng)建滿足如下要求的數(shù)據(jù)庫:

(1)數(shù)據(jù)庫名稱為Library;

(2)主文件組有兩個數(shù)據(jù)文件。

第一個數(shù)據(jù)文件:邏輯名為LibraryDatal,文件名為“c:\cyj\LibraryData_l.mdf,,文件初始大

小為50MB,文件的最大大小不受限制,文件的增長率為20%。

第二個數(shù)據(jù)文件:邏輯名為LibraryData2,文件名為“c:\cyj\LibraryData_2.ndF',文件初始大

小為50MB,文件的最大大小不受限制,文件的增長率為10MB?

(3)日志只有一個數(shù)據(jù)文件,邏輯名為LibraryLog,文件名為“c:\cyj\LibraryLog.ld『,文

件初始大小為10MB,文件的最大大小為50MB,文件的增長率為10MB;

答:

CREATEDATABASELibrary

ONPRIMARY(NAME=LibraryData1,

FILENAME='c:\cyj\LibraryData_l.mdf,

SIZE=50MB,MAXSIZE=UNLIMITED,

FILEGROWTH=20%),

(NAME=LibraryData2,

FILENAME='c:\cyj\Library_2,ndf,

SIZE=50MB,MAXSIZE=UNLIMITED,

FILEGROWTH=10)

LOGON

(NAME=LibraryLog,

FILENAME='c:\cyj\LibraryLog.ldf,

SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=10MB)

11、您現(xiàn)在有四個物理硬盤來存放一個很大的數(shù)據(jù)庫,該數(shù)據(jù)庫存放大量的銷售數(shù)據(jù)。數(shù)

據(jù)庫主要用于數(shù)據(jù)讀取和統(tǒng)計,以便市場經(jīng)理決定經(jīng)營策略。為了提高數(shù)據(jù)的讀取性能,

數(shù)據(jù)庫內(nèi)的表進行了大量索引。如何生成數(shù)據(jù)庫,使性能最佳?

答:可以創(chuàng)建用戶自定義的文件組fgroupl,同時分別在三個硬盤上創(chuàng)建三個文件

(Datal.ndfxData2.ndf和Data3.ndf),并蔣這三個文件指派到文件組fgroupl中。然

后,指定文件組fgroupl為默認的文件組。在創(chuàng)建表時,如果沒有特別聲明,都自動創(chuàng)建

在默認的文件組,以后存放在表中的數(shù)據(jù)將自動分散在三個硬盤上。這樣,以后對表中數(shù)

據(jù)的查詢也將分散到三個磁盤上,因而性能得以提高。另外,在第四個硬盤創(chuàng)建日志文件。

12、SQLServer在故障(如掉電)或服務器關閉之后重啟時對數(shù)據(jù)庫的恢復有三個階段:分

析階段,重做階段,取消階段。參考本章討論該問題時的附圖,請舉例說明為什么取消階

段會涉及到最后一個檢查點以前的事務,而不是只涉及最后一個檢查點以后的事務?

答:因為可能有一些事務在最后一個檢查點到來之前就已經(jīng)開始,但是到故障(如掉

電)或服務器關閉時該事務還沒有結(jié)束,這些事務必須取消。

13、你正在創(chuàng)建一個不經(jīng)常修改的數(shù)據(jù)庫,該數(shù)據(jù)庫主要用于決策支持和只讀查詢。你會為

事務日志分配多大的數(shù)據(jù)庫空間百分比?

答:答案并不唯一??梢栽?0%到20%之間。不應該超過20%。由于該數(shù)據(jù)庫的更

改活動相當少,分配的空間百分比接近10%是合理的。

14、使用文件組有那些優(yōu)點?

答:可以把表放在指定的硬盤上。能夠獨立地備份大型表.

15、你正在負責管理你的機構中關鍵任務的帳務記錄。哪一種數(shù)據(jù)恢復模型適合你的數(shù)據(jù)

庫?

答:應該使用FullRecovery(完全恢復)模型。

16、GAM、SGAM和IAM頁都跟蹤數(shù)據(jù)分配。那么,IAM頁與GAM和SGAM頁有什么不

同?

答:GAM和SGAM頁跟蹤所有對象。IAM頁只跟蹤一個特定表或索引的分配。

第3章創(chuàng)建數(shù)據(jù)類型和表

2.在學生成績表tblCourseScore中的列Score用來存放某學生學習某課程的考試成績

(0?100分,沒有小數(shù)),用下面的哪種類型最節(jié)省空間?

A、int

B、smallint

C、tinyint

D、decimal。,0)

答:C

17、你在SQLServer2000數(shù)據(jù)庫中建立了一些相似的表,其格式如下,只是表名和列名不同。

CREATETABLEOneTable

(pkuniqueidentifier,

namevarchar(20),

otheruniqueidentifier,

)

應用程序開發(fā)人員對這些表編寫了一些相似的查詢。因為列的名稱相似,他們喜歡用

ROWGUIDCOL關鍵字來引用列名。當執(zhí)行這些查詢時,會產(chǎn)生什么結(jié)果?

A、SQLServer2000會返回錯誤,因為表包含兩個類型為uniqueidentifier的列;

B、當執(zhí)行的查詢在引用ROWGUIDCOL關鍵字的時候,SQLServer2000會返回錯

誤;

C、SQLServer2000會返回錯誤,因為列pk沒有聲明為關鍵字;

D、SQLServer2000不會產(chǎn)生錯誤。

答:B

18、定單表Orders的列OrderlD的類型是小整型(smallint),根據(jù)業(yè)務的發(fā)展需要改為整型

(integer),應該使用下面的哪條語句?

A、ALTERCOLUMNOrderlDintegerFROMOrders

B、ALTERTABLEOrders(OrderlDinteger)

C、ALTERTABLEOrdersALTERCOLUMNOrderlDinteger

D、ALTERCOLUMNOrders.OrderlDinteger

答:C

19、一個數(shù)據(jù)庫中的用戶定義數(shù)據(jù)類型能夠用于同一個服務器上的另一個數(shù)據(jù)庫中嗎?

答:不能。用戶定義數(shù)據(jù)類型局限于單個數(shù)據(jù)庫。你可以在另一個數(shù)據(jù)庫中創(chuàng)建一個與

之匹配的數(shù)據(jù)類型,也可以在model數(shù)據(jù)庫中創(chuàng)建用戶自定義數(shù)據(jù)類型。

20、你正在設計一個要存儲數(shù)百萬種不同產(chǎn)品的信息數(shù)據(jù)庫,而且想以最少的空間存儲產(chǎn)品信

息。每一個產(chǎn)品在products表中都有一行描述。有時候,產(chǎn)品描述需要200個字符,但絕大

多數(shù)產(chǎn)品描述只需要50個字符。那么,你應該使用哪一種數(shù)據(jù)類型?

答:使用varchar(200)數(shù)據(jù)類型,因為它既保持了行的緊湊,同時也能夠容納偶然情況

下所需要的200個字符的產(chǎn)品描述。

21、在Employees表中的列Remarks用來記錄員工的備注信息,該列大部分不到800字節(jié),但有

時會達到20000字節(jié)。如何處理以提高讀取性能?

答:用行中text列的方式。因為20000字節(jié)超過一個記錄的長度(約8000字節(jié)),所

以該列只能用text類型。為了提高讀取性能,當記錄中該列不到800字節(jié)時,把它直接放

在該行。具體做法是:

CREATETABLEEmployees

RemarkstextNULL)

EXECUTEsp-tableoptionEmployees,'textinrow,,800)

22、有家企業(yè)要用表tblCustomerlnfo來存儲客戶的信息??蛻舻男畔ǎ捍枺ㄕ?/p>

IDENTITY,從100001開始,每次增加5),名稱(最長40個漢字),電話(20個字符),

傳真(20個字符),備注(最長1000個漢字)。電話號碼和傳真號碼要用同一自定義類

型lype_TelphoneNum。

(D請寫出創(chuàng)建該表的SQL語句。

(2)后來因手機流行,需要在表tblCustomerlnfo中再添加列“手機”,該列的類型也

是type_TelphoneNum。請寫出添加該列的SQL語句。

答:要注意存放一個漢字要用兩個字節(jié),所以“名稱”和“備注”的長度要乘2。具體的SQL

語句如下:

EXECUTEsp_addtypetype_TelphoneNum,'varchar(20),,NULL

CREATETABLEtblCustomerlnfo

(代號integerIDENTITY(10001,5)NOTNULL,

名稱varchar(80)NOTNULL,

電話type_TelphoneNum,

傳真type_TelphoneNum,

備注varchar(2000)NULL

)

ALTERTABLEtblCustomerlnfo

ADD手-機type_TelphoneNum

23、你需要運行一個使用SQLServer企業(yè)管理器創(chuàng)建的腳本。那么你該如何做呢?

答:使用SQL查詢分析器或osql,打開并運行腳本。

第4章實現(xiàn)數(shù)據(jù)完整性

1.在學生管理系統(tǒng)中使用下面的學生信息表:

CREATETABLE學生信息表

(學號char(8)PRIMARYKEYNONCLUSTERED,

姓名varchar(20)NOTNULL,

身份證號碼varchar(30)NOTNULL,

出生日期datetimeNULL,

系號char(2)NOTNULL

學生的身份證號碼是唯?的。你想把每個學生的信息按照身份證號碼的順序物理地存放在

數(shù)據(jù)庫文件中。下面的哪個約束可以完成改任務?

A、UNIQUECLUSTERED

B、UNIQUENONCLUSTERED

C、PRIMARYKEYCLUSTERED

D、PRIMARYKEYNONCLUSTERED

答:A

2.在SQLServer2000中創(chuàng)建一些新對象的腳本如下:

CREATETABLEPublishers

(publisher_idintPRIMARYKEY,

publisher_namevarchar(100)notnull

CREATETABLEBooks

(book_idintCONSTRAINTPK_title_idPRIMARYKEY,

book_titlenvarchar(2000)notnull,

book_contentntextnotnull,

fieldOlvarchar(lOO)unique,

field02char(1000),

field03char(1000),

field04char(lOOO),

publisher_idintnotnull,

CONSTRAINTFK_publisher_id

FOREIGNKEY(publisherjd)REFERENCESPublishers(publisher_id)

CREATETABLEThirdTable

(third_idintIDENTITY(45,17)PRIMARYKEY,

fieldOlvarchar(l00)FOREIGNKEYREFERENCESBooks(fieldO1),

從下面中選擇正確的說法。

A.上面的創(chuàng)建語句沒有錯誤;

B.表Books的一行的長度超過允許的最大長度;

C.表ThirdTable的列的third_id的種子要能被增量整除;

D.列fieldOl的類型是varchar,不能作為外部關鍵字;

E.不能直接在表Books的列bookjd上使用CONSTRAINT關鍵字,使用CONSTRAINT

關鍵字要象該表的CONSTRAINTFK_publisher_id一樣另起一行。

答:A

3.在登記學生成績時要保證列Score的值在0到100之間,下面的方法中哪種最簡單?

A.編寫一個存儲過程,管理插入和檢查數(shù)值,不允許直接插入;

B.生成用戶自定義類型type_Score和規(guī)則,將規(guī)則與數(shù)據(jù)類型type_Score相關聯(lián),然后設

置列Score的數(shù)據(jù)類型類型為type_Score;

C.編寫一個觸發(fā)器來檢查Score的值,如果不在0和100之間,則撤消插入;

D.在Score列增加檢查限制。

答:D

4.在數(shù)據(jù)庫中應該將哪種約束添加到Country字段中,以確保你的印度尼西亞子公司只與

其他印度尼西亞公司進行貿(mào)易。

答:CHECK約束(或規(guī)則)。

5.在實現(xiàn)問題4的約束(或規(guī)則)后,數(shù)據(jù)錄入操作員抱怨他們不得不一遍又一遍地輸入

Indonesia這個單詞,有什么辦法可以解決它嗎?

答:創(chuàng)建一個DEFAULT約束(或默認值)。

6.假設你的業(yè)務改變了并且你也不在印度尼西亞工作。你的子公司遷移到了馬來群島與

其他兒個東亞國家做生意。現(xiàn)在,在country字段中包括印度尼西亞在內(nèi)的記錄有四百五十

萬條。如何加入新的國家而且保留包含印度尼西亞的行呢?

答:修改表來刪除現(xiàn)有的約束,然后添加新的約束。在添加新約束時,使用WITH

NOCHECK選項。

7.在學生管理系統(tǒng)中已經(jīng)創(chuàng)建了學生信息表tblStudlnfo和系信息表tblDeptlnfo,而且這兩

個表都存放了不少數(shù)據(jù)。創(chuàng)建表的語句如下:

CREATETABLEtblDeptlnfo

(

DeptIDchar(2)notnullPRIMARYKEY,

DeptNamevarchar(20)notnull,

Remarksvarchar(255)

)

CREATETABLEtblStudlnfo

(

StudlDchar(8)notnullPRIMARYKEY,

Namevarchar(20)notnull,

Birthdaydatetimenull,

DeptIDchar(2)notnull

)

學生信息表tblStudlnfo的列DeptID,用來存放學生所在系的代號。該列引用系信息表

tblDeptlnfo的列DeptID,但是在創(chuàng)建表時沒有創(chuàng)建該約束。請在不刪除表的情況下,寫出

創(chuàng)建該約束的SQL語句。

答:可以使用ALTERTABLE語句來創(chuàng)建該約束,

ALTERTABLEtblStudlnfo

ADDCONSTRAINTFK_DeptID

FOREIGNKEY(DeptID)REFERENCEStblDeptlnfo(DeptlD)

8.某公司使用數(shù)據(jù)庫進行內(nèi)部管理:表tblEmployees存儲雇員的代號(4位字符,唯一)、

身份證號碼(18個字符)、名字(最長20個字符)和工資等信息;表tblDepartments存儲

部門的部門號(2個字符,唯一)、部門名稱(30個字符)等信息;表tblWork每一行表示

某雇員在某部門工作過及其開始工作時間和備注。請寫出創(chuàng)建這三個表的SQL語句,要保

證:工資的值大于0,身份證號碼唯一,并且當刪除某雇員時該雇員在表tblWork的所有信

息自動刪除。

答:

CREATETABLEtblEmployees

(雇員代號char(4)notnullPRIMARYKEY,

姓名varchar(20)notnull,

身份證號碼char(18)notnullUNIQUE,

工資integernotnullCHECK(工資>0)

)

CREATETABLEtblDepartments

(部門號,char(2)notnullPRIMARYKEY,

部門名稱varchar(30)notnull

)

CREATETABLEtbIWork

(

雇員代號char(4)notnull,

部門號char(2)notnull,

開始時間datetimenotnull,

備注varchar(lOOO)null,

CONSTRAINTPK_tblWorkPRIMARYKEY(雇員代號,部門號,開

始時間),

CONSTRAINTFK_tblEmployeesFOREIGNKEY(雇員代號)

REFERENCEStblEmployees(雇員代號)ONDELETECASCADE,

CONSTRAINTFK_tblDepartmentsFOREIGNKEY(部門號)

REFERENCEStblDepartments(部門號)

)

9.定單錄入系統(tǒng)有兩個主要的表:Orders和Customers。如果希望惟一地標識每個定單和

客戶,應該考慮哪種數(shù)據(jù)完整性組件?如何管理這兩個表之間的關系?

答:確定在Customers表中定義了PRIMARYKEY約束。在Orders表中使用FOREIGN

KEY約束來引用Customers表。

第5章Transact-SQL介紹

1.執(zhí)行下面腳本,共有多少條記錄插入到表tblTemp中?

CREATETABLEtblTemp

(TempIDintegernotnull,

TempDatedatetimenotnull)

go

DECLARE@countinteger

SET@count=1

WHILE@count<=10

BEGIN

IF(SELECTCOUNT(*)FROMtblTemp)>8

BEGINBREAKEND

ELSE

INSERTtblTempVALUES(@count,GETDATE())

SET@count=@count+1

END

A、0B、8C、9D、10

答:C

2.你的數(shù)據(jù)庫存放產(chǎn)品的序列號,序列號以整型存儲。你需要把序列號按如下的格式顯示:

(999)999-9999

假設你已經(jīng)把一個序列號放在一個變量中,該變量的定義如下:

DECLARE@SerialNumberint

下面哪個語句可以正確地完成該任務?

A.

SELECT?SerialNumber'='('

+SUBSTRING(CONVERT(varchar(10),@SerialNumber),3,0)+')'

+SUBSTRING(CONVERT(varchar(10),@SerialNumber),3,3)

++SUBSTRING(CONVERT(varchar(10),@SerialNumber),4,6)

B.

SELECT'SerialNumber'='('

+SUBSTRING(CONVERT(varchar(10),@SerialNumber),3,l)+y

+SUBSTRING(CONVERT(varchar(10),@SerialNumber),3,4)

++SUBSTRING(CONVERT(varchar(10),@SerialNumber),4,7)

C.

SELECT'SerialNumber'='('

+SUBSTRING(CONVERT(varcha「(10),@SerialNumber),0,3)+')'

+SUBSTRING(CONVERT(varchar(10),@SerialNumber),3,3)

++SUBSTRING(CONVERT(varchar(10),@SerialNumber),6,4)

D.

SELECTSerialNumber'='('

+SUBSTRING(CONVERT(varchar(10),@SerialNumber),l,3)+,}'

+SUBSTRING(CONVERT(varchar(10),@SerialNumber)A3)

++SUBSTRING(CONVERT(varchar(10),@SerialNumber),

答:D

3.描述Transact-SQL語句的基本類型及它們的用法。

答:數(shù)據(jù)定義語言(DDL)語句允許在數(shù)據(jù)庫中創(chuàng)建對象。數(shù)據(jù)控制語言(DCL)語句能夠決

定誰能查看和修改數(shù)據(jù)。數(shù)據(jù)操縱語言(DML)語句允許查詢和修改數(shù)據(jù)。

4.Transact-SQL和ANSISQL-92的關系是什么?

答:Transact-SQL符合ANSISQL-92入口級規(guī)范,并通過SQLServer特定的擴展而

且具有附加的功能。

5.下面的語句錯在什么地方?

DECLARE@ainteger

SET@a=1

SELECT@a

GO

SET@a=@a+l

答:當執(zhí)行GO命令時,GO前面的批處理就結(jié)束,該批處理中的局部變量@2已經(jīng)被

清除。當執(zhí)行SET@a=@a+1語句時,會因為變量@a沒有定義而產(chǎn)生錯誤。

6.寫出Transact-SQL語句,將SQLServer2000服務器的名稱放在局部變量@a中(用兩

種方法)。

答:

DECLARE@avarchar(300)

SET@a=@@SERVERNAME

DECLARE@avarchar(300)

SELECT@a=@@SERVERNAME

7.表tblTemp的定義如下:

CREATETABLEtblTemp

(TempIDintegernotnull,

TempDatedatetimenotnull)

(1)請寫出SQL語句來顯示列TempID是偶數(shù)的記錄中列TempDate的年份。(2)請寫出

幾條SQL語句顯示列TempID的值是該列的最大值的所有記錄。

較.

口?

selectyear(TempDate)

fromtblTemp

whereTempID%2=0

DECLARE@Tempinteger

SELECT@Temp=max(TempID)

FROMtblTemp

SELECT*FROMtblTemp

WHERETempID=@Temp

第6章使用Transact-SQL查詢工具

3.一個腳本有如下代碼:

CREATETABLEEmployees一第一條語句

(EmployeelDintIDENTITY(10001,1)PRIMARYKEY,

Namevarchar(40)notnull,

Birthdaydatetimenull

)

SELECT*FROMEmployees一第二條語句

CREATEDEFAULTphone_no_default??第三條語句

AS?(000)000-0000,

CREATETABLECustomers--第四條語句

(CustomerlDint1DENTITY(100001,1)PRIMARYKEY,

Namevarchar(40)notnull.

Phonevarchar(20)null

)

EXECUTEsp_bindefaultphone_no_default,'Customers.Phone'--第五條語句

在執(zhí)行過程中會因為缺少GO宿團而出現(xiàn)錯誤,下面哪些是必須的?

A.在“第一條語句”和“第二條語句”之間添加GO語句

B.在“第二條語句”和“第三條語句”之間添加GO語句

C.在“第三條語句”和“第四條語句”之間添加GO語句

D.在“第四條語句”和“第五條語句”之間添加GO語句

答:B,C

24、為了捕獲文本文件中的查詢結(jié)果,在批處理文件中最好使用什么查詢工具?為什么?

答:最好使用osql命令行實用工具執(zhí)行查詢,然后通過使用命令行選項-0filename.txt

小巴夕吉果*{呆彳竽至個*文~中O

在SQL查詢分析器中,使用適當?shù)拿钚羞x項也能完成上述操作。

25、要想將來重新使用Transact-SQL語句,創(chuàng)建并使用它的最好方法是什么?

答:使用對象瀏覽器直接從對象生成Transact-SQL語句腳本,或者從模板生成

Transact-SQL語句腳本。也可以把Transact-SQL腳本保存到文件中,供日后修改或使用。

26、Transact-SQL批處理和Transact-SQL腳本有何不同?

答:Transact-SQL批處理是由GO語句描繪的一系列語句,這些語句將立即被分析和

執(zhí)行。Transact-SQL腳本是一個文件,此文件包含一個或多個要執(zhí)行的批處理。

27、您打算用SQLServer2000的查詢分析器來瀏覽部門信息表tblDepartments中的記錄信息,

可以采用哪些方法?

答:在SQLServer2000的查詢分析器中執(zhí)行SQL語句SELECT*FROM

tblDepartments,或者在SQLServer2000的查詢分析器的對象瀏覽窗口選中表

tblDepartments,按鼠標右鍵并選中快捷菜單中的“打開表”功能。

28、在WINDOWS系統(tǒng)中,一個程序A(嚴格講應稱為“進程”)可以啟動運行帶參數(shù)的另外

一個程序B,程序B運行結(jié)束后會返回結(jié)果(一個整數(shù))給程序A,供程序A判斷程序B運行是

否正常。假設您在編寫一個商場管理信息系統(tǒng)的安裝軟件,該安裝軟件要在SQLServer2000服

務器上創(chuàng)建數(shù)據(jù)庫和表等對象。您已經(jīng)把創(chuàng)建數(shù)據(jù)庫和表等對象的SQL語句放在install.sql文件

中。如何輕松地完成創(chuàng)建數(shù)據(jù)庫和表等對象的任務?

答:可以通過運行osql.exe來執(zhí)行創(chuàng)建數(shù)據(jù)庫和表等對象的SQL語句。程序A可以運

行如下命令:

如果使用Windows身份驗證模式,則執(zhí)行

osql.exe-S服務器名稱-E-ie:\setup\install.sql

如果使用SQLServer身份驗證模式,則執(zhí)行

osql.exe-S服務器名稱-Usa-P密碼-ie:\setup\install.sql

更詳細的信息請看SQLServer的聯(lián)機幫助:osql實用工具。

29、請比較SQLServer2000的查詢分析器和企、業(yè)管理器的優(yōu)缺點。

答:企業(yè)管理器使用向?qū)У姆绞?,比較簡單和直觀,適合初學和維護數(shù)據(jù)庫時使用。但

是,企業(yè)管理器也有缺點。比如,創(chuàng)建數(shù)據(jù)庫等對象后若不小心刪除這些對象,重新生成

這些對象比較費勁,容易缺漏。

查詢分析器使用文本命令行(Transact-SQL語句)的方式,比較適合在開發(fā)實際系統(tǒng)

時使用。在開發(fā)階段,您可以使用Transact-SQL語句在開發(fā)環(huán)境中創(chuàng)建數(shù)據(jù)庫和表等對

象,并保存這些語句到文本文件中,以后在實際運行環(huán)境中只要運行這些命令行就可以重

新創(chuàng)建數(shù)據(jù)庫和表等對象。同時,使用Transact-SQL語句還可以生成大量的測試數(shù)據(jù)。

使用查詢分析器的缺點在于要記住很多Transact-SQL語句的格式和使用方法。

第7章檢索數(shù)據(jù)

1.您需要顯示從2001年1月1日到2001年12月31日雇傭的所有職員的姓名和雇傭

日期。職員信息表tblEmployees包含列Name和列HireDate,下面哪些語句能完成

該功能?

A、SELECTName,HireDateFROMtblEmployees

B、SELECTName,HireDateFROMtblEmployees

WHEREHireDate=2001-01-0rOR'200L12-31'

C、SELECTName,HireDateFROMtblEmployees

WHEREHireDateBETWEEN'2000-12-31'AND42002-01-0r

D、SELECTName,HireDateFROMtblEmployees

WHEREHireDateDATEPART(yy,HireDate)=2001

答:D

2.在SQLServer2000創(chuàng)建了定單表,創(chuàng)建語句如下:

CREATETABLE定單表

(定單代號intIDENTITY(IJ)PRIMARYKEY,

客戶代號intnotnull,

雇員代號intnotnull,-經(jīng)手該筆業(yè)務的雇員的代號

定單日期datetimenotnull,

銷售金額moneynotnull,

備注varchar(200)null

)

你需要獲得定單信息列表,包括雇員代號、銷售金額和定單日期。你想按日期從近

到早的順序顯示,并且對于每一天的定單,按銷售金額從大到小的順序排序。

假設列“銷售日期”的時間部分的值都是0,下面哪條語句能夠準確地完成該任務?

A.SELECT雇員代號,銷售金額,定單日期

FROM定單表

ORDERBY銷售金額,定單日期DESC

B.SELECT雇員代號,銷售金額,定單日期

FROM定單表

ORDERBY定單日期,銷售金額DESC

C.SELECT雇員代號,銷售金額,定單日期

FROM定單表

ORDERBY定單日期DESC,銷售金額DESC

D.SELECT雇員代號,銷售金額,定單日期

FROM定單表

ORDERBY銷售金額DESC,定單R期DES

答:C

3.你是一位健康護理計劃的數(shù)據(jù)庫管理員。使用下面語句創(chuàng)建physicians表:

CREATETABLEdbo.physicians(

physician_noiniIDENTITY(100,2)NOTNULL,

f_namevarchar(25)NOTNULL,

l_namevarchar(25)NOTNULL,

streetvarchar(50)NULL,

cityvarchar(255)NULL,

statevarchar(255)NULL,

postal_codevarchar(7)NULL,

co_paymoneyNOTNULLCONSTRAINTphys_co_payDEFAULT(10)

)

a)如何檢索在紐約州(NY)、華盛頓州(WA)、弗吉尼亞州(VA)、或加利福尼

亞州(CA)實習的醫(yī)生信息?

答:用下面類型的WHERE子句編寫一個SELECT語句。

WHEREstate='NY'ORstate='WA'ORstate=...

Or,useaWHEREclausethatincludestheINkeyword:

WHEREstatein('NY','WA','VA','CA')

b)在結(jié)果集中,如何產(chǎn)生一個沒有重復州的列表?

答:在SELECT語句中使用DISTINCT關鍵字。

c)在結(jié)果集中,如何產(chǎn)生一個列,包含co_pay值加每位醫(yī)生$5.00的服務費,并且

給該列取一個別名Amt_Due?

答在選擇列表中使用計算列。使用列別名'Amt_Due'=(co_pay+5)。

4.學生成績表包含列“學號”、歹U“課程代號”、歹廣成績”、歹ij“考試時間”等。歹產(chǎn)成績”

的值為NULL表示該學生缺考這門課。請用SELECT語句查詢學號為“98120001”的學生所

有缺考的課程數(shù)。

答:SELECTCOUNT(*)

FROM學生成績表

WHERE學號='98120001'AND成績ISNULL

5.雇員信息表包含列“雇員代號”、歹!J“雇員姓名”、歹!J“出生日期”、歹!基本工資”、列

“津貼”,總工資=基本工資+津貼,請用SELECT語句查詢1972年以后出生的雇員的姓名、

出生日期和總工資,按總工資遞減的順序顯示。

答:SELECT雇員姓名,基本工資+津貼AS總工資,出生日期

FROM雇員信息表

WHERE出生日期>='1972。-01,

ORDERBY總工資DESC

6.現(xiàn)在要做一個電話查詢網(wǎng)頁,供人們查詢某大學的教職工的家庭電話號碼。使

用者在網(wǎng)頁輸入教職工的部分姓名,網(wǎng)頁就返回匹配該查詢條件的所有教職工的姓名和電

話號碼。輸入的部分姓名可以多種多樣,比如,查找“張小明”,可以輸入“張”、"小”、"明”、

“張明,,、“小明,,等等。假設教職工的姓名和電話號碼存放在表⑹Teiphone,局部變量

@PartialName存放輸入的部分姓名,請用Transact-SQL語句寫一段代碼完成該查詢。(請

參考第五章的字符串函數(shù)SUBSTRING,和SQLServer聯(lián)機叢書。)

答:

DECLARE@SearchConditionvarchar(200)

DECLARE@ismallint,@Countsmallint

SET@SearchCondition='%'

SET@Count=LEN(@PartialName)

SET?i=1

WHILE@i<=?Count

BEGIN

SET@SearchCondition=?SearchCondition+SUBSTRING(@PartialName,@i,

1)+'%'

SET@i=@i+1

END

SELECT*

FROMtblTelphone

WHERE姓名like?SearchCondition

第8章數(shù)據(jù)分組與匯總

4.你在SQLServer2000數(shù)據(jù)庫中創(chuàng)建了定單表,其創(chuàng)建語句如下:

CREATETABLE定單表

(定單號intIDENTITY?!梗㏄RIMARYKEY,

雇員代號intNOTNULL,

地區(qū)代號intNOTNULL,

訂購□期datetimeNOTNULL,

訂購金額moneyNOTNULL

銷售經(jīng)理想要獲得總的銷售金額和按地區(qū)分組的總銷售金額。下面哪條語句能完

成該任務?

A.SELECT雇員代號,地區(qū)代號,訂購金額

FROM定單表

ORDERBY地區(qū)代號

COMPUTESUM(訂購金額)

B.SELECT雇員代號,地區(qū)代號,訂購金額

FROM定單表

ORDERBY地區(qū)代號

COMPUTESUM(訂購金額)BY地區(qū)代號

COMPUTESUM(訂購金額)

C.SELECT雇員代號,地區(qū)代號,SUM(訂購金額)

FROM定單表

GROUPBY雇員代號,地區(qū)代號

D.SELECT雇員代號,地區(qū)代號,SUM(訂購金額)

FROM定單表

GROUPBY雇員代號,地區(qū)代號

答:B

30、下面哪些關鍵字能影響SELECT語句返回的結(jié)果的行數(shù)?(多選)

A.TOPn

B.WHER

C.ORDERBY

D.DISTINCT

答:A、B和D

31、一個營銷部的雇員想讓你提供關于產(chǎn)品銷售的匯總數(shù)據(jù)。她需要對早餐的谷類食品按類別

(如冷、熱或低脂類)、廠商和銷售產(chǎn)品的商店的規(guī)模(小、中或大)分類。假設一個表中

保存了所有這些信息,你的SELECT語句將使用什么樣的子句或運算符?為什么?

答:最好使用GROUPBY子句和CUBE運算符。GROUPBY和HAVING子句只能提

供一種級別的匯總(或分組)。ROLLUP運算符可以提供一種類型的匯總。CUBE運算符

可以提供多種類型的匯總。也可以使用COMPUTE或COMPUTEBY子句生成基本報表。

32、你的經(jīng)理要求你把包含從問題3得到的所有數(shù)據(jù)的文件提供給另外一個開發(fā)小組使用,此開

發(fā)小組負責報表生成和圖形化工具。使用COMPUTE和COMPUTEBY子句適合這個任務

嗎?為什么或為什么不適合?

答:不合適。因為COMPUTE和COMPUTEBY子句生成的是非關系型格式的附加的

匯總數(shù)據(jù)。盡管這些數(shù)據(jù)便于查看,所返回的結(jié)果集卻不適合出現(xiàn)在其它應用程序中。應

該使用GROUPBY子句和CUBE或ROLLUP運算符提供標準關系格式的數(shù)據(jù),這樣其他

客戶比較容易使用。

33、某班級的學生成績表包含列“學號”、歹上課程代號"、歹『'成績"、歹「學期號”,請統(tǒng)計學期號

為,,第三學期,,的每個學生所有科目的平均成績。

答:SELECT學號,AVG(成績)

FROM學生成績表

WHERE學期』第三學期’

GROUPBY學號

34、接上題,現(xiàn)在想評定該班級第二學年(包括第三學期和第四學期)的優(yōu)秀學生獎學金,要求

從該班級選出平均成績排前5名的同學。請用SELECT語句顯示這些同學的學號和平均成績。

(要考慮可能有多個同學并列第5名)

答:SELECTTOP5WITHTIES學號,AVG(成績)AS平均成績

FROM學生成績表

WHERE學期」第三學期'OR學期』第四學期’

GROUPBY學號

ORDERBY平均成績DESC

35、接上題,學校規(guī)定前三學年(第一學期到第六學期)總平均分在90分以上而且沒有一次

考試不及格(成績>=60分)的同學可以參加學校最高級別的評獎。請用SELECT語句顯示

該班級中滿足評獎條件的候選人的學號和前三學年的總平均分。

答:

SELECT學號,AVG(成績)AS三年平均成績

FROM學生成績表

WHERE學期=,第一學期'OR學期='第二學期,

OR學期=,第三學期,OR學期』第四學期’

OR學期='第五學期'OR學期=,第六學期’

GROUPBY學號HAVINGAVG(成績)>=9()ANDMIN(成績)>=60

ORDERBY三年平均成績DESC

36、查看在SELECT語句中使用GROUPBY子句和CUBE運算符的結(jié)果。在結(jié)果集中你將

發(fā)現(xiàn)空值,而且空值在SELECT語句使用的表中是允許出現(xiàn)的。你是如何用空值區(qū)分詳細

數(shù)據(jù)行與匯總數(shù)據(jù)行。

答:在允許空值的列中使用GROUPING函數(shù)。如果是一個匯總行,通過GROUPING

函數(shù)產(chǎn)生的列值會出現(xiàn)數(shù)字1。

37、需要提供前100個產(chǎn)品和銷售倒數(shù)百分之五的產(chǎn)品的列表??梢允褂肧ELECTTOPn

[PERCENT]語句解答每個問題嗎?還有其他方法來解答這些問題嗎?

答:可以??梢允褂肧ELECTTOP“PERCENT]語句解答每個問題。第一個問題可以

用SELECTTOP100...ORDERBY…DESC語句,這樣會使銷售量最高的列在上面。

第二個問題可以用SELECTTOP5PERCENT...ORDERBY...ASC語句,這樣會使

銷售量最低的列在上面。

第9章多表聯(lián)接

1.你在SQLServer2000數(shù)據(jù)庫中創(chuàng)建了如下兩個表:

CREATETABLE雇員表

(雇員代號intIDENTITY(10001,1)PRIMARYKEYNONCLUSTERED,

雇員姓名varchar(20)NOTNULL,

通信地址varchar(200)NULL

)

CREATETABLE定單表

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論