【正文】
GOSELECT ,FROM student s,score scWHERE = AND =39。9503339。 AND = (SELECT MAX(degree) FROM student,score WHERE = AND =39。9503339。 )GO19.編寫一個(gè)程序,查詢平均分高于所有平均分的課程號(hào)。解:程序如下:USE schoolGOSELECT o,AVG(degree)FROM score GROUP BY oHAVING AVG(degree)(SELECT AVG(degree) FROM score)GO20.編寫一個(gè)程序,創(chuàng)建一個(gè)新表stud,包含所有學(xué)生的姓名、課程名和分?jǐn)?shù),并以姓名排序。解:程序如下:USE schoolGOSELECT ,INTO studFROM student s,course c,score scWHERE = AND = AND IS NOT NULLORDER BY SELECT * FROM studGO21.編寫一個(gè)程序,輸出每個(gè)班最高分的課程名和分?jǐn)?shù)。解:采用數(shù)據(jù)來源為SELECT查詢結(jié)果的方法。程序如下:USE schoolGOSELECT sclass,ame,MAX(degree) degreeFROM (SELECT , FROM student s,course c,score sc WHERE = AND = AND degree IS NOT NULL) TGROUP BY sclass,ameORDER BY sclassGO執(zhí)行結(jié)果如下:22.編寫一個(gè)程序,采用游標(biāo)方式輸出所有課程的平均分。解:程序如下:USE schoolGO聲明變量DECLARE @c_name varchar(8),@s_avg float聲明游標(biāo)DECLARE st_cursor CURSOR FOR SELECT ,AVG() FROM course,score WHERE = AND IS NOT NULL GROUP BY 打開游標(biāo)OPEN st_cursor提取第一行數(shù)據(jù)FETCH NEXT FROM st_cursor INTO @c_name,@s_avg打印表標(biāo)題PRINT 39。課程 平均分39。PRINT 39。39。WHILE @@FETCH_STATUS = 0 BEGIN 打印一行數(shù)據(jù) PRINT @c_name+39。 39。+CAST(@s_avg AS char(10)) 提取下一行數(shù)據(jù) FETCH NEXT FROM st_cursor INTO @c_name,@s_avgEND關(guān)閉游標(biāo)CLOSE st_cursor釋放游標(biāo)DEALLOCATE st_cursorGO其執(zhí)行結(jié)果如下:23.編寫一個(gè)程序,采用游標(biāo)方式輸出所有學(xué)號(hào)、課程號(hào)和成績(jī)等級(jí)。解:程序如下:USE schoolGO聲明變量DECLARE @no1 char(5),@no2 char(6),@fs char(2)聲明游標(biāo)DECLARE fs_cursor CURSOR FOR SELECT sno,o, CASE WHEN degree=90 THEN 39。A39。 WHEN degree=80 THEN 39。B39。 WHEN degree=70 THEN 39。C39。 WHEN degree=60 THEN 39。D39。 WHEN degree60 THEN 39。E39。 END FROM score WHERE degree IS NOT NULL ORDER BY sno打開游標(biāo)OPEN fs_cursor提取第一行數(shù)據(jù)FETCH NEXT FROM fs_cursor INTO @no1,@no2,@fs打印表標(biāo)題PRINT 39。學(xué)號(hào) 課程號(hào) 等級(jí)39。PRINT 39。39。WHILE @@FETCH_STATUS = 0 BEGIN 打印一行數(shù)據(jù) PRINT @no1+39。 39。+@no2+39。 39。+@fs 提取下一行數(shù)據(jù) FETCH NEXT FROM fs_cursor INTO @no1,@no2,@fsEND關(guān)閉游標(biāo)CLOSE fs_cursor釋放游標(biāo)DEALLOCATE fs_cursorGO其執(zhí)行結(jié)果如下:24.編寫一個(gè)程序,采用游標(biāo)方式輸出各班各課程的平均分。解:程序如下:USE schoolGO聲明變量DECLARE @bh char(5),@kc char(10),@fs float聲明游標(biāo)DECLARE fs_cursor CURSOR FOR SELECT ,AVG() FROM student s,course c,score sc WHERE = AND = AND IS NOT NULL GROUP BY ,打開游標(biāo)OPEN fs_cursor提取第一行數(shù)據(jù)FETCH NEXT FROM fs_cursor INTO @bh,@kc,@fs打印表標(biāo)題PRINT 39。班號(hào) 課程 平均分39。PRINT 39。39。WHILE @@FETCH_STATUS = 0 BEGIN 打印一行數(shù)據(jù) PRINT @bh+39。 39。+@kc+39。 39。+CAST(@fs AS varchar(10)) 提取下一行數(shù)據(jù) FETCH NEXT FROM fs_cursor INTO @bh,@kc,@fsEND關(guān)閉游標(biāo)CLOSE fs_cursor釋放游標(biāo)DEALLOCATE fs_cursorGO其執(zhí)行結(jié)果如下:上機(jī)實(shí)驗(yàn)題5參考答案在上機(jī)實(shí)驗(yàn)題4建立的factory數(shù)據(jù)庫(kù)上,完成如下各題(所有SELECT語句的查詢結(jié)果以文本格式顯示)。(1)刪除factory數(shù)據(jù)庫(kù)上各個(gè)表之間建立的關(guān)系。(2)顯示各職工的工資記錄和相應(yīng)的工資小計(jì)。(3)按性別和部門名的所有組合方式列出相應(yīng)的平均工資。(4)在worker表中使用以下語句插入一個(gè)職工記錄:INSERT INTO worker VALUES(20,39。陳立39。,39。女39。,39。55/03/0839。,1,39。75/10/1039。,4)在depart表中使用以下語句插入一個(gè)部門記錄:INSERT INTO depart VALUES(5,39。設(shè)備處39。)對(duì)worker和depart表進(jìn)行全外連接顯示職工的職工號(hào)、姓名和部門名,然后刪除這兩個(gè)插入的記錄。(5)顯示最高工資的職工的職工號(hào)、姓名、部門名、工資發(fā)放日期和工資。(6)顯示最高工資的職工所在的部門名。(7)顯示所有平均工資低于全部職工平均工資的職工的職工號(hào)和姓名。(8)采用游標(biāo)方式實(shí)現(xiàn)(6)小題的功能。(9)采用游標(biāo)方式實(shí)現(xiàn)(7)小題的功能。(10)先顯示worker表中的職工人數(shù),開始一個(gè)事務(wù),插入一個(gè)職工記錄,再顯示worker表中的職工人數(shù),回滾該事務(wù),最后顯示worker表中的職工人數(shù)。操作過程(1)刪除factory數(shù)據(jù)庫(kù)上各個(gè)表之間建立的關(guān)系的操作步驟如下:① 啟動(dòng)SQL Server管理控制器。② 在“對(duì)象資源管理器”中展開LCBPC服務(wù)器節(jié)點(diǎn)。③ 展開“數(shù)據(jù)庫(kù)”節(jié)點(diǎn)。④ 選中school,將其展開。⑤ 展開“數(shù)據(jù)庫(kù)關(guān)系圖”節(jié)點(diǎn)。⑥ ,右擊,在出現(xiàn)的快捷菜單中選擇“修改”命令。⑦ 在數(shù)據(jù)庫(kù)關(guān)系圖中,選擇表示要從關(guān)系圖中刪除的關(guān)系的連接線(對(duì)于兩條連線均進(jìn)行⑦~⑨的操作)。⑧ 右擊關(guān)系線,從快捷菜單中選擇“從數(shù)據(jù)庫(kù)中刪除關(guān)系”命令。⑨ 出現(xiàn)一個(gè)消息框,提示確認(rèn)刪除。單擊“是”按鈕。⑩ 在出現(xiàn)的對(duì)話框中單擊“是”按鈕保存所做的修改。這樣就將worker表和depart表以及worker表和salary表之間的關(guān)系刪除了。 factory數(shù)據(jù)庫(kù)關(guān)系圖(2)對(duì)應(yīng)的程序如下:USE factoryGOSELECT ,FROM worker,salaryWHERE =ORDER BY ,COMPUTE SUM() BY GO執(zhí)行結(jié)果如下:職工號(hào) 姓名 工資 1 孫華 1 孫華 sum2408職工號(hào) 姓名 工資 10 陳濤 10 陳濤 sum職工號(hào) 姓名 工資 11 劉欣 125511 劉欣 1250sum2505職工號(hào) 姓名 工資 12 李涵 134512 李涵 1350sum2695職工號(hào) 姓名 工資 13 王小燕 120513 王小燕 1200sum2405職工號(hào) 姓名 工資 14 李藝 14 李藝 sum職工號(hào) 姓名 工資 15 魏君 110515 魏君 1100sum2205職工號(hào) 姓名 工資 2 孫天奇 9052 孫天奇 900sum1805職工號(hào) 姓名 工資 3 陳明 3 陳明 sum職工號(hào) 姓名 工資 4 李華 4 李華 sum3006職工號(hào) 姓名 工資 5 余慧 7305 余慧 725sum1455職工號(hào) 姓名 工資 6 歐陽少兵 10856 歐陽少兵 1085sum2170職工號(hào) 姓名 工資 7 程西 7 程西 sum職工號(hào) 姓名 工資