考點(diǎn)22索引
建立索引是加快查詢速度的有效手段??梢愿鶕?jù)需要在基本表上建立一個或多個索引,從而提高系統(tǒng)的查詢效率。
1.建立索引
在SQL語言中,建立索引使用CREATE INDEX語句,其格式為:
CREATE〔UNIQUE〕乙CLUSTER〕INDEX<索引名>
ON<表名>(<列名>[<次序>〕[,<列名>[<次序>」…」);
索引可以建立在該表的一列或多列上,各列名之間用逗號分隔。每個<列名>后面還可以用<次序>指定索引值的排列次序,可選ASC(升序)或DESC(降序),默認(rèn)值為ASC。
UNIQuE表明此索引的每一個索引值只對應(yīng)的數(shù)據(jù)記錄。
CLUSTER表示要建立的索引是聚簇索引。所謂聚簇索引是指索引項(xiàng)的順序與表中記錄的物理順序一致的索引組織。
2.刪除索引
刪除索引使用DROP INDEx語句刪除索引時,系統(tǒng)會同時從數(shù)據(jù)字典中刪去有關(guān)該索引的描述,其一般格式為:
DROP INDEX<索弓l名>;
4.10 SQL的數(shù)據(jù)操縱
SQL語言的數(shù)據(jù)操縱包括INSERT(插人)、DELETE(刪除)、UPDATE(更新)和SELETE(檢索,又稱查詢)4個語句.
考點(diǎn)23 SQL的查詢語句
數(shù)據(jù)庫查詢是數(shù)據(jù)庫的核心操作SQL語言提供了SELECT語句進(jìn)行數(shù)據(jù)庫的查詢,該語句具有靈活的使用方式和豐富的功能二其一般格式為:
SELECT[ALLI DISTINCT]<目標(biāo)列表達(dá)式>〔,<目標(biāo)列表達(dá)式>=…
FROM<基本表或視圖>[,<基本表或視圖>=…
[WHERE<條件表達(dá)式>=
[GROUP BY<列名l>[HAVING<條件表達(dá)式>==
[ORDER BY<列名2>[ASC 1 DESC]=;
1.簡單查詢
簡單查詢涉及數(shù)據(jù)庫中的一個表,包括以下幾種:
(1)查詢表中的若干列。
(2)查詢經(jīng)過計算的值。
(3)消除取值重復(fù)的行。
(4)查詢滿足條件的元組。
(5)利用LIKE的查詢。
(6)涉及空值NULL的查詢。
(7)對查詢結(jié)果排序。
(8)使用集函數(shù)。
(9)對查詢結(jié)果分組。
2.連接查詢
若一個查詢同時涉及兩個以上的表,則稱之為連接查詢。連接查詢是關(guān)系數(shù)據(jù)庫中最主要的查詢,也是查詢中最難的一部分,包括等值連接、自然連接、非等值連接查詢、自身連接查詢、外連接查詢和復(fù)合條件連接查詢。
3.嵌套查詢
在SQL語言中,一個SELECT一FROM一WHERE語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢或子查詢。嵌套查詢是由里向外處理的,這樣外層查詢可以利用內(nèi)層查詢的結(jié)果。
(I)由謂詞IN引導(dǎo)的子查詢:IN是最常用的謂詞。
(2)謂詞是比較運(yùn)算符的子查詢。
(3)由[NOT]EXISITS謂詞引導(dǎo)的子查詢。
(4)集合查詢。
考點(diǎn)24 SQL的修改語句
SQL的修改語句包括更新、刪除和插人3類語句
1.更新(UPDATE)
更新操作語句的格式如下:
UPDATE<表名>
SET<列名>二<表達(dá)式>〔,<列名>二<表達(dá)式>〕…
[WHERE<條件>=;
更新的功能是修改指定表中滿足WHERE子句條件的元組。其中SET子句用于指定修改方法,即用<表達(dá)式.>的值取代相應(yīng)的屬性列值。如果省略WHERE子句,則表示要修改表中的所有元組。
2.刪除(DELETE)
刪除語句一般有兩種,格式如下:
DELETE
FROM<表名>
〔WHERE<條件>=;
DELETE語句的功能是從指定表中刪除滿足WHERE子句條件的所有元組。如果省略WHERE子句,表示刪除表中全部元組,但表的定義仍在字典中。
3.插入(INSERT)
插人語句的一般格式有兩種。
(1)插人一個元組格式如下:
INSERT INTO表名(字段名)),〔,字段名〕…)〕
VALUES(常量〔,常量〕…);
(2)插人子查詢結(jié)果格式如下:
INSERT INTO表名〔(字段名)[,字段名」…)」
子查詢;
第一種格式是把一個新記錄插人指定的表中;第二種格式是把子查詢的結(jié)果插人指定的表中。
4.11視圖
視圖是關(guān)系數(shù)據(jù)庫系統(tǒng)提供給用戶以多種角度觀察數(shù)據(jù)庫中數(shù)據(jù)的重要機(jī)制。視圖是一個定制的虛擬表可以是本地的、遠(yuǎn)程的或帶參數(shù)的;其數(shù)據(jù)可以來源于一個或多個表,或者其他視圖;它是可更新的,可以引用遠(yuǎn)程表,它可以更新數(shù)據(jù)源。
考點(diǎn)25定義視圖
1.創(chuàng)建視圖
SQL語言用CREATE VIEW命令建立視圖,其一般格式為:
CREATE VIEW<視圖名>〔(<列名>〔,<列名>…〕
AS<子查詢>
〔 LWITH CHECK OPTION〕:
其中子查詢可以是任意復(fù)雜的SELECT語句,但通常不允許含有ORDER BY子句和DISTINCT短語。WITH CHECK OPTION表示對視圖進(jìn)行UPDATE、INSERT和DELETE操作時要保證更新、插人或刪除的行滿足視圖定義中的謂司條件(即子查詢中的條件表達(dá)式)。
2.剛除視圖
視圖創(chuàng)建好以后,如果導(dǎo)出的此視圖的基本表被刪除了,則該視圖也將失效,但一般不會被自動刪除。刪除視圖通常需要顯式地使用DROP VIEW語句進(jìn)行。該語句格式為:
DROP VIEW<視圖名>:
考點(diǎn)26查詢視圖
DBMS執(zhí)行對視圖的查詢時,首先進(jìn)行有效性檢查。檢查查詢涉及的表、視圖等是否在數(shù)據(jù)庫中存在,如果存在,則從數(shù)據(jù)字典中取出查詢涉及的視圖的定義,把定義中的子查詢和用戶對視圖的查詢結(jié)合起來,轉(zhuǎn)換成對基本表的查詢,然后冉執(zhí)行這個經(jīng)過修正的查詢。將對視圖的查詢轉(zhuǎn)換為對基本表的查詢的過程稱為視圖的消解(View Resolution)。
考點(diǎn)27修改視圖
修改視圖包括插入(INSERT)、刪除(DELETE)和更新(UPDATE) 3類操作。
為防止用戶通過視圖對數(shù)據(jù)進(jìn)行增、刪、改操作時,無意或有意操作不屬于視圖范圍內(nèi)的基本表數(shù)據(jù)可在定義視圖時加仁WITH CHECK OPTION子句,這樣在視圖上增、刪、改數(shù)據(jù)時,DBMS會進(jìn)一步檢查視圖定義中的條件,若不滿足條件,則拒絕執(zhí)行該操作。
應(yīng)該指出的是,不可更新的視圖與不允許更新的視圖是兩個不同的概念。
考點(diǎn)28視圖的作用
合理使用視圖能夠給用戶帶來許多好處,其優(yōu)點(diǎn)包括以下兒個方面:
(1)能夠簡化用戶的操作。
(2)使用戶能以多種角度看待同一數(shù)據(jù)。
(3)對重構(gòu)數(shù)據(jù)庫提供了一定程度的邏輯獨(dú)立性。
(4)能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)。
4.12數(shù)據(jù)控制語句禾口嵌入式SQL
考點(diǎn)29授予權(quán)限
SQL,語言用GRANT語句向用戶授予操作權(quán)限,GRANT語句的一般格式為:
GRANT<權(quán)限>仁,<權(quán)限>=…
[ ON<對象類型><對象名>=
TO<用戶>仁,<用戶>=…
〔WITH GRANT OPTION〕;
其語義為:將對指定操作對象的指定操作權(quán)限授予指定的用戶。接受權(quán)限的用戶可以是一個或多個具體用戶,也可以是PUBLIC,即全體用戶。
如果指定了WITH GRANT OPTION子句,則獲得某種權(quán)限的用戶還可以把這種權(quán)限再授予別的用戶。如果沒有指定WITH GRANT OPTION子句,則獲得某種權(quán)限的用戶只能使用該權(quán)限,但不能傳播該權(quán)限。
考點(diǎn)30收回權(quán)限
授予的權(quán)限可以由DBA或其他授權(quán)者用REVOKE語句收回,REVOKE語句的一般格式如下:
REVOKE<權(quán)限>[,<權(quán)限>=…
[ON<對象類型><對象名>=
FROM<用戶>〔,<用戶>=…;
考點(diǎn)31嵌入式SQL
SQL語言提供了兩種不同的使用方式一種是在終端交互方式下將SQL語言嵌入到某種高級語言中使用。利用高級語言的過程性結(jié)構(gòu)來彌補(bǔ)SQL語言在實(shí)現(xiàn)復(fù)雜應(yīng)用方面的不足,這種方式下使用的SQL語言稱為嵌入式SQL(Embedded SQL),而嵌人SQL的高級語言稱為主語言或宿主語言。
對宿主型數(shù)據(jù)庫語言SQL, DBMS可采用兩種方法處理,一種是預(yù)編譯,另一種是修改和擴(kuò)充主語言,使之能處理SQL語句。目前采用較多的是預(yù)編譯的方法。
4.13函數(shù)依賴
考點(diǎn)32“不好”的關(guān)系模式
“不好”的關(guān)系模式有以下4個“毛病”:
(1)插人異常如果某供應(yīng)者沒有供應(yīng)任何貨物,則我們無法記錄他的名稱和地址。
(2)刪除異常。如果一個供應(yīng)者供應(yīng)的所有貨物都被刪除,則我們會丟失該供應(yīng)者的名稱和地址。
(3)冗余太大。一個供應(yīng)者每供應(yīng)一種貨物,他的地址就要重復(fù)一次。
(4)更新異常(不一致性的危險)。由于數(shù)據(jù)冗余,有可能使我們在一個元組中更改了某供應(yīng)者的地址,而沒有更改另一個元組片同一供應(yīng)者的地址,于是同一供應(yīng)者有了兩個不同地址,與實(shí)際情況不符
建立索引是加快查詢速度的有效手段??梢愿鶕?jù)需要在基本表上建立一個或多個索引,從而提高系統(tǒng)的查詢效率。
1.建立索引
在SQL語言中,建立索引使用CREATE INDEX語句,其格式為:
CREATE〔UNIQUE〕乙CLUSTER〕INDEX<索引名>
ON<表名>(<列名>[<次序>〕[,<列名>[<次序>」…」);
索引可以建立在該表的一列或多列上,各列名之間用逗號分隔。每個<列名>后面還可以用<次序>指定索引值的排列次序,可選ASC(升序)或DESC(降序),默認(rèn)值為ASC。
UNIQuE表明此索引的每一個索引值只對應(yīng)的數(shù)據(jù)記錄。
CLUSTER表示要建立的索引是聚簇索引。所謂聚簇索引是指索引項(xiàng)的順序與表中記錄的物理順序一致的索引組織。
2.刪除索引
刪除索引使用DROP INDEx語句刪除索引時,系統(tǒng)會同時從數(shù)據(jù)字典中刪去有關(guān)該索引的描述,其一般格式為:
DROP INDEX<索弓l名>;
4.10 SQL的數(shù)據(jù)操縱
SQL語言的數(shù)據(jù)操縱包括INSERT(插人)、DELETE(刪除)、UPDATE(更新)和SELETE(檢索,又稱查詢)4個語句.
考點(diǎn)23 SQL的查詢語句
數(shù)據(jù)庫查詢是數(shù)據(jù)庫的核心操作SQL語言提供了SELECT語句進(jìn)行數(shù)據(jù)庫的查詢,該語句具有靈活的使用方式和豐富的功能二其一般格式為:
SELECT[ALLI DISTINCT]<目標(biāo)列表達(dá)式>〔,<目標(biāo)列表達(dá)式>=…
FROM<基本表或視圖>[,<基本表或視圖>=…
[WHERE<條件表達(dá)式>=
[GROUP BY<列名l>[HAVING<條件表達(dá)式>==
[ORDER BY<列名2>[ASC 1 DESC]=;
1.簡單查詢
簡單查詢涉及數(shù)據(jù)庫中的一個表,包括以下幾種:
(1)查詢表中的若干列。
(2)查詢經(jīng)過計算的值。
(3)消除取值重復(fù)的行。
(4)查詢滿足條件的元組。
(5)利用LIKE的查詢。
(6)涉及空值NULL的查詢。
(7)對查詢結(jié)果排序。
(8)使用集函數(shù)。
(9)對查詢結(jié)果分組。
2.連接查詢
若一個查詢同時涉及兩個以上的表,則稱之為連接查詢。連接查詢是關(guān)系數(shù)據(jù)庫中最主要的查詢,也是查詢中最難的一部分,包括等值連接、自然連接、非等值連接查詢、自身連接查詢、外連接查詢和復(fù)合條件連接查詢。
3.嵌套查詢
在SQL語言中,一個SELECT一FROM一WHERE語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢或子查詢。嵌套查詢是由里向外處理的,這樣外層查詢可以利用內(nèi)層查詢的結(jié)果。
(I)由謂詞IN引導(dǎo)的子查詢:IN是最常用的謂詞。
(2)謂詞是比較運(yùn)算符的子查詢。
(3)由[NOT]EXISITS謂詞引導(dǎo)的子查詢。
(4)集合查詢。
考點(diǎn)24 SQL的修改語句
SQL的修改語句包括更新、刪除和插人3類語句
1.更新(UPDATE)
更新操作語句的格式如下:
UPDATE<表名>
SET<列名>二<表達(dá)式>〔,<列名>二<表達(dá)式>〕…
[WHERE<條件>=;
更新的功能是修改指定表中滿足WHERE子句條件的元組。其中SET子句用于指定修改方法,即用<表達(dá)式.>的值取代相應(yīng)的屬性列值。如果省略WHERE子句,則表示要修改表中的所有元組。
2.刪除(DELETE)
刪除語句一般有兩種,格式如下:
DELETE
FROM<表名>
〔WHERE<條件>=;
DELETE語句的功能是從指定表中刪除滿足WHERE子句條件的所有元組。如果省略WHERE子句,表示刪除表中全部元組,但表的定義仍在字典中。
3.插入(INSERT)
插人語句的一般格式有兩種。
(1)插人一個元組格式如下:
INSERT INTO表名(字段名)),〔,字段名〕…)〕
VALUES(常量〔,常量〕…);
(2)插人子查詢結(jié)果格式如下:
INSERT INTO表名〔(字段名)[,字段名」…)」
子查詢;
第一種格式是把一個新記錄插人指定的表中;第二種格式是把子查詢的結(jié)果插人指定的表中。
4.11視圖
視圖是關(guān)系數(shù)據(jù)庫系統(tǒng)提供給用戶以多種角度觀察數(shù)據(jù)庫中數(shù)據(jù)的重要機(jī)制。視圖是一個定制的虛擬表可以是本地的、遠(yuǎn)程的或帶參數(shù)的;其數(shù)據(jù)可以來源于一個或多個表,或者其他視圖;它是可更新的,可以引用遠(yuǎn)程表,它可以更新數(shù)據(jù)源。
考點(diǎn)25定義視圖
1.創(chuàng)建視圖
SQL語言用CREATE VIEW命令建立視圖,其一般格式為:
CREATE VIEW<視圖名>〔(<列名>〔,<列名>…〕
AS<子查詢>
〔 LWITH CHECK OPTION〕:
其中子查詢可以是任意復(fù)雜的SELECT語句,但通常不允許含有ORDER BY子句和DISTINCT短語。WITH CHECK OPTION表示對視圖進(jìn)行UPDATE、INSERT和DELETE操作時要保證更新、插人或刪除的行滿足視圖定義中的謂司條件(即子查詢中的條件表達(dá)式)。
2.剛除視圖
視圖創(chuàng)建好以后,如果導(dǎo)出的此視圖的基本表被刪除了,則該視圖也將失效,但一般不會被自動刪除。刪除視圖通常需要顯式地使用DROP VIEW語句進(jìn)行。該語句格式為:
DROP VIEW<視圖名>:
考點(diǎn)26查詢視圖
DBMS執(zhí)行對視圖的查詢時,首先進(jìn)行有效性檢查。檢查查詢涉及的表、視圖等是否在數(shù)據(jù)庫中存在,如果存在,則從數(shù)據(jù)字典中取出查詢涉及的視圖的定義,把定義中的子查詢和用戶對視圖的查詢結(jié)合起來,轉(zhuǎn)換成對基本表的查詢,然后冉執(zhí)行這個經(jīng)過修正的查詢。將對視圖的查詢轉(zhuǎn)換為對基本表的查詢的過程稱為視圖的消解(View Resolution)。
考點(diǎn)27修改視圖
修改視圖包括插入(INSERT)、刪除(DELETE)和更新(UPDATE) 3類操作。
為防止用戶通過視圖對數(shù)據(jù)進(jìn)行增、刪、改操作時,無意或有意操作不屬于視圖范圍內(nèi)的基本表數(shù)據(jù)可在定義視圖時加仁WITH CHECK OPTION子句,這樣在視圖上增、刪、改數(shù)據(jù)時,DBMS會進(jìn)一步檢查視圖定義中的條件,若不滿足條件,則拒絕執(zhí)行該操作。
應(yīng)該指出的是,不可更新的視圖與不允許更新的視圖是兩個不同的概念。
考點(diǎn)28視圖的作用
合理使用視圖能夠給用戶帶來許多好處,其優(yōu)點(diǎn)包括以下兒個方面:
(1)能夠簡化用戶的操作。
(2)使用戶能以多種角度看待同一數(shù)據(jù)。
(3)對重構(gòu)數(shù)據(jù)庫提供了一定程度的邏輯獨(dú)立性。
(4)能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)。
4.12數(shù)據(jù)控制語句禾口嵌入式SQL
考點(diǎn)29授予權(quán)限
SQL,語言用GRANT語句向用戶授予操作權(quán)限,GRANT語句的一般格式為:
GRANT<權(quán)限>仁,<權(quán)限>=…
[ ON<對象類型><對象名>=
TO<用戶>仁,<用戶>=…
〔WITH GRANT OPTION〕;
其語義為:將對指定操作對象的指定操作權(quán)限授予指定的用戶。接受權(quán)限的用戶可以是一個或多個具體用戶,也可以是PUBLIC,即全體用戶。
如果指定了WITH GRANT OPTION子句,則獲得某種權(quán)限的用戶還可以把這種權(quán)限再授予別的用戶。如果沒有指定WITH GRANT OPTION子句,則獲得某種權(quán)限的用戶只能使用該權(quán)限,但不能傳播該權(quán)限。
考點(diǎn)30收回權(quán)限
授予的權(quán)限可以由DBA或其他授權(quán)者用REVOKE語句收回,REVOKE語句的一般格式如下:
REVOKE<權(quán)限>[,<權(quán)限>=…
[ON<對象類型><對象名>=
FROM<用戶>〔,<用戶>=…;
考點(diǎn)31嵌入式SQL
SQL語言提供了兩種不同的使用方式一種是在終端交互方式下將SQL語言嵌入到某種高級語言中使用。利用高級語言的過程性結(jié)構(gòu)來彌補(bǔ)SQL語言在實(shí)現(xiàn)復(fù)雜應(yīng)用方面的不足,這種方式下使用的SQL語言稱為嵌入式SQL(Embedded SQL),而嵌人SQL的高級語言稱為主語言或宿主語言。
對宿主型數(shù)據(jù)庫語言SQL, DBMS可采用兩種方法處理,一種是預(yù)編譯,另一種是修改和擴(kuò)充主語言,使之能處理SQL語句。目前采用較多的是預(yù)編譯的方法。
4.13函數(shù)依賴
考點(diǎn)32“不好”的關(guān)系模式
“不好”的關(guān)系模式有以下4個“毛病”:
(1)插人異常如果某供應(yīng)者沒有供應(yīng)任何貨物,則我們無法記錄他的名稱和地址。
(2)刪除異常。如果一個供應(yīng)者供應(yīng)的所有貨物都被刪除,則我們會丟失該供應(yīng)者的名稱和地址。
(3)冗余太大。一個供應(yīng)者每供應(yīng)一種貨物,他的地址就要重復(fù)一次。
(4)更新異常(不一致性的危險)。由于數(shù)據(jù)冗余,有可能使我們在一個元組中更改了某供應(yīng)者的地址,而沒有更改另一個元組片同一供應(yīng)者的地址,于是同一供應(yīng)者有了兩個不同地址,與實(shí)際情況不符