【文章內(nèi)容簡介】
Sname=‘劉晨’);28. 不相關(guān)子查詢:子查詢的查詢條件不依賴于父查詢。SELECT Sno,Sname,Sdept FROM StudentWHERE Sdept= (SELECT Sdept FROM Student WHERE Sname=‘劉晨’);注意子查詢要在比較符之后。29. 相關(guān)子查詢:子查詢的查詢條件依賴于外層父查詢的某個(gè)屬性值。例:找出每個(gè)學(xué)生超過他選修課程平均成績的課程號 SELECT Sno, Cno FROM SC SCXWHERE Grade=( SELECT AVG(Grade) FROM SC SCY WHERE =)。30. ANY:與子查詢結(jié)果的某個(gè)值比較 ALL :與子查詢結(jié)果的所有值比較例39 查詢其他系中比信息系某一學(xué)生年齡小的學(xué)生姓名和年齡。SELECT Sname,Sage FROM StudentWHERE SageANY (SELECT Sage FROM Student WHERE Sdept=‘IS’) AND Sdept’IS’;31. 帶有EXISTS謂詞的子查詢: 例41 查詢所有選修了1號課程的學(xué)生姓名。 SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM SC WHERE = AND Cno=‘1’);用連接可寫成: SELECT Sname FROM Student,SC WHERE = AND =‘1; 例42 查詢選修了全部課程的學(xué)生姓名。 SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE = =));32. 例46 查詢選修了課程1或者選修了課程2的學(xué)生學(xué)號。 SELECT Sno FROM SC WHERE Cno=‘1’ UNION SELECT Sno FROM SC WHERE Cno=‘2’;33. 例48 查詢同時(shí)選修了課程1和課程2的學(xué)生學(xué)號。SELECT Sno FROM SCWHERE Cno=‘1’ AND Sno IN (SELECT Sno FROM SC WHERE Cno=‘2’);34. SQL中更新包括:插入、刪除、修改例1 將一個(gè)新學(xué)生記錄(學(xué)號:200215128;姓名:陳東;性別:男;所在系:IS;年齡:18)插入到Student表中。INSERT INTO Student VALUES (‘200215128’,‘陳東’,‘男’,‘IS’, 18);例2 對每一個(gè)系,求學(xué)生的平均年齡,并把結(jié)果存入數(shù)據(jù)庫。 CREATE TABLE Deptage(Sdept CHAR(15),Avgage SMALLINT); INSERT INTO Deptage(Sdept,Avgage) SELECT Sdept,Avg(Sage) FROM Student GROUP BY Sdept;例3 將學(xué)生200215121的年齡改為22歲。UPDATE StudentSET Sage=22WHERE Sno=‘200215121’;例4 刪除學(xué)號為200215128的學(xué)生記錄。DELETE FROM StudentWHERE Sno=‘200215128’; 35. 視圖:從一個(gè)或幾個(gè)基本表(或視圖)導(dǎo)出的表,是一個(gè)虛表。數(shù)據(jù)庫中只存放視圖的定義。而不存放視圖對應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍存放在原來的基本表中。 例2 建立信息系學(xué)生的視圖,并要求更新視圖時(shí)仍保證視圖只有信息系的學(xué)生。 CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept=‘IS’ WITH CHECK OPTION(當(dāng)對視圖進(jìn)行插入或更新時(shí),要保證新行滿足視圖的定義中的謂詞條件。)注:AS下面的子查詢通常不允許含有ORDER BY子句和DISTINCT短語。36. 行列子集視圖:若一個(gè)視圖是從單個(gè)基本表導(dǎo)出的,并且只是去掉了基本表的某些行和某些列,但保留了碼,稱這類視圖為行列子集視圖。例4 建立信息系選修了1號課程的學(xué)生視圖。 CREATE VIEW IS_S1(Sno,Sname,Grade) AS SELECT ,Grade FROM Student,SC WHERE Sdept=‘IS’ AND = AND =‘1’;37. 虛擬列:視圖定義中的一些基本表中并不存在派生屬性。表達(dá)式視圖:帶虛擬列的視圖。 例5 定義一個(gè)反映學(xué)生出生年份的視圖。 CREATE VIEW BT_S(Sno,Sname,Sbirth) AS SELECT Sno,Sname,2006Sage FROM Student;38. 刪除視圖:例8 刪除視圖IS_S1: DROP VIEW IS_S1;39. 視圖查詢: 例3 在S_G視圖中查詢平均成績在90分以上的學(xué)生學(xué)號和平均成績。SELECT * FROM S_GWHERE Gavg=90;視圖消解后得到: SELECT Sno,AVG(Grade) FROM SC WHERE AVG(Grade)=90 GROUP BY Sno;正確的查詢語句應(yīng)該是: SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno; HAVING AVG(Grade)=9040. 并不是所有視圖都可以更新,一些視圖是理論上可更新的,一些是理論上不可更新的。通常行列子集視圖允許更新。 視圖不允許更新的情況:書P124 41. 視圖的作用:簡化用戶操作;使用戶以多種角度看待同一數(shù)據(jù);對重構(gòu)數(shù)據(jù)庫提供了一定程度的邏輯獨(dú)立性;對機(jī)密數(shù)據(jù)提供安全保護(hù);更清晰的表達(dá)查詢。42. SQL中數(shù)據(jù)控制功能包:事務(wù)管理功能和數(shù)據(jù)保護(hù)功能;數(shù)據(jù)庫的安全性和完整性控制。43. DBMS安全控制功能:把授權(quán)決定告知系統(tǒng);授權(quán)結(jié)果存入數(shù)據(jù)字典;用戶提出操作請求時(shí),根據(jù)授權(quán)情況進(jìn)行檢查,以決定是否執(zhí)行操作請求。44. 授權(quán):GRANT 權(quán)限[, 權(quán)限] …[ON 對象類型對象名]TO 用戶 [,用戶例1 把查詢Student表的權(quán)限授給用戶U1。GRANT SELECT ON TABLE Student TO U1; 例3 把查詢Student表和修改學(xué)生學(xué)號的權(quán)限授予所有用戶。 GRANT UPDATE(Sno),SELECT ON TABLE Student TO PUBLIC;例5 DBA把在數(shù)據(jù)庫S_C中建立表權(quán)限授予用戶U8,并允許此權(quán)限再授予其他用戶。 GRANT CREATETAB ON DATABASE S_C TO U8 WITH GRANT OPTION;45. 收回權(quán)限:REVOKE 權(quán)限 [,權(quán)限 ] … [ON 對象類型 對象名 ] FROM 用戶 例7 把用戶U4修改學(xué)生學(xué)號的權(quán)限收回。 REVOKE UPDATE(Sno) ON TABLE Student FROM U4;第五章 數(shù)據(jù)庫完整性1. 數(shù)據(jù)庫的完整性是指數(shù)據(jù)的正確性和相容性。2. 完整性:防止數(shù)據(jù)庫中存在不符合語義的數(shù)據(jù),防止錯(cuò)誤的信息的輸入和輸出造成的無效操作和錯(cuò)誤結(jié)果。安全性:保護(hù)數(shù)據(jù)庫防止惡意的破壞和非法的存取。3. 完整性約束條件是加在數(shù)據(jù)庫數(shù)據(jù)之上的語義約束條件。4. 完整性檢查是檢查數(shù)據(jù)是否滿足完整性條件的機(jī)制。5. 完整性控制機(jī)制具有三個(gè)方面的功能:定義,檢查,保證數(shù)據(jù)的完整性。6. 實(shí)體完整性在CREATE TABLE中用PRIMARY KEY定義。完整性檢查包括:主碼值是否唯一,不唯一則拒絕修改;檢查注明的各屬性是否為空,一個(gè)空則拒絕修改。7. 參照完整性:FOREIGN KEY和REFERENCES短語定義外碼和所參照的主碼。8. 自定義完整性約束條件:NOT NULL UNIQUE CHECK第六章 關(guān)系數(shù)據(jù)理論例:用于描述學(xué)生情況的一組屬性:U={SNO,SDEPT,MN,CNAME,G}。這里,這些屬性分別描述學(xué)號、系、系負(fù)責(zé)人、課程名和成績。由現(xiàn)實(shí)世界已知的事實(shí)可知:216。 一個(gè)系有若干學(xué)生,但一個(gè)學(xué)生只屬于一個(gè)系;216。 一個(gè)系只有一名負(fù)責(zé)人;216。 一個(gè)學(xué)生可以選修多門課程,每門課程有若干學(xué)生選修;216。 每個(gè)學(xué)生學(xué)習(xí)每一門課程有一個(gè)成績。因此可得到屬性集U上的一組函數(shù)依賴:F={SNO→SDEPT,SDEPT→MN,(SNO,CNAME) →G}l 不好的模式常見的四個(gè)問題:插入異常、刪除異常、冗余太大、更新異常。216。 解決辦法:S(SNO,SDEPT,SNO→SDEPT);SG(SNO,CNAME,G,(SNO,CNAM