版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《數(shù)據(jù)庫(kù)系統(tǒng)原理》課程試驗(yàn)姓名:班級(jí):學(xué)號(hào):佛山科學(xué)技術(shù)學(xué)院計(jì)算機(jī)系12月
目錄TOC\o"1-3"\h\u15968一.試驗(yàn)需用表格 311469二.試驗(yàn)內(nèi)容 5316452.1SQL數(shù)據(jù)定義 5164102.2試驗(yàn)二SQL數(shù)據(jù)查詢(xún) 787772.3試驗(yàn)三連接、嵌套和集合查詢(xún) 11259762.4試驗(yàn)四SQL的數(shù)據(jù)更新 16134782.5試驗(yàn)五視圖的定義和維護(hù) 18151332.6試驗(yàn)六觸發(fā)器和存儲(chǔ)過(guò)程 2320768三.試驗(yàn)感想 27一.試驗(yàn)需用表格學(xué)生-課程數(shù)據(jù)庫(kù)xskc中用到的三個(gè)表文獻(xiàn)如下:學(xué)生表:StudentSno(學(xué)號(hào))Sname(姓名)Ssex(性別)Sage(年齡)Sdept(所在系)李勇男20CS(計(jì)算機(jī)科學(xué)系)劉晨女19CS(計(jì)算機(jī)科學(xué)系)王敏女18MA(數(shù)學(xué)系)張立男19IS(信息系)課程表:CourseCno(課程號(hào))Cname(課程名)Cpno(先修課)Ccredit(學(xué)分)1數(shù)據(jù)庫(kù)542數(shù)學(xué)23信息系統(tǒng)144操作系統(tǒng)635數(shù)據(jù)構(gòu)造746數(shù)據(jù)處理27PASCAL64學(xué)生選課表:SCSno(學(xué)號(hào))Cno(課程號(hào))Grade(成績(jī))192285388290380
二.試驗(yàn)內(nèi)容2.1SQL數(shù)據(jù)定義一、試驗(yàn)?zāi)康暮鸵?guī)定1.掌握運(yùn)用SQL查詢(xún)分析器和企業(yè)管理器進(jìn)行數(shù)據(jù)庫(kù)及基本表的定義、刪除與修改;2.掌握索引的建立與刪除的措施。二、試驗(yàn)內(nèi)容與環(huán)節(jié)(一)建立數(shù)據(jù)庫(kù)通過(guò)企業(yè)管理器或查詢(xún)分析器建立學(xué)生-課程數(shù)據(jù)庫(kù)xskc。createdatabasexskcon(name=xskc_data,filename='e:\sjksy\xskc_data.mdf')logon(name=xskc_log,filename='e:\sjksy\xskc_log.ldf')注:先在E:盤(pán)上建立一種文獻(xiàn)夾(例如:E:\sjksy),數(shù)據(jù)庫(kù)文獻(xiàn)保留到自建的文獻(xiàn)夾中。(二)基本表的定義、修改與刪除1.定義基本表運(yùn)用查詢(xún)分析器或企業(yè)管理器創(chuàng)立基本表,并輸入數(shù)據(jù)?!绢}1-01】建立一種學(xué)生表Student,它由學(xué)號(hào)Sno、姓名Sname、性別Ssex、年齡Sage、所在系Sdept五個(gè)屬性構(gòu)成。規(guī)定“學(xué)號(hào)”為主鍵,“姓名”不能為空,“性別”默認(rèn)值為“男”。CREATETABLEStudent(SnoCHAR(9)PRIMARYKEY,SnameCHAR(20)NOTNULL,SsexCHAR(2)DEFAULT‘男’,SageINT,SdeptCHAR(20));闡明:在MicrosoftSQLServer的查詢(xún)分析器(QueryAnalyzer)中使用單條SQL語(yǔ)句,其末尾不需要分號(hào)“;”作為命令結(jié)尾標(biāo)識(shí)。一般,SQLServer對(duì)大多數(shù)末尾帶有分號(hào)的SQL命令都能順利執(zhí)行,但對(duì)少數(shù)的SQL命令,末尾若帶分號(hào),則SQLServer會(huì)給出錯(cuò)誤信息提醒。例如,若在試驗(yàn)五的例1的SQL命令末尾加上一種分號(hào)“;”,SQLServer就會(huì)出現(xiàn)“Incorrectsyntaxnear';'”的提醒,雖然SQLServer實(shí)際上已經(jīng)執(zhí)行了該命令。【題1-02】建立課程表Course,它由課程號(hào)Cno、課程名Cname、先修課Cpno、Ccredit學(xué)分四個(gè)屬性構(gòu)成。規(guī)定“課程號(hào)”為主鍵,“課程名”屬性不能為空。CREATETABLECourse(CnoCHAR(4)PRIMARYKEY,CnameCHAR(40)NOTNULL,CpnoCHAR(4),CcreditINT);【題1-03】建立學(xué)生選修課表SC,包括學(xué)號(hào)Sno、課程號(hào)Cno、成績(jī)Grade三個(gè)字段。規(guī)定建立主鍵及與student、kc表聯(lián)接的外鍵,并創(chuàng)立檢查約束(Grade>=0andGrade<=100)。CREATETABLESC(SnoCHAR(9),CnoCHAR(4),GradeINT,PRIMARYKEY(Sno,Cno),F(xiàn)OREIGNKEY(Sno)REFERENCESStudent(Sno),FOREIGNKEY(Cno)REFERENCESCourse(Cno));2修改基本表運(yùn)用查詢(xún)分析器或企業(yè)管理器修改基本表?!绢}1-04】向基本表Student中增長(zhǎng)“入課時(shí)間”屬性列,其屬性名為S_entrance,數(shù)據(jù)類(lèi)型為日期型。ALTERTABLEStudentADDS_entranceDATETIME;
【題1-05】將Student表中Sage(年齡)的數(shù)據(jù)類(lèi)型改為SMALLINT型。ALTERTABLEStudentALTERCOLUMNSageSMALLINT;【題1-06】增長(zhǎng)課程名稱(chēng)必須取唯一值的約束條件。ALTERTABLECourseADDUNIQUE(Cname);【題1-07】將Student表的Sdept列容許空值的屬性更改為不容許為空。ALTERTABLEStudentALTERCOLUMNSdeptCHAR(20)NOTNULL;【題1-08】刪除Student表中的S_entrance列。ALTERTABLEStudentDROPCOLUMNS_entrance;3刪除基本表【題1-09】刪除Student表。DROPTABLEStudent;闡明:此表刪除后,請(qǐng)立即將其建立起來(lái),以便背面的例子使用。(三)索引的建立和刪除1建立索引【題1-10】在基本表Student的Sname(姓名)列上建立一種聚簇索引,并且Student中的物理記錄將按照Sname值的升序寄存。其語(yǔ)句為:CREATECLUSTEREDINDEXStu_SnameONStudent(Sname);【題1-11】分別為學(xué)生-課程數(shù)據(jù)庫(kù)中的Student,Course,SC三個(gè)表建立索引。其中Student表按Sno(學(xué)號(hào))升序建唯一索引,Course表按Cno(課程號(hào))升序建唯一索引,SC表按Sno(學(xué)號(hào))升序和Cno(課程號(hào))號(hào)降序建唯一索引。其語(yǔ)句為:CREATEUNIQUEINDEXStu_SnoONStudent(Sno);CREATEUNIQUEINDEXCou_CnoONCourse(Cno);CREATEUNIQUEINDEXSCnoONSC(SnoASC,CnoDESC);2刪除索引【題1-12】刪除Student表的Stu_Sname索引。DROPINDEXStudent.Stu_Sname;
2.2試驗(yàn)二SQL數(shù)據(jù)查詢(xún)一、試驗(yàn)?zāi)康暮鸵?guī)定1.掌握SQLServer查詢(xún)分析器的使用措施,加深對(duì)SQL查詢(xún)語(yǔ)句的理解。2.純熟掌握查詢(xún)語(yǔ)句的一般格式。3.純熟掌握數(shù)據(jù)查詢(xún)中的排序、分組、記錄、計(jì)算和集合的操作措施。二、試驗(yàn)內(nèi)容及環(huán)節(jié)1無(wú)條件查詢(xún)【題2-01】查詢(xún)?nèi)w學(xué)生的詳細(xì)記錄。這是一種無(wú)條件的選擇查詢(xún),其命令為:SELECT*/*這里的“*”等價(jià)于ALL*/FROMStudent;其成果為Student表中的所有數(shù)據(jù)?!绢}2-02】查詢(xún)?nèi)w學(xué)生的姓名(Sname)、學(xué)號(hào)(Sno)、所在系(Sdept)。這是一種無(wú)條件的投影查詢(xún),其命令為:SELECTSname,Sno,SdeptFROMStudent;【題2-03】查詢(xún)?nèi)w學(xué)生的學(xué)號(hào)(Sno)、姓名(Sname)及出生年份。由于SELECT子句的<目的列體現(xiàn)式>不僅可以是表中的屬性列,也可以是體現(xiàn)式,故可以查詢(xún)通過(guò)計(jì)算的值。其命令為:SELECTSno,Sname,-Sageas‘-Sage’FROMStudent;【題2-04】查詢(xún)?nèi)w學(xué)生的學(xué)號(hào)、姓名、出生年份和所在系,規(guī)定用小寫(xiě)字母表達(dá)所有系名。其命令為:SELECTSno,Sname,-Sage'YearofBirth',LOWER(Sdept)SdeptFROMStudent;【題2-05】查詢(xún)選修了課程的學(xué)生學(xué)號(hào)。其命令為:SELECTDISTINCTSnoFROMSC;2條件查詢(xún)【題2-06】查詢(xún)數(shù)學(xué)系(MA)全體學(xué)生的學(xué)號(hào)(Sno)和姓名(Sname)。其命令為:SELECTSno,SnameFROMStudentWHERESdept='MA';【題2-07】查詢(xún)考試成績(jī)有不及格的學(xué)生的學(xué)號(hào)。SELECTDISTINCTSnoFROMSCWHEREGrade<60;【題2-08】查詢(xún)所有年齡在20歲如下的學(xué)生姓名(Sname)及年齡(Sage)。其命令為:SELECTSname,SageFROMStudentWHERESage<20;【題2-09】查詢(xún)所有年齡在18~20歲(包括18歲和20歲)之間的學(xué)生姓名(Sname)及年齡(Sage)。其命令為:SELECTSname,SageFROMStudentWHERESage=18ANDSage<=22;或SELECTSname,SageFROMStudentWHERESageBETWEEN18AND22;【題2-10】查詢(xún)年齡不在18-20歲之間的學(xué)生姓名(Sname)及年齡(Sage)。其命令為:SELECTSname,SageFROMStudentWHERESageNOTBETWEEN18AND20;【例11】查詢(xún)計(jì)算機(jī)系、數(shù)學(xué)系和信息系學(xué)生的學(xué)號(hào)(Sno)、姓名(Sname)和性別(Ssex)。其命令為:SELECTSno,Sname,Ssex
FROMStudentWHERESdeptIN('CS','MA','IS');等價(jià)于:SELECTSno,Sname,SsexFROMStudentWHERESdept='CS'ORSdept='MA'ORSdept='IS';【例12】查詢(xún)既不是信息系(IS)、數(shù)學(xué)系(MA)、也不是計(jì)算機(jī)系(CS)的學(xué)生的姓名(Sname)和性別(Ssex)。其命令為:SELECTSname,SsexFROMStudentWHERESdeptNOTIN('IS','MA','CS');【例13】查詢(xún)所有姓劉的學(xué)生的姓名(Sname)、學(xué)號(hào)(Sno)和性別(Ssex)。其命令為:SELECTSname,Sno,SsexFROMStudentWHERESnameLIKE'劉%';【例14】查詢(xún)姓“劉”且全名為4個(gè)中文的學(xué)生的姓名(Sname)和所在系(Sdept)。其命令為:SELECTSname,Sdept
FROMStudentsWHERESnameLIKE'劉____';【例15】查詢(xún)所有不姓劉的學(xué)生姓名(Sname)和年齡(Sage)。SELECTSname,SageFROMStudentsWHERESnameNOTLIKE'劉%';【例16】查詢(xún)課程名為“DB_設(shè)計(jì)”的課程號(hào)(Cno)和學(xué)分(Ccredit)。其命令為:SELECTCno,CcreditFROMCourseWHERECnameLIKE'DB\_設(shè)計(jì)'ESCAPE'\';【例17】查詢(xún)以"DB_"開(kāi)頭,且倒數(shù)第2個(gè)中文字符為“設(shè)”的課程的詳細(xì)狀況。其命令為:SELECT*FROMCourseWHERECnameLIKE'DB\_%設(shè)__'ESCAPE'\';【例18】假設(shè)某些學(xué)生選修課程后沒(méi)有參與考試,因此有選課記錄,但沒(méi)有考試成績(jī)。試查詢(xún)?nèi)狈Τ煽?jī)的學(xué)生的學(xué)號(hào)(Sno)和對(duì)應(yīng)的課程號(hào)(Cno)。其命令為:SELECTSno,CnoFROMReportsWHEREGradeISNULL;【例19】查詢(xún)所有有成績(jī)的學(xué)生學(xué)號(hào)(Sno)和課程號(hào)(Cno)。其命令為:SELECTSno,Cno
FROMSC
WHEREGradeISNOTNULL;【題20】查詢(xún)計(jì)算機(jī)系年齡在20歲如下的學(xué)生姓名。3查詢(xún)成果排序例24查詢(xún)選修了3號(hào)課程的學(xué)生的學(xué)號(hào)(Sno)和成績(jī)(Grade),并按成績(jī)降序排列。其命令為:SELECTSno,GradeFROMSCWHERECno='3'ORDERBYGradeDESC;【例25】查詢(xún)?nèi)w學(xué)生狀況,查詢(xún)成果按所在系的系名(Sdpet)升序排列,同一系中的學(xué)生按年齡(Sage)降序排列。其命令為:SELECT*FROMStudentORDERBYSdept,SageDESC;4集函數(shù)的使用例26查詢(xún)學(xué)生總?cè)藬?shù)。其命令為:SELECTCOUNT(*)FROMStudent;例27查詢(xún)選修了課程的學(xué)生人數(shù)。其命令為:SELECTCOUNT(DISTINCTSno)FROMSC;例28計(jì)算選修2號(hào)課程的學(xué)生平均成績(jī)。其命令為:SELECTAVG(Grade)FROMSCWHERECno='2';例29查詢(xún)選修2號(hào)課程的學(xué)生最高分?jǐn)?shù)。其命令為:SELECTMAX(Grade)FROMSCWHERECno='2';例30查詢(xún)學(xué)生15122選修課程的總學(xué)分?jǐn)?shù)。其命令為:SELECTSUM(Ccredit)FROMSC,CourseWHERESno='15122'ANDSC.Cno=Course.Cno;5查詢(xún)成果分組例31求各個(gè)課程號(hào)(Cno)及對(duì)應(yīng)的選課人數(shù)。其命令為:SELECTCno,COUNT(Sno)CntSnoFROMSCGROUPBYCno;例32查詢(xún)選修了3門(mén)或3門(mén)以上課程的學(xué)生學(xué)號(hào)(Sno)。其命令為:SELECTSnoFROMReportsGROUPBYSnoHAVINGCOUNT(Cno)>3
2.3試驗(yàn)三連接、嵌套和集合查詢(xún)一、試驗(yàn)?zāi)康暮鸵?guī)定1.掌握SQLServer查詢(xún)分析器的使用措施,加深對(duì)SQL查詢(xún)語(yǔ)句的理解。2.純熟掌握查詢(xún)語(yǔ)句的一般格式。3.純熟掌握連接、嵌套和集合查詢(xún)的使用。二、試驗(yàn)內(nèi)容及環(huán)節(jié)(一)連接查詢(xún)1不一樣表之間的連接查詢(xún)【題3-01】查詢(xún)每個(gè)學(xué)生及其選修課程的狀況。本查詢(xún)實(shí)際上是波及Student與SC兩個(gè)表的連接操作。這兩個(gè)表之間的聯(lián)絡(luò)是通過(guò)公共屬性Sno實(shí)現(xiàn)的,因此,其操作命令為:SELECTStudent.*,SC.*FROMStudent,SCWHEREStudent.Sno=SC.Sno;闡明:若在以上等值連接中把目的列中反復(fù)的屬性列去掉則為自然連接X(jué)E"自然連接",其命令為SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,GradeFROMStudent,SCWHEREStudent.Sno=SC.Sno;2自身連接【例35】查`詢(xún)每一門(mén)課的間接先修課(即先修課的先修課)。在Course表關(guān)系中,只有每門(mén)課的直接先修課信息,而沒(méi)有先修課的先修課。要得到這個(gè)信息,必須先對(duì)一門(mén)課找到其先修課,再按此先修課的課程號(hào),查找它的先修課程。這就需要要將Course表與其自身連接。為以便連接運(yùn)算,這里為Course表取兩個(gè)別名分別為A,B。則完畢該查詢(xún)的SQL語(yǔ)句為:SELECTA.Cno,A.Cname,B.CpnoFROMCourseA,CourseBWHEREA.Cpno=B.Cno;3外連接【例36】把例33中的等值連接改為左連接。該左連接操作在SQLServer中的命令格式為:SELECTStudent.Sno,Sname,Ssex,Sdept,Cno,GradeFROMStudentLEFTJOINSCONStudent.Sno=SC.Sno;闡明:以上左連接操作也可以用如下的右連接操作替代,其成果完全同樣。SELECTStudent.Sno,Sname,Ssex,Sdept,Cno,GradeFROMSCRIGHTJOINStudentONSC.Sno=Student.Sno;4復(fù)合條件連接【例37】【例38】查詢(xún)每個(gè)學(xué)生的學(xué)號(hào)(Sno)、姓名(Sname)、選修的課程名(Cname)及成績(jī)(Grade)。本查詢(xún)波及到三個(gè)表的連接操作,完畢該查詢(xún)的SQL語(yǔ)句如下:SELECTStudent.Sno,Sname,Cname,GradeFROMStudent,SC,CourseWHEREStudent.Sno=SC.SnoANDSC.Cno=Course.Cno;(二)嵌套查詢(xún)1帶謂詞IN的嵌套查詢(xún)【例39】查詢(xún)與“李偉”在同一種系學(xué)習(xí)的學(xué)生學(xué)號(hào)(Sno)、姓名(Sname)和系名(Sdept)。該查詢(xún)可構(gòu)造嵌套查詢(xún)實(shí)現(xiàn),其SQL語(yǔ)句如下:SELECTSno,Sname,SdeptFROMStudentWHERESdeptIN(SELECTSdeptFROMStudentWHERESname=’李偉’);闡明:本例中的查詢(xún)也可以用自身連接來(lái)完畢,其SQL語(yǔ)句如下:SELECTA.Sno,A.Sname,A.SdeptFROMStudentA,StudentBWHEREA.Sdept=B.SdeptANDB.Sname=’李偉’;【例40】查詢(xún)選修了編號(hào)為“2”的課程的學(xué)生姓名(Sname)和所在系(Sdept)。SELECTSname,SdeptFROMStudentsWHERESnoIN(SELECTSnoFROMSCWHERECno='2');【例41】查詢(xún)選修了課程名為“數(shù)據(jù)構(gòu)造”的學(xué)生學(xué)號(hào)(Sno)和姓名(Sname)。本查詢(xún)波及學(xué)號(hào)、姓名和課程名(Cname)三個(gè)屬性。學(xué)號(hào)和姓名寄存在Student表中,課程名的寄存在Course表中,但Student與Course兩個(gè)表之間沒(méi)有公共屬性,必須通過(guò)SC表建立它們之間的聯(lián)絡(luò)。因此本查詢(xún)實(shí)際上波及三個(gè)關(guān)系的連接操作。SELECTSno,Sname/*③最終在Studen關(guān)系中*/FROMStudent/*取出Sno和Sname*/WHERESnoIN(SELECTSno/*②然后在SC關(guān)系中找出*/FROMSC/*選修了3號(hào)課程的學(xué)生學(xué)號(hào)*/WHERECnoIN(SELECTCno/*①首先在Course關(guān)系中*/FROMCourse/*找出“數(shù)據(jù)構(gòu)造”的課程號(hào)*/WHERECname=‘?dāng)?shù)據(jù)構(gòu)造’));/*成果為5號(hào)*/闡明:本查詢(xún)同樣可以用連接查詢(xún)實(shí)現(xiàn):SELECTS.Sno,SnameFROMStudentS,SCR,CourseCWHERES.Sno=R.SnoANDR.Cno=C.CnoANDC.Cname='數(shù)據(jù)構(gòu)造';2帶有比較運(yùn)算符的嵌套查詢(xún)【例42】將例39改為帶有比較運(yùn)算符的嵌套查詢(xún)。由于一種學(xué)生只也許在一種系學(xué)習(xí),因此子查詢(xún)的成果是一種值,因此可以用=替代IN,其SQL語(yǔ)句如下:SELECTSno,Sname,SdeptFROMStudentWHERESdept=(SELECTSdeptFROMStudentWHERESname=’李偉’);3帶謂詞ANY或ALL的嵌套查詢(xún)【例43】查詢(xún)計(jì)算機(jī)系(CS)的不超過(guò)自動(dòng)化系所有學(xué)生的年齡的學(xué)生姓名(Sname)和年齡(Sage)。其查詢(xún)命令為SELECTSname,SageFROMStudentWHERESdept<>'CS'ANDSage<=ALL(SELECTSageFROMStudentWHERESdept='CS');闡明:本查詢(xún)也可以用集函數(shù)來(lái)實(shí)現(xiàn)。其SQL語(yǔ)句如下:SELECTSname,SageFROMStudentWHERESdept<>'CS'ANDSage<=(SELECTMIN(Sage)FROMStudentWHERESdept='CS');4帶謂詞EXISTS的嵌套查詢(xún)【例44】查詢(xún)所有選修了編號(hào)為“1”課程的學(xué)生姓名(Sname)和所在系(Sdept)。本查詢(xún)的SQL語(yǔ)句是:SELECTSname,SdeptFROMStudentWHEREEXISTS(SELECT*FROMSCWHERESno=Student.SnoANDCno='1');【例45】將例39改為帶謂詞EXISTS的查詢(xún),其SQL語(yǔ)句如下SELECTSno,Sname,SdeptFROMStudentAWHEREEXISTS(SELECT*FROMStudentsBWHEREB.Sdept=A.SdeptANDB.Sname=’李偉’);【例46】查詢(xún)選修了所有課程的學(xué)生姓名(Sname)和所在系。由于沒(méi)有全稱(chēng)量詞,可將題目的意思轉(zhuǎn)換成等價(jià)的用存在量詞的形式:查詢(xún)這樣的學(xué)生,沒(méi)有一門(mén)課程是他不選修的。其SQL語(yǔ)句為:SELECTSname,SdeptFROMStudentWHERENOTEXISTS(SELECT*FROMCourseWHERENOTEXISTS(SELECT*FROMSCWHERESno=Student.SnoANDCno=Course.Cno));(三)集合查詢(xún)【例48】查詢(xún)計(jì)算機(jī)系(CS)的學(xué)生或年齡不不小于20歲的學(xué)生信息。SELECT*FROMStudentWHERESdept='CS'UNIONSELECT*FROMStudentWHERESage<=20;【例49】查詢(xún)計(jì)算機(jī)系(CS)的學(xué)生且年齡不不小于20歲的學(xué)生的交集,這實(shí)際上就是查詢(xún)數(shù)學(xué)系中年齡不不小于20歲的學(xué)生。SELECT*FROMStudentWHERESdept='CS'ANDSage<=20;【例50】查詢(xún)計(jì)算機(jī)系的學(xué)生與年齡不不小于20歲的學(xué)生的差集。本查詢(xún)的等價(jià)說(shuō)法是,查詢(xún)數(shù)學(xué)系中年齡不小于20歲的學(xué)生。SELECT*FROMStudentWHERESdept='CS'ANDSage>20;
2.4試驗(yàn)四SQL的數(shù)據(jù)更新一、試驗(yàn)?zāi)康暮鸵?guī)定掌握SQL數(shù)據(jù)插入、修改和刪除語(yǔ)句的一般格式和使用措施。二、試驗(yàn)內(nèi)容及環(huán)節(jié)1.插入數(shù)據(jù)【題4-01】將學(xué)生陳冬的信息(學(xué)號(hào):15128;姓名:陳冬;性別:男;所在系:IS;年齡:18歲)插入到Student表中。INSERTINTOStudent(Sno,Sname,Ssex,Sdept,Sage)VALUES(‘15128’,’陳冬’,’男’,’IS’,18);或INSERTINTOStudent(Sno,Sname,Ssex,Sage,Sdept)VALUES(‘15128’,’陳冬’,’男’,18,’IS’);或INSERTINTOStudentVALUES(‘15128’,’陳冬’,’男’,18,’IS’);【題4-02】插入一條選課記錄(’15128’,’1’)INSERTINTOSC(Sno,Cno)VALUES(‘15128’,’1’);【題4-03】設(shè)數(shù)據(jù)庫(kù)中已經(jīng)有一種關(guān)系History_Student,其關(guān)系模式與Student完全同樣,試將關(guān)系Student中的所有元組插入到關(guān)系History_Student中去,其SQL命令為:INSERTINTOHistory_StudentSELECT*FROMStudent;【例4-04】對(duì)每一種系,求學(xué)生的平均年齡,并把成果存入表文獻(xiàn)Dept_age中。Dept_age表文獻(xiàn)屬性為:Sdept(系名)、Avg_age(平均年齡)。INSERTINTODept_age(Sdept,Avg_age)SELECTSdept,AVG(Sage)FROMStudentGROUPBYSdept;2.修改數(shù)據(jù)【題4-05】將學(xué)號(hào)為“15121”的學(xué)生年齡改為22歲。即要修改滿(mǎn)足條件的一種元組的屬性值。UPDATEStudentSETSage=22WHERESno=’15121’;【題4-06】將所有學(xué)生的年齡增長(zhǎng)1歲。即要修改多種元組的值。UPDATEStudentSETSage=Sage+1;【題4-07】將計(jì)算機(jī)科學(xué)系所有學(xué)生的成績(jī)置零。由于學(xué)生所在系的信息在Student表中,而學(xué)習(xí)成績(jī)?cè)赟C表中,因此,可以將SELECT子查詢(xún)作為WHERE子句的條件體現(xiàn)式。故該更新規(guī)定的SQL命令為:UPDATESCSETGrade=0WHERE‘CS’=(SELECTSdeptFROMStudentWHEREStudent.Sno=SC.Sno);3.刪除數(shù)據(jù)【題4-08】刪除學(xué)號(hào)為15128的學(xué)生記錄。DELETEFROMStudentWHERESno=’15128’;【題4-09】刪除所有學(xué)生的選課記錄。DELETEFROMSC;這條DELETE語(yǔ)句將刪除SC的所有元組,使SC成為空表?!绢}4-10】刪除計(jì)算機(jī)科學(xué)系所有學(xué)生的選課記錄。DELETEFROMSCWHERE‘CS’=(SELECTSdeptFROMStudentWHEREStudent.Sno=SC.Sno);
2.5試驗(yàn)五視圖的定義和維護(hù)一、試驗(yàn)?zāi)康暮鸵?guī)定1.掌握SQL視圖建立、修改和刪除;2.掌握SQL視圖查詢(xún)。二、試驗(yàn)內(nèi)容措施一:運(yùn)用SQL語(yǔ)言實(shí)現(xiàn)視圖的建立、刪除、查詢(xún)、更新(一)定義視圖1建立視圖【題5-01】建立數(shù)學(xué)系學(xué)生的視圖,并規(guī)定進(jìn)行修改和插入操作時(shí)仍需保證該視圖只有數(shù)學(xué)系(MA)的學(xué)生,視圖的屬性名為Sno,Sname,Sage,Sdept。CREATEVIEWC_StudentASSELECTSno,Sname,Sage,SdeptFROMStudentWHERESdept=’MA’WITHCHECKOPTION【題5-02】建立學(xué)生的學(xué)號(hào)(Sno)、姓名(Sname)、選修課程名(Cname)及成績(jī)(Grade)的視圖。本視圖由三個(gè)基本表的連接操作導(dǎo)出,其SQL語(yǔ)句如下:CREATEVIEWStudent_CRASSELECTStudent.Sno,Sname,Cname,GradeFROMStudent,SC,CourseWHEREStudent.Sno=SC.SnoANDSC.Cno=Course.Cno【題5-03】定義一種反應(yīng)學(xué)生出生年份的視圖。CREATEVIEWStudent_birth(Sno,Sname,Sbirth)ASSELECTSno,Sname,-SageFROMStudent2刪除視圖【題5-04】刪除視圖Student_birth。DROPVIEWStudent_birth;(二)查詢(xún)視圖【題5-05】在數(shù)學(xué)系的學(xué)生視圖C_Student中找出年齡(Sage)不不小于20歲的學(xué)生姓名(Sname)和年齡(Sage)。SELECTSname,SageFROMC_StudentWHERESage<20;闡明:本例轉(zhuǎn)換后的查詢(xún)語(yǔ)句為:SELECTSname,SageFROMStudentWHERESdept=’MA’ANDSage<20;【題5-06】在Student_CR視圖中查詢(xún)成績(jī)?cè)?5分以上的學(xué)生學(xué)號(hào)(Sno)、姓名(Sname)和課程名稱(chēng)(Cname)。SELECTSno,Sname,CnameFROMStudent_CRWHEREGrade>85;(三)更新視圖【題5-07】將數(shù)學(xué)系(MA)學(xué)生視圖C_Student中學(xué)號(hào)為15123的學(xué)生姓名改為“黃?!薄PDATEC_StudentSETSname='黃海'WHERESno='15123';闡明:DBMS自動(dòng)轉(zhuǎn)換為對(duì)基本表的更新語(yǔ)句如下:UPDATEStudentSETSname='黃海'WHERESno='15123'ANDSdept='數(shù)學(xué)';【題5-08】向數(shù)學(xué)系學(xué)生視圖C_Student中插入一種新的學(xué)生記錄,其中學(xué)號(hào)為“15124”,姓名為“王?!?,年齡為20歲。INSERTINTOC_StudentVALUES('15124','王海',20,’MA’);【題5-09】刪除數(shù)學(xué)系學(xué)生視圖C_Student中學(xué)號(hào)為“15124”的記錄。DELETEFROMC_StudentWHERESno=’15124’措施二:運(yùn)用企業(yè)管理器和視圖創(chuàng)立向?qū)?shí)現(xiàn)視圖的建立、刪除、查詢(xún)、更新視圖是根據(jù)子模式建立的虛擬表。一種視圖可以由一種表構(gòu)造,也可以由多種表構(gòu)造。運(yùn)用企業(yè)管理器和視圖創(chuàng)立向?qū)нM(jìn)行創(chuàng)立,查看和修改視圖就如同對(duì)表的操作同樣,非常輕易。1.創(chuàng)立視圖下面運(yùn)用了SQLServer中提供的視圖創(chuàng)立向?qū)?,?lái)實(shí)現(xiàn)建立計(jì)算機(jī)科學(xué)系(CS)選修了1號(hào)課程的學(xué)生視圖。(1)打開(kāi)企業(yè)管理器窗口,確認(rèn)服務(wù)器,打開(kāi)數(shù)據(jù)庫(kù)文獻(xiàn)夾,選中新視圖所在的數(shù)據(jù)庫(kù)(此例為xskc)。(2)選擇菜單:[工具]|[向?qū)(3)在如圖5-1所示的向?qū)нx擇對(duì)話框中,單擊數(shù)據(jù)庫(kù)左邊的“+”號(hào),使之展開(kāi)。選擇“創(chuàng)立視圖向?qū)А表?xiàng),單擊“確定”按鍵。圖5-1向?qū)нx擇對(duì)話框(4)進(jìn)入創(chuàng)立視圖向?qū)Ш?,首先出現(xiàn)的是歡迎使用創(chuàng)立視圖向?qū)?duì)話框,其中簡(jiǎn)樸簡(jiǎn)介了該向?qū)У墓δ堋螕簟跋乱徊健焙?,就?huì)出現(xiàn)選擇數(shù)據(jù)庫(kù)對(duì)話框。(5)在選擇數(shù)據(jù)庫(kù)對(duì)話框中,選擇視圖所屬的數(shù)據(jù)庫(kù)。本例的數(shù)據(jù)庫(kù)為“xskc”。單擊“下一步”按鍵,則進(jìn)入選擇表對(duì)話框。(6)在選擇表對(duì)話框中,列出了指定數(shù)據(jù)庫(kù)中所有顧客定義的表。顧客可以從中選擇構(gòu)造視圖所需的一種表或者多種表,被選中的表成為構(gòu)造視圖的參照表。選擇構(gòu)造視圖參照表的措施是:用鼠標(biāo)單擊表后的“包括在視圖中”列,使復(fù)選框?yàn)檫x中狀態(tài)。在本例的數(shù)據(jù)庫(kù)中選中學(xué)生表(Student)和選課表(SC)。單擊“下一步”按鍵,則進(jìn)入選擇對(duì)話框。(7)列選擇對(duì)話框中以表格形式列出了創(chuàng)立視圖參照表的所有屬性,每個(gè)屬性占表的一行,創(chuàng)立視圖參照屬性可以在表格中選出。選擇視圖參照屬性的措施是用鼠標(biāo)單擊屬性名后邊的“選擇列”列,使復(fù)選框?yàn)檫x中狀態(tài)。本例中Student.Sno、Student.Sname、SC.Grade屬性要被選中。單擊“下一步”按鍵,進(jìn)入創(chuàng)立視圖的定義限制對(duì)話框,如圖5-2所示。圖5-2定義限制對(duì)話框(8)在定義限制對(duì)話框中,輸入表的連接和元組選擇條件。本例輸入:WHERESdept=’CS’andStudent.Sno=SC.SnoandSC.Cno=’1’。單擊“下一步”按鍵,出現(xiàn)視圖名對(duì)話框。(9)在輸入視圖名對(duì)話框中輸入所建視圖的標(biāo)識(shí)名。本例的視圖名為“CSSC-View”。單擊“下一步”按鍵,則出現(xiàn)視圖創(chuàng)立完畢對(duì)話框。在完畢對(duì)話框中給出了根據(jù)前面對(duì)話框輸入的內(nèi)容譯成的SQL語(yǔ)句。您可以認(rèn)真閱讀該SQL語(yǔ)句,假如發(fā)現(xiàn)與規(guī)定有不符合之處可以直接進(jìn)行修改。確認(rèn)無(wú)誤后單擊“完畢”按鈕。隨即出現(xiàn)一種告知顧客已成功創(chuàng)立視圖的信息框,單擊“確認(rèn)”按鈕后,整個(gè)創(chuàng)立視圖工作就完畢了。2.查看和修改視圖視圖創(chuàng)立好后,就可以運(yùn)用它進(jìn)行查詢(xún)信息了。假如發(fā)現(xiàn)視圖的構(gòu)造不能很好地滿(mǎn)足規(guī)定,還可以在企業(yè)管理器對(duì)它進(jìn)行修改。在企業(yè)管理器中修改視圖構(gòu)造需要首先選擇服務(wù)器,數(shù)據(jù)庫(kù),并使數(shù)據(jù)庫(kù)展開(kāi),然后用鼠標(biāo)右擊要修改的視圖,在彈出的菜單上選擇“設(shè)計(jì)視圖”項(xiàng),則彈出一種視圖設(shè)計(jì)對(duì)話框,如圖5-3所示。當(dāng)對(duì)其修改完畢后關(guān)閉窗口,新的視圖構(gòu)造就會(huì)取代原先的構(gòu)造。圖5-3
2.6試驗(yàn)六觸發(fā)器和存儲(chǔ)過(guò)程一、試驗(yàn)?zāi)康?.通過(guò)試驗(yàn)使學(xué)生加深對(duì)數(shù)據(jù)完整性的理解,學(xué)會(huì)創(chuàng)立和使用觸發(fā)器。2.純熟創(chuàng)立存儲(chǔ)過(guò)程,體會(huì)存儲(chǔ)過(guò)程的作用。二、試驗(yàn)內(nèi)容1.觸發(fā)器①在學(xué)生表Student中定義一種觸發(fā)器tri1,保證新添加的學(xué)生的年齡(Sage)在16~25歲之間。②在成績(jī)表SC中定義一種觸發(fā)器tri2,當(dāng)修改一種記錄時(shí),保證此記錄的成績(jī)(Grade)在0~100分之間。③在學(xué)生表Student中創(chuàng)立一種觸發(fā)器tri2,當(dāng)刪除學(xué)生表Student中學(xué)生時(shí),自動(dòng)刪除成績(jī)表SC中對(duì)應(yīng)學(xué)生的選課記錄。④在學(xué)生表Student中創(chuàng)立一種觸發(fā)器tri4,當(dāng)修改學(xué)生表Student中學(xué)生的學(xué)號(hào)時(shí),自動(dòng)修改成績(jī)表SC中的對(duì)應(yīng)學(xué)號(hào)值。并驗(yàn)證該觸發(fā)器與否可以正常工作。⑤在學(xué)生表Student中創(chuàng)立一種觸發(fā)器tri5,當(dāng)刪除學(xué)生表Student中學(xué)生時(shí),自動(dòng)刪除成績(jī)表SC中對(duì)應(yīng)學(xué)生的選課記錄;當(dāng)修改學(xué)生表Student中學(xué)生的學(xué)號(hào)時(shí),自動(dòng)修改成績(jī)表SC中的對(duì)應(yīng)學(xué)號(hào)值。并驗(yàn)證該觸發(fā)器與否可以正常工作。2.存儲(chǔ)過(guò)程①運(yùn)用存儲(chǔ)過(guò)程查找Student表中所有人的記錄②運(yùn)用存儲(chǔ)過(guò)程查找Student表中某學(xué)號(hào)的記錄③運(yùn)用存儲(chǔ)過(guò)程查找Student表中某學(xué)號(hào)、某門(mén)課程的記錄④計(jì)算出某學(xué)生的平均分⑤創(chuàng)立一種帶返回值的存儲(chǔ)過(guò)程,返回某人的平均成績(jī)⑥創(chuàng)立一種存儲(chǔ)過(guò)程pro6將課程中某門(mén)課程的學(xué)分修改為指定的值,其中某門(mén)課程的課程號(hào)、指定的值通過(guò)參數(shù)傳遞。并多次調(diào)用執(zhí)行該存儲(chǔ)過(guò)程來(lái)修改不一樣的課程的學(xué)分值。三、詳細(xì)實(shí)現(xiàn)1.觸發(fā)器①在學(xué)生表Student中定義一種觸發(fā)器tri1,保證新添加的學(xué)生的年齡(Sage)在16~25歲之間?!緞?chuàng)立觸發(fā)器】createtriggertri1onstudentforinsertasif(selectSagefrominserted)>25or(selectSagefrominserted)<16beginprint‘年齡在16-25歲之間’rollbackend【調(diào)用觸發(fā)器】insertintoStudentvalues('31001','王濤','男',30,'IS')②在成績(jī)表SC中定義一種觸發(fā)器tri2,當(dāng)修改一種記錄時(shí),保證此記錄的成績(jī)(Grade)在0~100分之間。createtriggertri2onSCforupdateasifnotexists(select*frominsertedwhereGradebetween0and100)print‘成績(jī)應(yīng)在0-100分之間’rollback注:就是插入語(yǔ)句后,假如inserted表(插入或更新影響行構(gòu)成的表)內(nèi)的值不在0-100之間,就撤銷(xiāo)插入。【調(diào)用觸發(fā)器】updateSCsetGrade=120whereSno='15122'
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年私人車(chē)輛抵押融資租賃管理服務(wù)協(xié)議范本3篇
- 玩具主題項(xiàng)目課程設(shè)計(jì)
- 綜合認(rèn)知早教課程設(shè)計(jì)
- 2025年度城市基礎(chǔ)設(shè)施建設(shè)設(shè)備搬運(yùn)合同3篇
- 2025年度地下管網(wǎng)安裝與檢測(cè)服務(wù)合同2篇
- 二零二五年度公租房建設(shè)項(xiàng)目合同終止與解除合同3篇
- 2025年度酒店管理SaaS系統(tǒng)服務(wù)合同模板2篇
- 算力網(wǎng)絡(luò)培訓(xùn)課程設(shè)計(jì)
- 2024木材購(gòu)銷(xiāo)合同范文
- 未來(lái)書(shū)房課程設(shè)計(jì)
- 粉末涂料有限公司除塵系統(tǒng)安全風(fēng)險(xiǎn)分級(jí)清單
- 招投標(biāo)專(zhuān)員績(jī)效考核表
- SL631-637-2012-水利水電工程單元工程施工質(zhì)量驗(yàn)收評(píng)定標(biāo)準(zhǔn)
- 深圳分區(qū)地圖可移動(dòng)編輯
- 2023年新版烏斯特統(tǒng)計(jì)公報(bào)即將發(fā)布
- 污水處理廠安全生產(chǎn)風(fēng)險(xiǎn)分級(jí)管控體系方案全套資料匯編完整版
- 高危急性胸痛的快速診斷和誤診病案分析
- (完整版)綜合醫(yī)院康復(fù)醫(yī)學(xué)科建設(shè)與管理指南
- GB/T 41649-2022木制玩具中甲醛釋放量的測(cè)定燒瓶法
- JJF 1384-2012開(kāi)口/閉口閃點(diǎn)測(cè)定儀校準(zhǔn)規(guī)范
- GB/T 33720-2017LED照明產(chǎn)品光通量衰減加速試驗(yàn)方法
評(píng)論
0/150
提交評(píng)論