【文章內(nèi)容簡(jiǎn)介】
urse AFTER INSERTASdeclare @t int SELECT @t=COUNT(*)FROM Course c JOIN INSERTED I ON = JOIN SC S ON =IF (@t0 or @t6)BEGIN PRINT 39。本學(xué)期選課門(mén)數(shù)不能超過(guò)6門(mén)!39。ROLLBACKEND(4) 限制不能刪除有人選的課程。create trigger tri_delCnoon course after deleteas if exists (select * from deleted d where in(select Cno from sc) )rollbackgo(5) ,編寫(xiě)實(shí)現(xiàn)如下要求的觸發(fā)器:每當(dāng)在Teachers表中修改了某個(gè)教師的職稱(chēng)時(shí),自動(dòng)維護(hù)Depts表中職稱(chēng)人數(shù)統(tǒng)計(jì)的一致性。(考慮同時(shí)修改多名教師職稱(chēng)的情況)(6) ,首先為Depts表增加一個(gè)記錄部門(mén)教師人數(shù)的列,列名為:DeptCount,類(lèi)型為整型。然后編寫(xiě)實(shí)現(xiàn)如下要求的觸發(fā)器:每當(dāng)在Teachers表中插入一行數(shù)據(jù)或者是刪除一行數(shù)據(jù)時(shí),自動(dòng)維護(hù)Depts表中的相關(guān)信息。四.函數(shù)和游標(biāo)如無(wú)特別說(shuō)明,以下各題均利用第6章建立的Student、Course和SC表實(shí)現(xiàn)。3. 創(chuàng)建滿(mǎn)足下述要求的用戶(hù)自定義標(biāo)量函數(shù)。(1) 查詢(xún)指定學(xué)生已經(jīng)得到的修課總學(xué)分(考試及格的課程才能拿到學(xué)分),學(xué)號(hào)為輸入?yún)?shù),總學(xué)分為函數(shù)返回結(jié)果。并寫(xiě)出利用此函數(shù)查詢(xún)0811101學(xué)生的姓名、所修的課程名、課程學(xué)分、考試成績(jī)以及拿到的總學(xué)分的SQL語(yǔ)句。CREATE FUNCTION (@SNO CHAR(7))RETURNS INT ASBEGIN DECLARE @X INT SELECT @X=SUM(CREDIT) FROM STUDENT S JOIN SC ON = JOIN COURSE C ON = where grade=60 and =@SNO RETURN @X ENDSELECT sname AS 姓名,ame AS 課程名, credit AS 課程學(xué)分, grade AS 考試成績(jī), () as 總學(xué)分 from STUDENT S JOIN SC ON = JOIN COURSE C ON = where =0811101 (2) 查詢(xún)指定系在指定課程(課程號(hào))的考試平均成績(jī)。 CREATE FUNCTION (@DEPT CHAR(20),@CNO CHAR(6))RETURNS numeric(4,2)AS BEGIN DECLARE @AVG numeric(4,2)SELECT @AVG=AVG(GRADE) FROM SC JOIN student s on = join course c on =where =@o and dept=@dept return @AVG Endselect , (,) AS avg_GRADE from sc join student s on = where dept = 39。信息管理系39。(3) 查詢(xún)指定系的男生中選課門(mén)數(shù)超過(guò)指定門(mén)數(shù)的學(xué)生人數(shù)。create FUNCTION (@DEPT CHAR(20),@CNO int)returns int AS BEGINDECLARE @cum int select @cum=COUNT(*) from student s join sc on = where dept=@dept and sex=39。男39。 group by having COUNT(*) @oreturn @cum Endselect sname,dept,ame, (dept, 1) as 學(xué)生人數(shù) from student s join sc on = join course c on = where dept=39。計(jì)算機(jī)系39。 4. 創(chuàng)建滿(mǎn)足下述要求的用戶(hù)自定義內(nèi)聯(lián)表值函數(shù)。(1) 查詢(xún)選課門(mén)數(shù)在指定范圍內(nèi)的學(xué)生的姓名、所在系和所選的課程名。CREATE function find_1(@x int)returns table return (select sname,dept,ame from student s join sc on = join course c on = where in ( select sno from SC group by Sno having COUNT(*) @x ))利用函數(shù)查詢(xún)選課門(mén)數(shù)超過(guò)門(mén)的情況select * from find_1(3) (2) 查詢(xún)指定系的學(xué)生考試成績(jī)大于等于90的學(xué)生的姓名、所在系、課程名和考試成績(jī)。并寫(xiě)出利用此函數(shù)查詢(xún)計(jì)算機(jī)系學(xué)生考試情況的SQL語(yǔ)句,只列出學(xué)生姓名、課程名和考試成績(jī)。create function find_2(@x char(20))returns table return (SELECT sname,dept,ame,grade FROM student AS s LEFT JOIN sc ON = LEFT JOIN course AS c ON = WHERE grade = 90 and = @x ) select sname,ame,grade from find_2(39。計(jì)算機(jī)系39。) 5. 創(chuàng)建滿(mǎn)足下述要求的用戶(hù)自定義多語(yǔ)句表值函數(shù)。(1) 查詢(xún)指定系年齡最大的前2名學(xué)生的姓名和年齡,包括并列的情況。alter FUNCTION (@DEPT CHAR(20))RETURNS @RET_FIND_AGE TABLE(SNAM