




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)庫技術(shù)與應(yīng)用實(shí)踐教程-SQLServer2005上機(jī)實(shí)驗指導(dǎo)(實(shí)驗思考)—參考答案實(shí)驗1:安裝及管理工具使用略。實(shí)驗2:SQLServer數(shù)據(jù)庫的管理二、實(shí)驗內(nèi)容及步驟4.單擊“新建查詢”打開查詢設(shè)計器窗口,在查詢設(shè)計器窗口中使用Transact-SQL語句CREATEDATABASE創(chuàng)建studb數(shù)據(jù)庫。然后通過系統(tǒng)存儲過程sp_helpdb查看系統(tǒng)中的數(shù)據(jù)庫信息。CREATEDATABASEstudbON(NAME=studb_dat,FILENAME='C:\DataBase\studb.mdf')EXECsp_helpdb5.在查詢設(shè)計器中使用Transact-SQL語句ALTERDATABASE修改studb數(shù)據(jù)庫的設(shè)置,指定數(shù)據(jù)文件大小為5MB,最大文件大小為20MB,自動遞增大小為1MB。ALTERDATABASEstudbMODIFYFILE(NAME=studb_data,SIZE=5MB,MAXSIZE=20MB,FILEGROWTH=1MB)6.在查詢設(shè)計器中為studb數(shù)據(jù)庫增加一個日志文件,命名為studb_Log2,大小為5MB,最大文件大小為10MB。ALTERDATABASEstudbADDLOGFILE(NAME=studb_log2,FILENAME=studb_log2.ldf,SIZE=5MB,MAXSIZE=10MB)8.使用Transact-SQL語句DROPDATABASE刪除student_db數(shù)據(jù)庫。DROPDATABASEstudent_db實(shí)驗3SQLServer數(shù)據(jù)表的管理二、實(shí)驗內(nèi)容及步驟5.使用Transact-SQL語句CREATETABLE在studentsdb數(shù)據(jù)庫中創(chuàng)建grade表。CREATETABLEgrade( [學(xué)號][char](4)NULL, [課程編號][char](4)NULL, [分?jǐn)?shù)][char](5)NULL)ON[PRIMARY]8.使用Transact-SQL語句INSERTINTO...VALUES向studentsdb數(shù)據(jù)庫的grade表插入數(shù)據(jù):學(xué)號為0004,課程編號為0001,分?jǐn)?shù)為80。INSERTgradeVALUES('0004','0001','80')9.使用Transact-SQL語句ALTERTABLE修改curriculum表的“課程編號”列,使之為非空。ALTERTABLEcurriculumALTERCOLUMN課程編號NOTNULL10.使用Transact-SQL語句ALTERTABLE修改grade表的“分?jǐn)?shù)”列,使其數(shù)據(jù)類型為real。ALTERTABLEgradeALTERCOLUMN分?jǐn)?shù)real11.使用Transact-SQL語句ALTERTABLE修改student_info表的“姓名”列,使其列名為“學(xué)生姓名”,數(shù)據(jù)類型為vachar(10),非空。altertablestudent_infoadd學(xué)生姓名varchar(10)NOTNULL;updatestudent_infoset學(xué)生姓名=姓名;altertablestudent_infodropcolumn姓名;12.分別使用SQLServer管理平臺和Transact-SQL語句DELETE刪除studentsdb數(shù)據(jù)庫的grade表中學(xué)號為0004的成績記錄。DELETEgradeWHERE學(xué)號='0004'13.使用Transact-SQL語句UPDATE修改studentsdb數(shù)據(jù)庫的grade表中學(xué)號為0003、課程編號為0005、分?jǐn)?shù)為90的成績記錄。UPDATEgradeSET分?jǐn)?shù)=90WHERE學(xué)號='0003'and課程編號='0005'14.使用Transact-SQL語句ALTER...ADD為studentsdb數(shù)據(jù)庫的grade表添加一個名為“備注”的數(shù)據(jù)列,其數(shù)據(jù)類型為VARCHAR(20)。ALTERTABLEgradeADD備注VARCHAR(20)NULL15.分別使用SQLServer管理平臺和Transact-SQL語句DROPTABLE刪除studentsdb數(shù)據(jù)庫中g(shù)rade表。DROPTABLEstudentsdb.dbo.grade三、實(shí)驗思考1.使用Transact-SQL語句刪除在studentsdb數(shù)據(jù)庫的grade表添加的“備注”數(shù)據(jù)列。ALTERTABLEgradeDROPCOLUMN備注實(shí)驗4數(shù)據(jù)查詢二、實(shí)驗內(nèi)容及步驟2.在studentsdb數(shù)據(jù)庫中使用SELECT語句進(jìn)行基本查詢。(1)在student_info表中,查詢每個學(xué)生的學(xué)號、姓名、出生日期信息。SELECT學(xué)號,姓名,出生日期FROMstudent_info(2)查詢學(xué)號為0002的學(xué)生的姓名和家庭住址。SELECT姓名,家庭住址FROMstudent_infoWHERE學(xué)號='0002'(3)找出所有男同學(xué)的學(xué)號和姓名。SELECT學(xué)號,姓名FROMstudent_infoWHERE性別='男'3.使用SELECT語句進(jìn)行條件查詢(1)在grade表中查找分?jǐn)?shù)在80~90范圍內(nèi)的學(xué)生的學(xué)號和分?jǐn)?shù)。SELECT學(xué)號,分?jǐn)?shù)FROMgradeWHERE(分?jǐn)?shù)BETWEEN80AND90)(2)在grade表中查詢課程編號為0003的學(xué)生的平均分。SELECTavg(分?jǐn)?shù))AS平均分FROMgradeWHERE(課程編號='0003')(3)在grade表中查詢學(xué)習(xí)各門課程的人數(shù)。SELECT課程編號,COUNT(*)AS人數(shù)FROMgradeGROUPBY課程編號(4)將學(xué)生按出生日期由大到小排序。SELECT*FROMstudent_infoORDERBY出生日期DESC(5)查詢所有姓“張”的學(xué)生的學(xué)號和姓名。SELECT*FROMstudent_infoWHERE姓名LIKE'張%'4.對student_info表,按性別順序列出學(xué)生的學(xué)號、姓名、性別、出生日期及家庭住址,性別相同的按學(xué)號由小到大排序。SELECT學(xué)號,姓名,性別,出生日期,家庭住址FROMstudent_infoORDERBY性別,學(xué)號5.使用GROUPBY查詢子句列出各個學(xué)生的平均成績。SELECT學(xué)號,SUM(分?jǐn)?shù))/COUNT(*)AS平均成績FROMgradeGROUPBY學(xué)號6.使用UNION運(yùn)算符將student_info表中姓“張”的學(xué)生的學(xué)號、姓名與curriculum表的課程編號、課程名稱返回在一個表中,且列名為u_編號、u_名稱,如圖1-8所示。圖1-8聯(lián)合查詢結(jié)果集SELECT學(xué)號ASu_編號,姓名ASu_名稱FROMstudent_infoWHERE(姓名LIKE'張%')UNIONSELECT課程編號ASu_編號,課程名稱ASu_名稱FROMcurriculum7.嵌套查詢
(1)在student_info表中查找與“劉衛(wèi)平”性別相同的所有學(xué)生的姓名、出生日期。SELECT姓名,出生日期FROMstudent_infoWHERE性別=(SELECT性別FROMstudent_infoWHERE姓名='劉衛(wèi)平')(2)使用IN子查詢查找所修課程編號為0002、0005的學(xué)生學(xué)號、姓名、性別。SELECT學(xué)號,姓名,性別FROMstudent_infoWHEREstudent_info.學(xué)號IN(SELECT學(xué)號FROMgradeWHERE課程編號IN('0002','0005'))
(3)列出學(xué)號為0001的學(xué)生的分?jǐn)?shù)比0002號的學(xué)生的最低分?jǐn)?shù)高的課程編號和分?jǐn)?shù)。SELECT課程編號,分?jǐn)?shù)FROMgradeWHERE學(xué)號='0001'AND分?jǐn)?shù)>ANY(SELECT分?jǐn)?shù)FROMgradeWHERE學(xué)號='0002')
(4)列出學(xué)號為0001的學(xué)生的分?jǐn)?shù)比學(xué)號為0002的學(xué)生的最高成績還要高的課程編號和分?jǐn)?shù)。SELECT課程編號,分?jǐn)?shù)FROMgradeWHERE學(xué)號='0001'AND分?jǐn)?shù)>(SELECTMAX(分?jǐn)?shù))FROMgradeWHERE學(xué)號='0002')8.連接查詢(1)查詢分?jǐn)?shù)在80~90范圍內(nèi)的學(xué)生的學(xué)號、姓名、分?jǐn)?shù)。SELECTstudent_info.學(xué)號,姓名,分?jǐn)?shù)FROMstudent_info,gradeWHEREstudent_info.學(xué)號=grade.學(xué)號AND分?jǐn)?shù)BETWEEN80AND90(2)查詢學(xué)習(xí)“C語言程序設(shè)計”課程的學(xué)生的學(xué)號、姓名、分?jǐn)?shù)。SELECTstudent_info.學(xué)號,姓名,分?jǐn)?shù)FROMstudent_infoINNERJOINgradeONstudent_info.學(xué)號=grade.學(xué)號INNERJOINcurriculumON課程名稱='C語言程序設(shè)計'
(3)查詢所有男同學(xué)的選課情況,要求列出學(xué)號、姓名、課程名稱、分?jǐn)?shù)。SELECTa.學(xué)號,a.姓名,c.課程名稱,b.分?jǐn)?shù)FROMstudent_infoaINNERJOINgradebONa.學(xué)號=b.學(xué)號INNERJOINcurriculumcONb.課程編號=c.課程編號WHERE(a.性別='男')(4)查詢每個學(xué)生的所選課程的最高成績,要求列出學(xué)號、姓名、課程編號、分?jǐn)?shù)。SELECTa.學(xué)號,c.姓名,a.課程編號,a.分?jǐn)?shù)FROMgradeaINNERJOINstudent_infocONa.學(xué)號=c.學(xué)號WHERE(a.分?jǐn)?shù)=(SELECTMAX(b.分?jǐn)?shù))FROMgradebWHEREb.學(xué)號=a.學(xué)號))(5)查詢所有學(xué)生的總成績,要求列出學(xué)號、姓名、總成績,沒有選修課程的學(xué)生的總成績?yōu)榭?。提示:使用左外連接。SELECTa.學(xué)號,a.姓名,b.總成績FROMstudent_infoaLEFTOUTERJOIN(SELECT學(xué)號,SUM(分?jǐn)?shù))AS總成績FROMgradeGROUPBY學(xué)號)bONa.學(xué)號=b.學(xué)號(6)為grade表添加數(shù)據(jù)行:學(xué)號0004、課程編號為0006、分?jǐn)?shù)為76。查詢所有課程的選修情況,要求列出課程編號、課程名稱、選修人數(shù),curriculum表中沒有的課程列值為空。提示:使用右外連接。INSERTINTOgrade(學(xué)號,課程編號,分?jǐn)?shù))VALUES('0004','0006',76)SELECTa.課程編號,a.課程名稱,b.選修人數(shù)FROMcurriculumaRIGHTOUTERJOIN(SELECT課程編號,COUNT(*)AS選修人數(shù)FROMgradeGROUPBY課程編號)bONa.課程編號=b.課程編號三、實(shí)驗思考1.查詢所有沒有選修課程的學(xué)生信息,返回結(jié)果包括學(xué)號、姓名、性別。SELECT學(xué)號,姓名,性別FROMstudent_infoWHERE(學(xué)號NOTIN(SELECT學(xué)號FROMgrade))2.在student_info表和grade表之間實(shí)現(xiàn)交叉連接。SELECTa.學(xué)號,a.姓名,a.性別,b.課程編號,b.分?jǐn)?shù)FROMstudent_infoaCROSSJOINgradeb3.查詢每個學(xué)生的所選課程的成績,并列出學(xué)號生成分組匯總行(總成績)和明細(xì)行(各課成績)。提示:使用SELECT語句的COMPUTE選項。SELECT學(xué)號,分?jǐn)?shù)FROMgradeORDERBY學(xué)號COMPUTESUM(分?jǐn)?shù))BY學(xué)號4.在查詢語句中SELECT、FROM和WHERE選項分別實(shí)現(xiàn)什么運(yùn)算?投影、選擇、自然連接5.在查詢的FROM子句中實(shí)現(xiàn)表與表之間的連接有哪幾種方式?對應(yīng)的關(guān)鍵字分別是什么?有三種:內(nèi)連接(INNERJOIN)、外連接(LEFTOUTERJOIN、RIGHTOUTERJOIN、FULLOUTERJOIN)和交叉連接(CROSSJOIN)。實(shí)驗5:索引與視圖二、實(shí)驗內(nèi)容及操作步驟1.分別使用SQLServer管理平臺和Transact-SQL語句為studentsdb數(shù)據(jù)庫的student_info表和curriculum表創(chuàng)建主鍵索引。CREATEUNIQUECLUSTEREDINDEX[PK_curriculum]ON[curriculum]([課程編號])ON[PRIMARY]9.在studentsdb數(shù)據(jù)庫中,以student_info表為基礎(chǔ),使用SQLServer管理平臺建立名為v_stu_i的視圖,使視圖顯示學(xué)生姓名、性別、家庭住址。10.在studentsdb數(shù)據(jù)庫中,使用Transact-SQL語句CREATEVIEW建立一個名為v_stu_c的視圖,顯示學(xué)生的學(xué)號、姓名、所學(xué)課程的課程編號,并利用視圖查詢學(xué)號為0003的學(xué)生情況。CREATEVIEWv_stu_cASSELECTa.學(xué)號,a.姓名,b.課程編號FROMstudent_infoaINNERJOINgradebONa.學(xué)號=b.學(xué)號SELECT*FROMv_stu_cWHERE(學(xué)號='0003')11.基于student_info表、curriculum表和grade表,建立一個名為v_stu_g的視圖,視圖中具有所有學(xué)生的學(xué)號、姓名、課程名稱、分?jǐn)?shù)。使用視圖v_stu_g查詢學(xué)號為0001的學(xué)生的所有課程與成績,如圖1-9所示。圖1-9學(xué)號為0001的學(xué)生的視圖信息CREATEVIEWv_stu_gASSELECTa.學(xué)號,a.姓名,c.課程名稱,b.分?jǐn)?shù)FROMstudent_infoaINNERJOINgradebONa.學(xué)號=b.學(xué)號INNERJOINcurriculumcONb.課程編號=c.課程編號SELECT*FROMv_stu_gWHERE學(xué)號=’000112.分別使用SQLServer管理平臺和Transact-SQL語句修改視圖v_stu_c,使之顯示學(xué)號、姓名、每個學(xué)生所學(xué)課程數(shù)目。ALTERVIEWv_stu_cASSELECTa.學(xué)號,a.姓名,COUNT(*)AS課程數(shù)目FROMstudent_infoaINNERJOINgradebONa.學(xué)號=b.學(xué)號GROUPBYa.學(xué)號,a.姓名13.使用Transact-SQL語句ALTERVIEW修改視圖v_stu_i,使其具有列名學(xué)號、姓名、性別。ALTERVIEWv_stu_i(學(xué)號,姓名,性別)ASSELECT學(xué)號,姓名,性別FROMstudent_info14.使用系統(tǒng)存儲過程sp_rename將視圖v_stu_i更名為v_stu_info。sp_renamev_stu_i,v_stu_info21.利用視圖v_stu_i為student_info表添加一行數(shù)據(jù):學(xué)號為0015、姓名為陳婷、性別為女。INSERTINTOv_stu_iVALUES(‘0015’,’陳婷’,’女’)22.利用視圖v_stu_i刪除學(xué)號為0015的學(xué)生記錄。DELETEFROMv_stu_iWHERE(學(xué)號='0015')23.利用視圖v_stu_g修改姓名為劉衛(wèi)平的學(xué)生的高等數(shù)學(xué)的分?jǐn)?shù)為84。UPDATEv_stu_gSET分?jǐn)?shù)=84WHERE姓名='劉衛(wèi)平'AND課程名稱='高等數(shù)學(xué)'24.使用Transact-SQL語句DROPVIEW刪除視圖v_stu_c和v_stu_g。DROPVIEWv_stu_cDROPVIEWv_stu_g實(shí)驗6:數(shù)據(jù)完整性二、實(shí)驗內(nèi)容和操作步驟1.為studentsdb數(shù)據(jù)庫創(chuàng)建一個規(guī)則,限制所輸入的數(shù)據(jù)為7位0~9的數(shù)字。(1)復(fù)制student_info表命名為stu_phone,在stu_phone表中插入一列,列名為“電話號碼”。完成以下代碼實(shí)現(xiàn)該操作。SELECT*INTOstu_phoneFROMstudent_infoALTERTABLEstu_phoneADD電話號碼CHAR(7)NULLstu_phone表結(jié)構(gòu)如圖1-10所示。圖1-10stu_phone表結(jié)構(gòu)(2)創(chuàng)建一個規(guī)則phone_rule,限制所輸入的數(shù)據(jù)為7位0~9的數(shù)字。實(shí)現(xiàn)該規(guī)則的代碼為CREATERULEphone_ruleAS@phoneLIKE'[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'(3)使用系統(tǒng)存儲過程sp_bindrule將phone_rule規(guī)則綁定到stu_phone表的“電話號碼”列上。實(shí)現(xiàn)該操作的代碼為sp_bindrulephone_rule,'stu_phone.電話號碼'(4)輸入以下代碼,進(jìn)行一次插入操作:INSERTINTOstu_phone(學(xué)號,姓名,電話號碼)VALUES('0009','王國強(qiáng)','1234yyy')產(chǎn)生以下出錯信息:消息513,級別16,狀態(tài)0,第1行列的插入或更新與先前的CREATERULE語句所指定的規(guī)則發(fā)生沖突。該語句已終止。沖突發(fā)生于數(shù)據(jù)庫'studentsdb',表'dbo.stu_phone',列'電話號碼'。語句已終止。試分析:為什么會產(chǎn)生該出錯信息?如果要實(shí)現(xiàn)插入操作,應(yīng)修改INSERTINTO語句中的哪個值?phone_rule規(guī)則能否對其他操作(如DELETE)進(jìn)行規(guī)則檢查?2.創(chuàng)建一個規(guī)則stusex_rule,將其綁定到stu_phone表的“性別”列上,保證輸入的性別值只能是“男”或“女”。CREATERULEstusex_ruleAS@sexin('男','女')sp_bindrulestusex_rule,'stu_phone.性別'3.使用系統(tǒng)存儲過程sp_help查詢stusex_rule規(guī)則列表,使用sp_helptext查詢stusex_rule規(guī)則的文本,使用sp_rename將stusex_rule規(guī)則更名為stu_s_rule。sp_helpstusex_rulesp_helptextstusex_rulesp_renamestusex_rule,stu_s_rule4.刪除stu_s_rule規(guī)則。DROPRULEstu_s_rule5.在studentdb數(shù)據(jù)庫中,建立日期、貨幣和字符等數(shù)據(jù)類型的默認(rèn)對象。(1)在查詢設(shè)計器中,完成以下代碼,創(chuàng)建默認(rèn)對象df_date、df_char、df_money。--創(chuàng)建日期型默認(rèn)對象df_dateCREATEDEFAULTdf_dateAS'2006-GO--創(chuàng)建字符型默認(rèn)對象df_charCREATEDEFAULTdf_charAS'unknown'GO--創(chuàng)建貨幣型默認(rèn)對象df_moneyCREATEDEFAULTdf_moneyAS$100GO(2)輸入以下代碼,在studentsdb數(shù)據(jù)庫中創(chuàng)建stu_fee數(shù)據(jù)表。CREATETABLEstu_fee(學(xué)號char(10)NOTNULL,姓名char(8)NOTNULL,學(xué)費(fèi)money,交費(fèi)日期datetime,電話號碼char(7))表stu_fee的數(shù)據(jù)結(jié)構(gòu)如圖1-11所示。圖1-11stu_fee的數(shù)據(jù)結(jié)構(gòu)(3)使用系統(tǒng)存儲過程sp_bindefault將默認(rèn)對象df_date、df_char、df_money分別綁定在stu_fee表的“學(xué)費(fèi)”、“交費(fèi)日期”、“電話號碼”列上。sp_binderfaultdf_money,'stu_fee.學(xué)費(fèi)'GOsp_bindefaultdf_date,'stu_fee.交費(fèi)日期'GOsp_bindefaultdf_char,'stu_fee.電話號碼'GO(5)完成以下代碼解除默認(rèn)對象df_char的綁定,并刪除之。sp_unbindefault'stu_fee.電話號碼'DROPDEFAULTdf_char7.在studentsdb數(shù)據(jù)庫中用CREATETABLE語句創(chuàng)建表stu_con,并同時創(chuàng)建約束。(1)創(chuàng)建表的同時創(chuàng)建約束。表結(jié)構(gòu)如圖1-12所示。圖1-12要創(chuàng)建的表的結(jié)構(gòu)CREATETABLEstu_con( 學(xué)號char(4)NOTNULL, 姓名char(8)NULL, 性別char(2)NULL, 出生日期datetimeNULL, 家庭住址nvarchar(50)NULL)約束要求如下:將學(xué)號設(shè)置為主鍵(PRIMARYKEY),主鍵名為pk_sid。CREATEUNIQUECLUSTEREDINDEX[pk_sid]ON[stu_con]([學(xué)號])WITHDROP_EXISTINGON[PRIMARY]為姓名添加唯一約束(UNIQUE),約束名為uk_name。CREATEUNIQUEINDEX[uk_name]ON[stu_con]([姓名])WITHDROP_EXISTINGON[PRIMARY]為性別添加默認(rèn)約束(DEFAULT),默認(rèn)名稱為df_sex,其值為“男”。CREATEDEFAULTdf_sexAS'男'sp_bindefaultdf_sex,'stu_con.性別'④為出生日期添加屬性值約束(CHECK),約束名為ck_bday,其檢查條件為:出生日期>'1988-ALTERTABLEstu_conWITHNOCHECKADDCONSTRAINTck_bdayCHECK(出生日期>'1988-1(3)使用ALTERTABLE語句的DROPCONSTRAINT參數(shù)項在查詢設(shè)計器中刪除為stu_con表所建的約束。ALTERTABLEstu_conDROPCONSTRAINTck_bday9.在查詢設(shè)計器中,為studentsdb數(shù)據(jù)庫的grade表添加外鍵約束(FOREIGNKEY),要求將“學(xué)號”設(shè)置為外鍵,參照表為student_info,外鍵名稱為fk_sid。ALTERTABLEgradeADDCONSTRAINT Fk_sidFOREIGNKEY (學(xué)號)REFERENCESstudent_info(學(xué)號)(1)使用系統(tǒng)存儲過程sp_help查看grade表的外鍵信息。sp_helpfk_sik(3)使用查詢設(shè)計器刪除grade表的外鍵fk_sid。Altertablegradedropconstraintfk_sid實(shí)驗7:Transact-SQL程序設(shè)計二、實(shí)驗內(nèi)容和操作步驟3.使用SET命令將查詢結(jié)果集記錄數(shù)目賦值給int型局部變量@row。給下面代碼中的劃線處填上適當(dāng)?shù)膬?nèi)容,以完成上述操作。DECLARE@rowsintSET@rows=(SELECTCOUNT(*)FROMgrade)SELECT@rows--顯示@rows的值5.在studentsdb數(shù)據(jù)庫的student_info表中,以“性別”為分組條件,分別統(tǒng)計男生和女生人數(shù)。DECLARE@malein,@femaleintSET@male=(SELECTCOUNT(*)Fromstudent_infoWHERE性別=’男’)SET@female=(SELECTCOUNT(*)Fromstudent_infoWHERE性別=’女’)SELECT@male,@female6.在grade表中,使用適當(dāng)函數(shù)找出“高等數(shù)學(xué)”課程的最高分、最低分和平均分。declare@grademaxdecimal,@grademindecimal,@gradeavgdecimalset@grademax=(selectmax(分?jǐn)?shù))fromgradeINNERJOINCURRICULUMONGRADE.課程編號=CURRICULUM.課程編號wherecurriculum.課程名稱='高等數(shù)學(xué)')set@grademin=(selectmin(分?jǐn)?shù))fromgradeINNERJOINCURRICULUMONGRADE.課程編號=CURRICULUM.課程編號wherecurriculum.課程名稱='高等數(shù)學(xué)')set@gradeavg=(selectavg(分?jǐn)?shù))fromgradeINNERJOINCURRICULUMONGRADE.課程編號=CURRICULUM.課程編號wherecurriculum.課程名稱='高等數(shù)學(xué)')select@grademaxas'高等數(shù)學(xué)的最高分',@grademinas'高等數(shù)學(xué)的最低分',@gradeavgas'高等數(shù)學(xué)的平均分'7.定義一個datetime型局部變量@studate,以存儲當(dāng)前日期。計算student_info表中的學(xué)生的年齡,并顯示學(xué)生的姓名、年齡。在以下代碼的劃線部分填入適當(dāng)內(nèi)容,以實(shí)現(xiàn)上述功能。DECLARE@studatedatetimeSET@studate=getdate()--給@studate賦值為當(dāng)前日期SELECT姓名,Datediff(@studate)-year(出生日期)AS年齡FROMstudent_info9.在局部變量@stu_id中存儲了學(xué)號值。編寫代碼查詢學(xué)號為0001的學(xué)生的各科平均成績,如果平均分>=60則顯示“你的成績及格了,恭賀你?。 保駝t顯示“你的成績不及格”。IF((SELECTAVG(分?jǐn)?shù))FROMgradewhere學(xué)號='0001')<60)PRINT'你的成績不及格'ELSEPRINT'你的成績及格了,恭賀你??!'10.運(yùn)行以下代碼段,寫出運(yùn)行的結(jié)果。DECLARE@counterintSET@counter=1WHILE@counter<10BEGINSELECT'@counter的值現(xiàn)在為:'+CONVERT(CHAR(2),@counter)SET@counter=@counter+1END11.查詢grade表。如果分?jǐn)?shù)大于等于90,顯示A;如果分?jǐn)?shù)大于等于80小于90,顯示B;如果分?jǐn)?shù)大于等于70小于80,顯示C;如果分?jǐn)?shù)大于等于60小于70,顯示D;其他顯示E。在以下代碼的劃線部分填入適當(dāng)內(nèi)容完成上述功能。SELECT學(xué)號,分?jǐn)?shù),等級=CASEWHEN分?jǐn)?shù)>=90THEN'A'WHEN分?jǐn)?shù)>=80AND分?jǐn)?shù)<90THEN'B'WHEN分?jǐn)?shù)>=70AND分?jǐn)?shù)<80THEN'C'WHEN分?jǐn)?shù)>=60AND分?jǐn)?shù)<70THENDELSE'E'ENDFROMgrade12.計算grade表的分?jǐn)?shù)列的平均值。如果小于80,則分?jǐn)?shù)增加其值的5%;如果分?jǐn)?shù)的最高值超過95,則終止該操作。在以下代碼劃線處填入適當(dāng)?shù)膬?nèi)容以完成上述功能。WHILE(SELECTAVG(分?jǐn)?shù))FROMgrade)<80BEGINUPDATEgradeSET分?jǐn)?shù)=分?jǐn)?shù)*1.05if(SELECTMAX(分?jǐn)?shù))FROMgrade)>95BREAKELSECONTINUEEND13.編寫代碼計算并顯示@n=1+2+3+…+20。DECLARE@nint,@counterintSELECT@n=0,@counter=1WHILE@counter>0BEGINSET@n=@n+@counterSET@counter=@counter+1IF@counter<=20CONTINUEELSEBEGINPRINT'@n=1+2+3+…+20的值為:'PRINT@nBREAKENDEND14.編寫代碼計算并顯示1~100之間的所有完全平方數(shù)。例如,81=92,則稱81為完全平方數(shù)。declare@iint,@jintset@i=0set@j=1while(@j<=100)beginset@i=@j*@jprint@i/*打出素數(shù)*/set@j=@j+1end15.計算1~100以內(nèi)的所有素數(shù)。declare@iintdeclare@nintset@n=3print2while@n<=100beginselect@i=2while(@i<@n/2)beginif(@n/@i*@i!=@n)beginselect@i=@i+1continueendelsebreakendif(@i>=@n/2)beginprint@nendselect@n=@n+2end16.在studentsdb數(shù)據(jù)庫中,使用游標(biāo)查詢數(shù)據(jù)。(1)打開查詢設(shè)計器,聲明一個stu_cursor游標(biāo),要求返回student_info表中性別為“男”的學(xué)生記錄,且該游標(biāo)允許前后滾動和修改。DECLAREstu_cursorCURSORGLOBALSCROLLDYNAMICFORSELECT*FROMstudent_infoWHERE性別=’男’FORUPDATEOF出生日期(2)打開stu_cursor游標(biāo)。OPENstu_cursor(3)獲取并顯示所有數(shù)據(jù)。FETCHNEXTFROMstu_cursor/*取第一個數(shù)據(jù)行*/WHILE@@fetch_status=0/*檢查@@fetch_status是否還有數(shù)據(jù)可取*/BEGINFETCHNEXTFROMstu_cursorEND(4)關(guān)閉該游標(biāo)。CLOSEstu_cursor17.使用游標(biāo)修改數(shù)據(jù)。(1)打開stu_cursor游標(biāo)。(2)將姓馬的男同學(xué)的出生日期的年份加1。(3)關(guān)閉stu_cursor游標(biāo)。OPENstu_cursorFETCHNEXTFROMstu_cursor UPDATEstudent_infoSET出生日期=Dateadd(yy,1,出生日期)WHERECURRENTOFstu_cursorCLOSEstu_cursor實(shí)驗8:存儲過程和觸發(fā)器二、實(shí)驗內(nèi)容及步驟3.使用studentsdb數(shù)據(jù)庫中的student_info表、curriculum表、grade表。(1)創(chuàng)建一個存儲過程stu_grade,查詢學(xué)號為0001的學(xué)生的姓名、課程名稱、分?jǐn)?shù)。(2)執(zhí)行存儲過程stu_grade,查詢0001學(xué)生的姓名、課程名稱、分?jǐn)?shù)。(3)使用系統(tǒng)存儲過程sp_rename將存儲過程stu_grade更名為stu_g。CREATEPROCEDUREstu_gradeASSELECTa.學(xué)號,c.課程名稱,b.分?jǐn)?shù)FROMstudent_infoaINNERJOINgradebONa.學(xué)號=b.學(xué)號INNERJOINcurriculumcONb.課程編號=c.課程編號WHERE(a.學(xué)號='0001')EXECstu_gradesp_renamestu_grade,stu_g4.使用student_info表、curriculum表、grade表。(1)創(chuàng)建一個帶參數(shù)的存儲過程stu_g_p,當(dāng)任意輸入一個學(xué)生的姓名時,將從3個表中返回該學(xué)生的學(xué)號、選修的課程名稱和課程成績。(2)執(zhí)行存儲過程stu_g_p,查詢“劉衛(wèi)平”的學(xué)號、選修課程和課程成績。(3)使用系統(tǒng)存儲過程sp_helptext,查看存儲過程stu_g_p的文本信息。CREATEPROCEDUREstu_g_p@stu_namevarchar(8)ASSELECTa.學(xué)號,c.課程名稱,b.分?jǐn)?shù)FROMstudent_infoaINNERJOINgradebONa.學(xué)號=b.學(xué)號INNERJOINcurriculumcONb.課程編號=c.課程編號WHERE(a.姓名=@stu_name)EXECstu_g_p‘劉衛(wèi)平’sp_helptextstu_g_p5.使用student_info表。(1)創(chuàng)建一個加密的存儲過程stu_en,查詢所有男學(xué)生的信息。(2)執(zhí)行存儲過程stu_en,查看返回學(xué)生的情況。(3)使用Transact-SQL語句DROPPROCEDURE刪除存儲過程stu_en。CREATEPROCEDUREstu_enWITHENCRYPTIONASSELECT*FROMstudent_infoWHERE性別='男'EXECstu_enDROPPROCEDUREstu_en6.使用grade表。(1)創(chuàng)建一個存儲過程stu_g_r,當(dāng)輸入一個學(xué)生的學(xué)號時,通過返回輸出參數(shù)獲取該學(xué)生各門課程的平均成績。CREATEPROCstu_g_r@stu_novarchar(8)=NULL,@stu_scorerealOUTPUTASSELECT@stu_score=AVG(分?jǐn)?shù))FROMgradeWHERE(學(xué)號=@stu_no)(2)執(zhí)行存儲過程stu_g_r,輸入學(xué)號0002。DECLARE@scorerealEXECstu_g_r'0002',@scoreOUTPUT(3)顯示0002號學(xué)生的平均成績。SELECT@score8.為grade表建立一個名為insert_g_tr的INSERT觸發(fā)器,當(dāng)用戶向grade表中插入記錄時,如果插入的是在curriculum表中沒有的課程編號,則提示用戶不能插入記錄,否則提示記錄插入成功。在進(jìn)行插入測試時,分別輸入以下數(shù)據(jù):學(xué)號課程編號分?jǐn)?shù)00040003760005000769觀察插入數(shù)據(jù)時的運(yùn)行情況,說明為什么?CREATETIGGERinsert_g_trONgradeFORUPDATE,INSERTASDECLARE@fkc_idvarchar(8)SET@fkc_id=(SELECT課程編號FROMINSERTED)IFEXISTS(SELECT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 5《鋪滿金色巴掌的水泥道》教學(xué)設(shè)計-2024-2025學(xué)年三年級上冊語文統(tǒng)編版
- 1我是獨(dú)特的(教學(xué)設(shè)計)2023-2024學(xué)年統(tǒng)編版道德與法治六年級下冊
- 學(xué)校室內(nèi)油漆 合同范本
- 3《公民意味著什么》第2課時 教學(xué)設(shè)計-2024-2025學(xué)年道德與法治六年級上冊統(tǒng)編版
- Module 6 Unit 2(教學(xué)設(shè)計) 2024-2025學(xué)年外研版英語八年級上冊
- 買賣門合同范本
- 現(xiàn)場布置采購合同范本
- 3《我們班 他們班》 第1課時 教學(xué)設(shè)計-2024-2025學(xué)年道德與法治四年級上冊統(tǒng)編版
- 14 學(xué)習(xí)有方法 第一課時 教學(xué)設(shè)計-2023-2024學(xué)年道德與法治二年級下冊統(tǒng)編版
- 商品房買賣合同補(bǔ)充協(xié)議合同協(xié)議
- 技能人才評價新職業(yè)考評員培訓(xùn)在線考試(四川省)
- 金礦承包協(xié)議合同2024年
- 《有機(jī)化學(xué)》課程說課
- 軌道電路參數(shù)與狀態(tài)課件講解
- 2024年中華人民共和國企業(yè)所得稅年度納稅申報表(帶公式)20240301更新
- 2024年安徽省高考化學(xué)試卷(真題+答案)
- 現(xiàn)澆箱梁專項施工組織設(shè)計
- 結(jié)直腸癌治療研究進(jìn)展2024年
- 員工薪酬確認(rèn)書三篇
- DZ∕T 0148-2014 水文水井地質(zhì)鉆探規(guī)程(正式版)
- 新能源汽車電氣技術(shù) 課件 項目一 新能源汽車電氣維修基礎(chǔ)認(rèn)知
評論
0/150
提交評論