【文章內(nèi)容簡介】
39。)and in (select o from courses where ame=39。數(shù)字邏輯39。 or ame=39。數(shù)字電路39。)(4) 按課程排序列出所有學生的成績,尚無學生選修的課程,也需要列出,相關(guān)的學生成績用NULL表示。答:select distinct ,sno,grade from courses left join sc on ()group by ,sno,gradeorder by ,sno,grade。(5) 列出平均成績最高的學生名字和成績。(SELECT句中不得使用TOP n子句)答:select sname,rfrom(select sname,avg(grade)as from students,sc where = group by sname, order by r desc)where rownum=1。4.選做題:對每門課增加“先修課程”的屬性,用來表示某一門課程的先修課程,每門課程應(yīng)可記錄多于一門的先修課程。要求:1) 修改表結(jié)構(gòu)的定義,應(yīng)盡量避免數(shù)據(jù)冗余,建立必要的主鍵,外鍵。2) 設(shè)計并插入必要的測試數(shù)據(jù),完成以下查詢:列出有資格選修數(shù)據(jù)庫課程的所有學生。(該學生已經(jīng)選修過數(shù)據(jù)庫課程的所有先修課,并達到合格成績。)注意:須設(shè)計每個查詢的測試數(shù)據(jù),并在查詢之前用INSERT語句插入表中。實驗二:數(shù)據(jù)庫的安全和完整性約束實驗要求:1.采用實驗一的建庫腳本和數(shù)據(jù)插入腳本創(chuàng)建Student數(shù)據(jù)庫,并完成以下操作:1)新增表Credits(SNO,SumCredit,NoPass),表示每學生已通過選修課程的合計學分數(shù),以及不及格的課程數(shù)。答:create table Credits(SNO varchar(100),SumCredit int,NoPass int)2)創(chuàng)建視圖Student_Grade(Sname,Cname,Grade),表示學生選修課程及成績的詳細信息。答:create view Student_Gradeas select , from students sinner join SC on =inner join Courses c on =2. 在數(shù)據(jù)庫中創(chuàng)建以下觸發(fā)器:1) Upd_Credit要求:當在SC表中插入一條選課成績,自動觸發(fā)Upd_Credit,完成在Credits表中修改該學生的合計學分數(shù)和不及格的課程數(shù)。答:create trigger Upd_Credit on SC for insertas declare @SNO varchar(100),@CNO varchar(100),@GRADE int ,@NoPass int ,@CREDIT int select @SNO=SNO,@CNO=CNO,@GRADE=GRADE,@NoPass=(case when GRADE60 then 1 else 0 end) from inserted select @CREDIT=CREDIT from Courses where CNO=@CNO update Credits set SumCredit=SumCredit+@CREDIT, NoPass=NoPass+@NoPass where SNO =@SNO2) Upd_StuView?。↖nstead of觸發(fā)器)要求:當對視圖Student_Grade作插入數(shù)據(jù)項操作時,自動觸發(fā)Upd_StuView,完成對SC表的插入操作。如:當執(zhí)行Insert into Student_Grade values(‘王剛’,’數(shù)據(jù)庫’,54)則觸發(fā)器完成另一插入操作:Insert into SC values(‘980201’,’CS110’,54)另外,需要檢查當前插入的學生和課程是否已在Students,和Courses表中存在,如不存在,不執(zhí)行任何操作,并提示用戶錯誤信息。答:create trigger Upd_StuView on Student_Grade for insertasdeclare @SNAME varc