【文章內(nèi)容簡介】
據(jù)設(shè)有如下關(guān)系表R: R(No,NAME,SEX,AGE,CLASS) 主關(guān)鍵字是NO其中NO為學(xué)號(hào),NAME為姓名,SEX為性別,AGE為年齡,CLASS為班號(hào)。寫出實(shí)現(xiàn)下列功能的SQL語句。 ①插入一個(gè)記錄(25,“李明”,“男”,21,“95031”); 。 ②插入“95031”班學(xué)號(hào)為姓名為“鄭和”的學(xué)生記錄; 。 ③將學(xué)號(hào)為10的學(xué)生姓名改為“王華”; 。 ④將所有“95101”班號(hào)改為“95091”; 。 ⑤刪除學(xué)號(hào)為20的學(xué)生記錄; 。 ⑥刪除姓“王”的學(xué)生記錄; 。答案:①INSERT INTO R VALUES(25,“李明”,“男”,21,“95031”) ②INSERT INTO R(NO,NAME,CLASS) VALUES(30,“鄭和”,“95031”) ③UPDATE R SET NAME=“王華”WHERE NO=10 ④UPDATE R SET CLASS=“95091”WHERE CLASS=“95101” ⑤DELETE FROM R WHERE NO=20⑥D(zhuǎn)ELETE FROMR WHERE NAME LIKE“王%”4. 在Student表的Sname列上建立一個(gè)唯一索引的SQL語句為:CREATE Stusname ON student(Sname)答案:UNIQUE INDEX5. SELECT語句查詢條件中的謂詞“!=ALL”與運(yùn)算符 等價(jià)。答案:NOT IN6.三、簡答題。答案: (1)視圖能夠簡化用戶的操作。 (2)視圖使用戶能以多種角度看待同一數(shù)據(jù)。 (3)視圖對(duì)重構(gòu)數(shù)據(jù)庫提供了一定程度的邏輯獨(dú)立性。 (4)視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)。 (5)適當(dāng)利用視圖可以更清晰表達(dá)查詢。 視圖是從一個(gè)或幾個(gè)基本表導(dǎo)出的表,它與基本表不同,是一個(gè)虛表,數(shù)據(jù)庫中只存放視圖的定義,而不存放視圖對(duì)應(yīng)的數(shù)據(jù),這些數(shù)據(jù)存放在原來的基本表中,當(dāng)基本表中的數(shù)據(jù)發(fā)生變化,從視圖中查詢出的數(shù)據(jù)也就隨之改變(2分)。視圖一經(jīng)定義就可以像基本表一樣被查詢、刪除,也可以在一個(gè)視圖之上再定義新的視圖,但是對(duì)視圖的更新操作有限制.四、程序設(shè)計(jì)題(一)設(shè)學(xué)生課程數(shù)據(jù)庫中有三個(gè)關(guān)系:學(xué)生關(guān)系S(S,SNAME,AGE,SEX)學(xué)習(xí)關(guān)系SC(S,C,GRADE)課程關(guān)系C(C,CNAME)其中S、C、SNAME、AGE、SEX、GRADE、CNAME分別表示學(xué)號(hào)、課程號(hào)、姓名、年齡、性別、成績和課程名。用SQL語句表達(dá)下列操作(1)檢索選修課程名稱為“MATHS”的學(xué)生的學(xué)號(hào)與姓名 (2)檢索已經(jīng)選修了課程號(hào)為“C1”和“C2”的學(xué)生的學(xué)號(hào)(3)檢索年齡在18到20之間(含18和20)的女生的學(xué)號(hào)、姓名和年齡(4)檢索平均成績超過80分的學(xué)生學(xué)號(hào)和平均成績(5)檢索選修了課程的學(xué)生姓名(6)檢索選修了三門課以上的學(xué)生的姓名答案:(1)SELECT S,SNAME FROM S,SC,C WHERE = AND = AND CNAME=’ MATHS’ (2) SELECT S FROM SC WHERE CNO=’C1’ AND S IN( SELECT S FROM SC WHERE CNO=’C2’) (3)SELECT S,SNAME,AGE FROM S WHERE AGE BETWEEN 18 AND 20 AND SEX=’女‘ (4) SELECT S ,AVG(GRADE) ‘平均成績’ FROM SC GROUP BY S HAVING AVG(GRADE)80(5) SELECT SNAMEFROM SWHERE S IN (SELECT S FROM SC ) (6) SELECT SNAME FROM S,SC WHERE = GROUP BY SNAME HAVING COUNT(*)3 (二)設(shè)學(xué)生課程數(shù)據(jù)庫中包括三個(gè)表: 學(xué)生表:Student (Sno,Sname,Sex,Sage,Sdept)課程表:Course(Cno,Cname,Ccredit)學(xué)生選課表:SC(Sno,Cno,Grade)其中Sno、Sname、Sex、Sage、Sdept、 Cno、Cname、Ccredit 、Grade分別表示學(xué)號(hào)、姓名、性別、年齡、所在系名、課程號(hào)、課程名、學(xué)分和成績。試用SQL語言完成下列項(xiàng)操作:(1)查詢選修課程包括“1042”號(hào)學(xué)生所學(xué)的課程的學(xué)生學(xué)號(hào)(2)創(chuàng)建一個(gè)計(jì)科系學(xué)生信息視圖S_CS_VIEW,包括Sno學(xué)號(hào)、Sname姓名、Sex性別。(3)通過上面第2題創(chuàng)建的視圖修改數(shù)據(jù),把王平的名字改為王慧平(4)創(chuàng)建一選修數(shù)據(jù)庫課程信息的視圖,視圖名稱為datascore_view,包含學(xué)號(hào)、姓名、成績。答案:(1) SELECT DISTINCT SNO FROM SC SCX WHERE NOT EXISTS (SELECT * FROM SC SCY WHERE = 39。 104239。 AND NOT EXISTS (SELECT * FROM SC SCZ WHERE = AND =)); (2) CREATE VIEW S_CS_VIEW AS SELECT SNO,SNAME,SEX FROM STUDENT WHERE Sdept=’CS’ (3)UPDATE S_CS_VIEW SET SNAME=’ 王慧平’ WHERE SNAME=’ 王平’(4) CREATE VIEW datascore_view AS SELECT SNO 學(xué)號(hào)、SNAME 姓名、GRADE 成績 FROM STUDENT,SC,COURSE WHERE = AND = AND CNAME=’ 數(shù)據(jù)庫’(三) 設(shè)教學(xué)數(shù)據(jù)庫Education有三個(gè)關(guān)系:學(xué)生關(guān)系S(SNO,SNAME,SAGE,SSEX,SDEPT);學(xué)習(xí)關(guān)系SC(SNO,CNO,GRADE);課程關(guān)系C(CNO,CNAME,CCREDIT)查詢問題:1:查所有年齡在20歲以下的學(xué)生姓名及年齡。2:查考試成績有不及格的學(xué)生的學(xué)號(hào)。3:查所年齡在20至23歲之間的學(xué)生姓名、系別及年齡。4:查計(jì)算機(jī)系、數(shù)學(xué)系、信息系的學(xué)生姓名、性別。5:查既不是計(jì)算機(jī)系(CS)、數(shù)學(xué)系(MA)、又不是信息系(IS)的學(xué)生姓名、性別6:查所有姓“劉”的學(xué)生的姓名、學(xué)號(hào)和性別。7:查姓“上官”且全名為3個(gè)漢字的學(xué)生姓名。8:查所有不姓“張”的學(xué)生的姓名。9:查 “DB_Design”課程的課程號(hào)。10:查缺考的學(xué)生的學(xué)號(hào)和課程號(hào)。11:查年齡為空值的學(xué)生的學(xué)號(hào)和姓名。12:查計(jì)算機(jī)系20歲以下的學(xué)生的學(xué)號(hào)和姓名。13:查計(jì)算機(jī)系、數(shù)學(xué)系、信息系的學(xué)生姓名、性別。14:查詢選修了課程號(hào)為C3的課程的學(xué)生的學(xué)號(hào)和成績,其結(jié)果按分?jǐn)?shù)的降序排列。15:查詢?nèi)w學(xué)生的情況,查詢結(jié)果按所在系升序排列,對(duì)同一系中的學(xué)生按年齡降序排列。16:查詢學(xué)生總?cè)藬?shù)。17:查詢選修了課程的學(xué)生人數(shù)。18:計(jì)算選修了課程號(hào)為C1的課程的學(xué)生平均成績。19:查詢學(xué)習(xí)課程號(hào)為C3的課程的學(xué)生最高分?jǐn)?shù)。20:查詢各個(gè)課程號(hào)與相應(yīng)的選課人數(shù)。21:查詢計(jì)算機(jī)系選修了3門以上課程的學(xué)生的學(xué)號(hào)。22:求基本表S中男同學(xué)的每一年齡組(超過50人的)有多少人?要求查詢結(jié)果按人數(shù)升序排列,人數(shù)相同按年齡降序排列。23:查詢每個(gè)學(xué)生及其選修課程的情況。24:查詢選修了課程號(hào)為C2的課程且成績?cè)?0分以上的所有學(xué)生。25:查詢每個(gè)學(xué)生選修的課程名及其成績。26:統(tǒng)計(jì)每一年齡選修課程的學(xué)生人數(shù)。27:查詢選修了課程號(hào)為C2的課程的學(xué)生姓名。28:查詢與“張三”在同一個(gè)系學(xué)習(xí)的學(xué)生學(xué)號(hào)、姓名和系別。29:查詢選修課程名為“數(shù)據(jù)庫”的學(xué)生學(xué)號(hào)和姓名。30:查詢所有未選修C2課程的學(xué)生姓名。 解:1查所有年齡在20歲以下的學(xué)生姓名及年齡。 SELECT Sname,Sage FROM S WHERE Sage20。 (NOT age=20) SELECT DISTINCT Sno FROM SC WHERE grade60; 、系別及年齡。 SELECT Sname,Sdept,Sage FROM S WHERE Sage BETWEEN 20 AND 23; 、數(shù)學(xué)系、信息系的學(xué)生姓名、性別。 SELECT Sname,Ssex FROM S WHERE Sdept IN (’CS’, ‘IS’, ‘MATH’);、數(shù)學(xué)系、又不是信息系的學(xué)生姓名、性別 SELECT Sname,Ssex FROM S WHERE Sdept NOT IN (’CS’, ‘IS’, ‘MATH’); “劉”的學(xué)生的姓名、學(xué)號(hào)和性別。 SELECT Sname,Sno,Ssex FROM S WHERE Sname LIKE ‘劉%’;“上官”且全名為3個(gè)漢字的學(xué)生姓名。 SELECT Sname FROM S WHERE Sname LIKE ‘上官__’;“張”的學(xué)生的姓名。 SELECT Sname,Sno,Ssex FROM S WHERE Sname NOT LIKE ‘張%’;。 SELECT Cno FROM C WHERE Cname LIKE ‘DB\_Design’ ESCAPE ‘\’; 。 SELECT Sno,Cno FROM SC WHERE Grade IS NULL; (不能用=代替) { 有成績的 WHERE Grade IS NOT NULLL;} 。 SELECT Sno,Sname FROM S WHERE Sage IS NULL; 。 SELECT Sno,Sname FROM S WHERE Sdept=‘CS’ AND Sage20。、數(shù)學(xué)系、信息系的學(xué)生姓名、性別。 SELECT Sname,Ssex FROM S WHERE Sdept =’CS’ OR Sdept =‘IS’ OR Sdept =’MATH’); ,其結(jié)果按分?jǐn)?shù)的降序排列。 SELECT Sno,Grade FROM SC WHERE Cno=‘C3’ ORDER BY Grade DESC。,查詢結(jié)果按所在系升序排列,對(duì)同一系中的學(xué)生按年齡降序排列。 SELECT * FROM S ORDER BY Sdep,Sage DESC; 。 SELECT COUNT(*) FROM S。 SELECT COUNT(DISTINCT Sno) FROM SC。 SELECT AVG(Grade) FROM SC WHERE Cno=‘C1’;。 SELECT MAX(Grade) FROM SC WHERE Cno=‘C3’; 。 SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno; 該SELECT語句對(duì)SC表按Cno的取值進(jìn)行分組,所有具有相同Cno值的元組為一組,然后對(duì)每一組作用聚合函數(shù)COUNT以求得該組的學(xué)生人數(shù)。 如果分組后還要求按一定的條件對(duì)這些組進(jìn)行篩選,最終只輸出滿足指定條件 組,則可以使用HAVING短語指定篩選條件。 SELECT Sno FROM SC WHERE Sdept=‘CS’ GROUP BY Sno HAVING COUNT(*)3;