【文章內(nèi)容簡介】
例 325: (分組查詢 )輸入以下查詢語句并執(zhí)行,觀察出現(xiàn)的其結(jié)果并分析其原因。 SELECT SNAME ,SDEPT ,COUNT(*)FROM STUDENT WHERE SDEPT=39。CS 39。 GROUP BY SDEPT。 如果在分組后的查詢結(jié)果中在選擇出一組符合條件的分組需用 HAVING字句,不能用 WHERE字句。否則會出錯。 例 326: (分組查詢 )分析以下語句為什么會出現(xiàn)錯誤。并給出正確的查詢語句。 SELECT SAGE FROM STUDENT GROUP BY SNO。因為用的是 GROUP BY語句所以查詢出來的是一組一組的數(shù)據(jù),而 Select后面的 Sage要與 GROUP BY后面的 保持一致。 27/8 《數(shù)據(jù)庫系統(tǒng)概論》實驗指導(dǎo)書 安徽工業(yè)大學(xué)計算機學(xué)院 SELECT Sage FROM STUDENT GROUP BY Sage。 例 327: (分組查詢 )求學(xué)生人數(shù)不足 3人的系及其相應(yīng)的學(xué)生數(shù)。 Select Sdept,COUNT(DISTINCT Sno)from Student GROUP BY Sdept HAVING COUNT(DISTINCT Sno) 例 328: (分組查詢 )求各系中除 01班之外的各班的學(xué)生人數(shù)。 Select Sclass,COUNT(Sno)from Student GROUP BY Sdept,Sclass HAVING Sclass 39。0139。 例 329: (涉及空值的查詢 )分別觀察各組函數(shù)、行的顯示順序以及分組查詢與空值的關(guān)系。 SELECT COUNT(SCore)AS Count FROM Score。SELECT SUM(SCore)AS Sum FROM Score。 28/8 《數(shù)據(jù)庫系統(tǒng)概論》實驗指導(dǎo)書 安徽工業(yè)大學(xué)計算機學(xué)院 SELECT AVG(SCore)AS Avg FROM Score。SELECT MAX(SCore)AS Max FROM Score。SELECT MIN(SCore)AS Min FROM Score。 SELECT SCore FROM Score ORDER BY SCore DESC。 29/8 《數(shù)據(jù)庫系統(tǒng)概論》實驗指導(dǎo)書 安徽工業(yè)大學(xué)計算機學(xué)院 SELECT SCore FROM Score ORDER BY SCore ASC。 30/8 《數(shù)據(jù)庫系統(tǒng)概論》實驗指導(dǎo)書 安徽工業(yè)大學(xué)計算機學(xué)院 例 330: (連接查詢 )求選修了課程 001且成績在 70分以下或成績在 90分以上的學(xué)生的姓名、課程名稱和成績。 SELECT SNAME,CNAME,SCORE FROM STUDENT S,COURSE C,SCORE SC WHERE = AND = AND = 39。00139。 AND(SCORE NOT BETWEEN 70 AND 90)。 例 331: (連接查詢與表的別名 )求選修了課程的學(xué)生的學(xué)生姓名、課程號和成績。 Select Sname,Cno,SCore from Student S,Score SC WHERE =。 31/8 《數(shù)據(jù)庫系統(tǒng)概論》實驗指導(dǎo)書 安徽工業(yè)大學(xué)計算機學(xué)院 例 332: (自身連接查詢 )求年齡大于 ’ 李麗 ’ 的所有學(xué)生的姓名 、系和年齡 .SELECT , FROM STUDENT S1 WHERE (SELECT FROM STUDENT S2 WHERE =39。李麗 39。)。 例 333: (外部連接查詢 )求選修了課程 002或 003的學(xué)生的學(xué)號、課程號、課程名和成績,要求必須將 002和 003課程的相關(guān)信息顯示出來。 Select Sno,Cname,SCore from Score RIGHT OUTER JOIN Course ON = WHERE IN(39。00239。,39。00339。)。 32/8 《數(shù)據(jù)庫系統(tǒng)概論》實驗指導(dǎo)書 安徽工業(yè)大學(xué)計算機學(xué)院 例 334: (子查詢 )求與 ‘ 黎明 ’ 年齡相同的學(xué)生的姓名和系。 Select Sname,Sdept from Student WHERE Sage IN(Select Sage from Student WHERE Sname=39。黎明39。)。 例 335: (子查詢 )求選修了課程名為 ’ 數(shù)據(jù)結(jié)構(gòu) ’ 的學(xué)生的學(xué)號和姓名。 Select Sno,Sname from Student WHERE Sno IN(Select Sno from Score WHERE Cno =(Select Cno from Course WHERE Cname=39。數(shù)據(jù)結(jié)構(gòu) 39。))。 例 336: (子查詢 ANY)求比數(shù)學(xué)系中某一學(xué)生年齡大的學(xué)生的姓名和系。 Select Sname,Sdept from Student WHERE SageANY(Select Sage from Student WHERE Sdept=39。MA39。)。 33/8 《數(shù)據(jù)庫系統(tǒng)概論》實驗指導(dǎo)書 安徽工業(yè)大學(xué)計算機學(xué)院 例 337: (子查詢 ALL)求比數(shù)學(xué)系中全體學(xué)生年齡大的學(xué)生的姓名和系。 Select Sname,Sdept from Student WHERE SageALL(Select Sage from Student WHERE Sdept=39。MA39。)。 例 338: (子查詢 EXISTS)求選修了課程 004的學(xué)生的姓名和系。 SELECT SNO,Sname,Sdept from Student WHERE SNO IN(Select SNO from Score WHERE Cno=39。00439。)。 例 339: (返回多列的子查詢 )求與 ‘ 李麗 ’ 同系且同齡的學(xué)生的姓名和系。 Select Sname,Sdept from Student WHERE(Sdept,Sage)IN(Select Sdept,Sage from Student WHERE Sname=39。李麗 39。)AND SNAME 39。李麗 39。 例 340: (多個子查詢 )求與 ‘‘ 黎明 ’ 同系,且年齡大于 ‘ 李麗 ’ 的學(xué)生的信息。 Select * from Student WHERE Sdept IN(Select Sdept from student WHERE Sname=39。黎明 39。)AND 34/8 《數(shù)據(jù)庫系統(tǒng)概論》實驗指導(dǎo)書 安徽工業(yè)大學(xué)計算機學(xué)院 Sage(Select Sage from Student WHERE Sname=39。李麗 39。)。 例 341: (子查詢中使用表連接 )求數(shù)學(xué)系中年齡相同的學(xué)生的姓名和年齡。 Select Sname,Sage from student WHERE SNO IN(Select from Student S1,STUDENT S2 WHERE = AND != AND =39。MA39。 AND =39。MA39。)。 例 342: (連接或嵌套查詢 )檢索至少選修王成剛老師所授課程中一門課程的女學(xué)生姓名。 Select Sname from Student WHERE SSex=39。女 39。 AND Sno IN(Select Sno from Score WHERE Cno IN(Select DISTINCT Cno from Teach WHERE Tname=39。王成剛 39。))。 例 343: (嵌套與分組查詢 )檢索選修某課程的學(xué)生人數(shù)多于 3人的教師姓名。 Select DISTINCT Tname, Cno from Teach WHERE Cno IN(SELECT Cno FROM Score GROUP BY CNO HAVING COUNT(Cno)3)。 例 344: (集合查詢 )列出所有教師和同學(xué)的姓名和性別。 35/8 《數(shù)據(jù)庫系統(tǒng)概論》實驗指導(dǎo)書 安徽工業(yè)大學(xué)計算機學(xué)院 Select Sname,SSEX from Student UNION Select Tname,TSEX from Teach。 例 345: (相關(guān)子查詢 )求未選修課程 004的學(xué)生的姓名。 Select SNO,Sname from Student WHERE SNO NOT IN(Select SNO from Score WHERE Cno=39。00439。)。 例 346: (相關(guān)子查詢 )求選修了全部課程的學(xué)生的姓名。 Select Sname from Student WHERE NOT EXISTS(Select * from Course WHERE NOT EXISTS(Select * from Score WHERE Sno= AND Cno=))。 36/8 《數(shù)據(jù)庫系統(tǒng)概論》實驗指導(dǎo)書 安徽工業(yè)大學(xué)計算機學(xué)院 例 347: (相關(guān)子查詢 )求至少選修了學(xué)生 ‘96002’ 所選修的全部課程的學(xué)生的學(xué)號。 Select DISTINCT Sno from Score SC1 WHERE NOT EXISTS(Select * from Score SC2 WHERE =39。9600239。 AND NOT EXISTS(Select * from Score SC3 WHERE = AND =))AND 39。9600239。 例 348: (相關(guān)子查詢 )求成績比所選修課程平均成績高的學(xué)生的學(xué)號、課程號、和成績。 Select Sno,Cno,SCore from Score SC WHERE SCore(Select AVG(SCore)from Score SC1 WHERE =)。 例 349: (相關(guān)子查詢 )查詢被一個以上的學(xué)生選修的課程號。 Select DISTINCT Cno from Score SC WHERE EXISTS(Select * from Score GROUP BY CNO HAVING COUNT(Sno)1)ORDER BY CNO ASC。 37/8 《數(shù)據(jù)庫系統(tǒng)概論》實驗指導(dǎo)書 安徽工業(yè)大學(xué)計算機學(xué)院 例 350: (相關(guān)子查詢 )查詢所有未選課程的學(xué)生姓名和所在系。 Select Sno,Sdept from Student S WHERE NOT EXISTS(Select * from Score SC WHERE =)。 [ 實驗要求 ] 對數(shù)據(jù)庫表進行各種查詢操作。 [ 實驗方法 ] ① 將實驗需求用 SQL語句表示; ② 執(zhí)行 SQL語句; ③ 查看執(zhí)行結(jié)果,如果結(jié)果不正確,進行修改,直到正確為止。 [ 實驗總結(jié) ] ① SQL 語句以及執(zhí)行結(jié)果; ② 對重點實驗結(jié)果進行分析; ③ 實驗中的問題和提高; ④ 收獲與體會。 實驗四:視圖、授權(quán)控制與事務(wù)處理 [ 實驗日期 ] 年 月 日 [ 實驗?zāi)康? ] 通過實驗進一步理解視圖的建立和更新、數(shù)據(jù)庫的權(quán)限管理和事務(wù)處理功能。 [ 實驗內(nèi)容 ] 4. SQL視圖的定義與操縱: 例 41: (建立視圖 )建立計算機系的學(xué)生的視圖 STUDENT_CS。 38/8 《數(shù)據(jù)庫系統(tǒng)概論》實驗指導(dǎo)書 安徽工業(yè)大學(xué)計算機學(xué)院 CREATE VIEW STUDENT_CS AS SELECT * FROM Student WHERE Sdept=39。CS39。 WITH CHECK OPTION。例 42:(建立視圖 )建立由學(xué)號和平均成績兩個字段的視圖 STUDENT_GR CREATE VIEW STUDENT_GR(Sno,GAVG)AS SELECT Sno,AVG(SCore)AS Avg FROM Score SC GROUP BY SNO。例 43: (視圖查詢 )利用視圖 STUDENT_CS,求年齡大于 19歲的學(xué)生的全部信息。 SELECT * FROM STUDENT_CS WHERE Sage19。 例 44: (視圖查詢 )利用視圖 STUDENT_GR,求平均成績?yōu)?88分以上的學(xué)生的學(xué)號和平均成績。 SELECT Sno,GAVG FROM STUDENT_GR WHERE GAvg88。例 45: (視圖更新 )利用視圖 STUDENT_CS,增加學(xué)生 (‘96006’ ,‘ 張然 ’ , ‘CS’ , ‘02’ , ‘ 男 ’ , 19)。 INSERT INTO STUDENT_CS VALUES(39。9600639。,39。張然 39。,39。CS39。,39。0239。,19,39。男 39。)。例 46: (視圖更新 )利用視圖 STUDENT_CS,將學(xué)生年齡增加 1歲。觀察其運行結(jié)果并分析原因。 UPDATE STUDENT_CS SET Sage=Sage+1。 例 47: (視圖更新 )利用視圖 STUDENT_GR,將平均成績增加 2分。觀察其運行結(jié)果并分析原因。 UPDATE STUDENT_GR SET GAvg=GAvg+2。例 48: (視圖更新 )刪除視圖 STUDENT_CS中學(xué)號為 ‘96006’ 的學(xué)生的全部數(shù)據(jù)。 DELETE FROM STUDENT_CS WHERE Sno=39