【正文】
元組中的取值不能相同。主鍵約束:用于定義基本表的主鍵。 外鍵約束:是指一個表(稱從表)的一個列或列組合,它的值需要引用另一個表(稱引用表)的主鍵或唯一性鍵的值。8. ON DELETE選項是設(shè)置當(dāng)引用表中具有外鍵約束的行被刪除時,系統(tǒng)所做的處理。有三種可能的處理辦法:RESTRICT:缺省選項,引用表中凡是被從表所引用的行都不準(zhǔn)刪除;CASCADE:從表中所有引用了引用表中被刪除行的行也隨之被刪除;SET NULL:外鍵的值被設(shè)置為NULL。9. 定義基本表:CREATE TABLE 表名;注:“ ”中的內(nèi)容是必選項“[ ]”中的內(nèi)容是可選項;DEFAULT選項是列指定缺省值。例1 建立一個學(xué)生表Student,課程表course,選課表sc。 CREATE TABLE Student (Sno CHAR(5)PRIMARY KEY,Sname CHAR(20)UNIQUE,Ssex CHAR(1),Sage INT DEFAULT 18,Sdept CHAR(15)); CREATE TABLE Course ( Cno CHAR(2)PRIMARY KEY, Cname CHAR(30)NOT NULL, Cpno CHAR(2), Ccredit SMALLINT))。 CREATE TABLE SC ( Sno CHAR(5), Cno CHAR(2), Grade SMALLINT, PRIMARY KEY(Sno,Cno), FOREIGN KEY(Sno)REFERENCES Student(Sno), FOREIGN KEY(Cno)REFERENCES Course(Cno)ON DELETE CASCADE));10. 修改基本表:ALTER TABLE 表名+[ADD [新列名 數(shù)據(jù)類型][完整性約束]] [DROP完整性約束名] [MODIFY 列名 數(shù)據(jù)類型];例2 向Student表增加“入學(xué)時間(Se)”列。 ALTER TABLE Student ADD Se DATE;例3 將Student表Sage的數(shù)據(jù)類型改為INT ALTER TABLE Student MODIFY Sage INT;例4 刪除Student表學(xué)生姓名(Sname)的唯一性約束。 ALTER TABLE Student DROP UNIQUE(Sname);11. 刪除基本表:DROP TABLE 表名;連同數(shù)據(jù)及視圖一同被刪除。 例5 刪除Student表。 DROP TABLE Student;12. 建立索引:CREATE [UNIQUE] [CLUSTER] INDEX 索引名 ON 表名(列名 [次序] [,列名[次序]]…);索引提供多種存取路徑,加快查詢速度。建在表的一列或多列上,各列名之間用逗號分隔。列名后面還可以用次序選項指定索引值的排列次序,可選ASC(升序)或DESC(降序),缺省值為ASC;UNIQUE表明要建立唯一索引;CLUSTER表示要建立聚簇索引。13. 聚簇索引是指索引項的順序與表中記錄的物理順序一致的索引組織,并且表中的數(shù)據(jù)與索引一同存儲??梢栽谧畛2樵兊牧猩辖⒋鼐鬯饕蕴岣卟樵冃?。14. 唯一索引是指每一個索引值只對應(yīng)唯一的數(shù)據(jù)記錄。 CREATE CLUSTER INDEX Stusname ON Student(Sname);例 為學(xué)生課程數(shù)據(jù)庫中的Student,Course,SC三個表建立索引。其中Student表按學(xué)號升序建唯一索引,Course表按課程號升序建唯一索引,SC表按學(xué)號升序和課程號降序建唯一索引。 CREATE UNIQUE INDEX Stusno ON Student(Sno); CREATE UNIQUE INDEX Couo ON Course(Cno); CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);15. 刪除索引:DROP INDEX 索引名; 例7 刪除Student表的Stusname索引。 DROP INDEX Stusname;16. 查詢:SELECT[ALL|DISTINCT] 列名或表達(dá)式 [別名1][,列名或表達(dá)式 [別名2]]…FROM 表名或視圖名 [表別名][,表名或視圖名 [表別名]]…[WHERE 條件表達(dá)式][GROUP BY 列名1] [HAVING 條件表達(dá)式][ORDER BY 列名2] [ASC|DESC];17. 單表查詢:例1 查詢?nèi)w學(xué)生的學(xué)號和姓名。 SELECT Sno,Sname FROM Student;例2 查詢?nèi)w學(xué)生的詳細(xì)記錄。 SELECT * FROM Student; 例3查詢?nèi)w學(xué)生的姓名、出生年份和所在系,要求用小寫字母表示所有系名。 SELECT Sname,‘Year of Birth:’,1996Sage,ISLOWER(Sdept) FROM Student; SLEECT Sname Name,‘Year of Birth:’ BIRTH,1996Sage BIRTHDAY,ISLOWER(Sdept) DEPARTMENT(查詢并將列重命名) FROM Student;18. 消除取值重復(fù)行:SLEECT DISTINCT Sno FROM SC;19. 查詢滿足條件的元組:=,,=,=,!=,!,!;NOT+上述比較符 BETWEEN AND,NOT BETWEEN AND確定范圍 IN,NOT IN確定集合(查找屬性值屬于指定集合的元組) LIKE,NOT LIKE進(jìn)行字符串的匹配 IS NULL,IS NOT NULL空值 AND,OR多重條件注:當(dāng)LIKE后面的匹配串中不含通配符時,可以用=取代LIKE謂詞。確定范圍:例10 查詢年齡在20~23之間的學(xué)生的姓名、系別和年齡。 SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;確定集合:例13 查詢不是信息系、數(shù)學(xué)系和計算機(jī)科學(xué)系學(xué)生的姓名和性別。 SELECT Sname,Ssex FROM Student WHERE Sdept NOT IN (‘IS’,‘MA’,‘CS’) ;字符匹配:例21 查詢?nèi)鄙俪煽兊膶W(xué)生的學(xué)號和相應(yīng)的課程號。 SELECT Cno,Ccredit FROM Course WHERE Cname LIKE ‘DB\_Design’ ESCAPE ’\’;(ESCAPE’\’后面的字符”_”不再有通配符的含義,轉(zhuǎn)移為普通的“_”字符)涉及空值的查詢:例22 查詢有成績的學(xué)生的學(xué)號和相應(yīng)的課程號 SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL;多重條件查詢:例23 查詢計算機(jī)系年齡在20歲以下的學(xué)生姓名。 SELECT Sname FROM Student WHERE Sdept=‘CS’ AND Sage20;20. 對查詢結(jié)果排序:用ORDER BY字句,升序(ASC)或降序排序(DESC)。例25 查詢?nèi)w學(xué)生情況,結(jié)果按所在系的系號升序排列,同一系中的學(xué)生按年齡將序排列。 SELECT * FROM Student ORDER BY Sdept,Sage DESC ;21. 集函數(shù):count,sum,avg,max,min 例27 查詢選修了課程的學(xué)生人數(shù)。 SELECT COUNT(DISTINCT Sno) FROM SC;22. GROUP BY子句:將查詢結(jié)果按某一列或多列的值分組,值相等的為一組。 例31 查詢選修了3門以上課程的學(xué)生學(xué)號。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)3;23. 連接條件:連接查詢中用來連接兩個表的條件。 例32 查詢每個學(xué)生及其選修課程的情況。 SELECT Student.*,SC.* FROM Student,SC WHERE =;24. 等值連接:連接運算符為=。25. 自然連接:在等值連接中,把目標(biāo)列中重復(fù)的屬性列去掉,就成為自然連接。26. 自身連接:一個表與其自己進(jìn)行連接。 例34 查詢每一門課的間接先修課(即先修課的先修課) SELECT , FROM Course FIRST,Course SECOND WHERE =; 運行結(jié)果:27. 嵌套查詢:將一個查詢快嵌套在另一個查詢塊的WHERE子句或HAVING短語的條件中的查詢。注:子查詢不能用ORDER BY子句。 例37 查詢與劉晨在同一個系學(xué)習(xí)的學(xué)生。 SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN ( SELECT Sdept FROM Student WHERE