《數(shù)據(jù)庫原理與技術(shù)(第二版)》課件第4章_第1頁
《數(shù)據(jù)庫原理與技術(shù)(第二版)》課件第4章_第2頁
《數(shù)據(jù)庫原理與技術(shù)(第二版)》課件第4章_第3頁
《數(shù)據(jù)庫原理與技術(shù)(第二版)》課件第4章_第4頁
《數(shù)據(jù)庫原理與技術(shù)(第二版)》課件第4章_第5頁
已閱讀5頁,還剩120頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第四章關(guān)系數(shù)據(jù)庫實現(xiàn)及使用關(guān)系代數(shù)SQL語言本章要點退出第四章關(guān)系數(shù)據(jù)庫實現(xiàn)及應(yīng)用4.1關(guān)系代數(shù)4.2關(guān)系演算4.3SQL語言概貌4.4SQL數(shù)據(jù)定義功能4.5SQL數(shù)據(jù)查詢語句4.6SQL查詢語句的加強4.7視圖4.8SQL數(shù)據(jù)更新語句4.9SQL數(shù)據(jù)控制功能4.10嵌入式SQL4.11查詢優(yōu)化關(guān)系代數(shù)是一種抽象的查詢語言,是關(guān)系數(shù)據(jù)操縱語言的一種傳統(tǒng)表達(dá)方式,它是用對關(guān)系的運算來表達(dá)查詢。按照表達(dá)查詢的方式可分為兩大類。第一類是用對關(guān)系的運算來表達(dá)查詢的方式,稱為關(guān)系代數(shù)。第二類是用謂詞來表達(dá)查詢要求的方式稱為關(guān)系演算。關(guān)系代數(shù)一、傳統(tǒng)的集合運算包括四種運算:并(∪)、交(∩)、差(-)、廣義笛卡爾積(×)。1.并(Union)設(shè)關(guān)系R和關(guān)系S具有相同的目n,且相應(yīng)的屬性取自同一個域。則關(guān)系R和關(guān)系S的并記為R∪S,其結(jié)果仍為n目關(guān)系,由屬于R或?qū)儆赟的元組組成。關(guān)系代數(shù)如R和S的元組分別用兩個圓表示,則R∪S的集合如圖4.1所示虛影部分元組。關(guān)系代數(shù)圖4.1集合R∪S集合RS關(guān)系代數(shù)關(guān)系代數(shù)2、交(Intersection)設(shè)關(guān)系R和關(guān)系S具有相同的目n,且相應(yīng)的屬性取自同一個域。關(guān)系R和關(guān)系S的交記為R∩S,結(jié)果仍為n目關(guān)系,由既屬于R又屬于S的元組組成。如R和S的元組分別用兩個圓表示,則R∩S集合運算結(jié)果可用圖4.2示意,則兩圓相交部分元組表示R與S的交。關(guān)系代數(shù)關(guān)系代數(shù)RS圖4.2集合R∩S關(guān)系代數(shù)關(guān)系代數(shù)3、差(Difference)

設(shè)關(guān)系R和關(guān)系S具有相同的目n,且相應(yīng)的屬性取自同一個域。定義關(guān)系R和關(guān)系S的差記為R-S,其結(jié)果仍為n目關(guān)系,由屬于R而不屬于S的元組組成。關(guān)系代數(shù)關(guān)系代數(shù)

如R和S的元組分別用兩個圓表示,則R-S的集合如圖4.3所示。比較圖4.1.2和圖4.1.3,顯然R=(R∩S)∪(R-S)或R-S=R-(R∩S)。RS圖4.3集合R-S關(guān)系代數(shù)4.笛卡爾積(ExtendedCartesianProduct)兩個分別為n,m的關(guān)系R和S的廣義笛卡爾積R×S是一個(n×m)元組的集合。元組的前n個分量是R的一個元組,后m個分量是S的一個元組.若R有K1個元組,S有K2個元組,則R×S有K1×K2個元組。記為R×S關(guān)系代數(shù)二、專門的關(guān)系運算包括四種運算即選擇(σ)、投影(∏)、連接()和除法(÷),是關(guān)系數(shù)據(jù)庫數(shù)據(jù)維護、查詢、統(tǒng)計等操作的基礎(chǔ)。1.選擇(Selection)設(shè)有關(guān)系R,在關(guān)系R中求取滿足給定條件F的元組組成新的關(guān)系的運算稱為選擇。記作:σF(R)關(guān)系代數(shù)

在σF(R)中,f是一個條件表達(dá)式,其值為“真”或“假”。σ

F

(R)是從關(guān)系R中選取使條件表達(dá)式F為真的元組。這是以行為處理單位進行的運算。條件表達(dá)式F是由常量、變量及算術(shù)比較符{>,≥,<,≤,=,≠}和邏輯運算符(∧,∨,)等構(gòu)成。關(guān)系代數(shù)關(guān)系代數(shù)關(guān)系代數(shù)式為:σ單價≥5(營業(yè)庫),結(jié)果如下表所示:2.投影(Projection)

設(shè)有關(guān)系R(A,B,C,D),在關(guān)系R中求指定的若干個屬性列組成新的關(guān)系的運算稱作投影,記作∏A(R)。其中A為欲選取的屬性的列表??梢杂茫毫忻?,列名2……形式表示,也可以用[1],[2],……形式表示。這是以列作為處理單位進行的運算,示意圖如圖4.4所示的陰影部分,a∈{A},c∈{A},d∈{A}。關(guān)系代數(shù)關(guān)系代數(shù)關(guān)系R(a,c,d)在A上的投影,即∏A(R),A包括:a,c,d等域。關(guān)系代數(shù)∏[3],[4](營業(yè)庫),結(jié)果:注意:在投影后如出現(xiàn)重復(fù)元組,應(yīng)只保留一個

關(guān)系代數(shù)【例4.7】求“營業(yè)庫”中所有單價大于5元的商品品名和單價,求關(guān)系運算式。關(guān)系運算式:∏品名,單價(σ單價≥5(營業(yè)庫)

表4.9從表4.6再作投影品名單價鋼筆10.00圓珠筆6.00筆記本8.00關(guān)系代數(shù)3.連接(Join)從兩個分別為n,m元的關(guān)系R和S的廣義笛卡爾積中選取滿足給定條件F的元組組成新的關(guān)系稱為R和S的連接,記作RS(F=AθB)。其中A和B分別為R和S上度數(shù)相等且可比的屬性列,θ是算術(shù)比較符(>,≥,<,≤,=,≠)。AθB例如:關(guān)系R和S如表4.10,4.11所式,求RS,連接結(jié)果如圖所示。A=C關(guān)系代數(shù)4.除(Division)給定關(guān)系R(x,y)與S(y)其中x,y為屬性集(也可為單屬性),R中的y和S中的y可以有不同的屬性名,但必須出自相同的域集。在求解R÷S時,對R按x的值分組,然后檢查每一組,如某一組中的y包含S中全部的y,則取該組中的x的值作為商關(guān)系中的一個元組,否則不取。如此求出R÷S的商。關(guān)系代數(shù)關(guān)系代數(shù)第四章關(guān)系數(shù)據(jù)庫實現(xiàn)及應(yīng)用4.1關(guān)系代數(shù)4.2關(guān)系演算4.3SQL語言概貌4.4SQL數(shù)據(jù)定義功能4.5SQL數(shù)據(jù)查詢語句4.6SQL查詢語句的加強4.7視圖4.8SQL數(shù)據(jù)更新語句4.9SQL數(shù)據(jù)控制功能4.10嵌入式SQL4.11查詢優(yōu)化關(guān)系演算以數(shù)理邏輯中的謂詞演算為基礎(chǔ)。謂詞(Predicate)指明一個條件,通過對它的求解可得出下列之一的值:“真”、“假”、“未知”。常見的謂詞例如:比較謂詞:>,≥,<,≤,=,≠;包含謂詞:IN;存在謂詞:EXISTS關(guān)系演算一、元組關(guān)系演算用表達(dá)式{t|Q(t)}來表示,其中t為元組變量,Q(t)是由關(guān)系名、元組變量、常量及運算符組成的公式。{t|Q(t)}表示使Q(t)為“真”的元組的集合。關(guān)系演算

關(guān)系代數(shù)的運算均可用關(guān)系演算表達(dá)式來表示(反之亦然)表示如下:1)并:R∪S={t|R(t)∨S(t)}2)交:R∩S={t|R(t)∧S(t)}3)差:R-S={t|R(t)∧S(t)}4)投影:∏i1,i2,…ik(R)={tk|(u)(R(u)∧t[1]=u[i1]∧…t[k]=u[ik])}關(guān)系演算5)選擇:其中F’是由F用t[i]代替運算對象i得到的等價公式。6)連接={t(n+m)|(u(n))(v(m))(R(u)∧s(v)∧t[1]=u[1]∧t[2]=u[2]∧…t[n]=u[n]∧t[n+1]=v[1]∧…t[n+m]=v[m]∧)關(guān)系演算關(guān)系演算【例4.10】根據(jù)表4.2營業(yè)庫顯示所有品名及其單價。C0l={t(2)|(u)(營業(yè)庫(u))∧t[1]=u[品名]∧t[2]=u[單價]}二、域關(guān)系演算用表達(dá)式{x1,x2,…xk|(x1,x2,…xk)}來表示,其中x1,x2,…xk是域變量,是由關(guān)系、域變量、常量及運算符組成的式子。{x1,x2,…xk|(x1,x2,…xk)}表示所有使(x1,x2,…xk)為“真”的那些x1,x2,…xk組成的元組的集合。每一個關(guān)系代數(shù)表達(dá)式有一個等價的域演算表達(dá)式,反之亦然。關(guān)系演算關(guān)系演算【例4.11】如果有關(guān)系:學(xué)生(學(xué)號,姓名,年齡,性別),求用域關(guān)系演算式表示年齡大于20的學(xué)生的學(xué)號,姓名,年齡。解:{<學(xué)號,姓名,年齡>|性別(<學(xué)號,姓名,年齡,性別>學(xué)生∧年齡>20)}第四章關(guān)系數(shù)據(jù)庫實現(xiàn)及應(yīng)用4.1關(guān)系代數(shù)4.2關(guān)系演算4.3SQL語言概貌4.4SQL數(shù)據(jù)定義功能4.5SQL數(shù)據(jù)查詢語句4.6SQL查詢語句的加強4.7視圖4.8SQL數(shù)據(jù)更新語句4.9SQL數(shù)據(jù)控制功能4.10嵌入式SQL4.11查詢優(yōu)化SQL(StructuredQueryLanguage):指結(jié)構(gòu)化查詢語言,但成為關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言之后它已成為一種綜合的、通用的、功能極強的關(guān)系數(shù)據(jù)庫語言。SQL語言概貌

SQL語言概貌(1)一體化的特點。(2)語言簡潔,易學(xué)易用。(3)高度非過程化。(4)極強適應(yīng)性。(5)SQL語言支持關(guān)系數(shù)據(jù)庫三級模式的結(jié)構(gòu)。第四章關(guān)系數(shù)據(jù)庫實現(xiàn)及應(yīng)用4.1關(guān)系代數(shù)4.2關(guān)系演算4.3SQL語言概貌4.4SQL數(shù)據(jù)定義功能4.5SQL數(shù)據(jù)查詢語句4.6SQL查詢語句的加強4.7視圖4.8SQL數(shù)據(jù)更新語句4.9SQL數(shù)據(jù)控制功能4.10嵌入式SQL4.11查詢優(yōu)化一、基本表的定義和修改

SQL數(shù)據(jù)定義功能包括:定義基本表定義視圖定義索引SQL數(shù)據(jù)定義功能1、定義基本表的語句:CREATETABLE表名(列名1類型)[NOTNULL][,列名2類型][NOTNULL]…)[其他參數(shù)]“其他參數(shù)”指與物理存儲有關(guān)的參數(shù),隨具體系統(tǒng)不同而不同;“[]”表示可選項;“|”表示多選一項,對于其兩邊內(nèi)容,用戶只能且必需選一項。SQL數(shù)據(jù)定義功能SQL數(shù)據(jù)定義功能一般的SQL支持的數(shù)據(jù)類型有:INTEGER全字長(31bits精度)的二進制整數(shù)。SMALLINT半字長(精度為15bits)的二進制整數(shù)。DECIMAL([p,q])壓縮十進制數(shù),共p位,小數(shù)點后有q位(15≥P≥q≥0,q=0時可省略)。FLOAT雙字長的浮點數(shù)。CHAR(n)長度為n的定長字符串。VARCHAR(n)變長字符串,最大長度為n。

SQL數(shù)據(jù)定義功能SQL支持空值(NULL)的概念.空值是不知道的或不確定的值,除了候選關(guān)鍵字外,任何列可以有空值。如不允許空值,則應(yīng)指定該列NOTNULL

2、修改基本表定義語句

ALTERTABLE表名ADD列名類型例如ALTERTABLE學(xué)生ADD班級CHAR(4)在修改基本表定義的列的語句中不允許NOTNULL。

ALTERTABLE表名RENAMECOLUMN原列名TO新列名用于更改某列名。SQL數(shù)據(jù)定義功能

ALTERTABLE

表名ALTERCOLUMN

列名類型[(寬度)[,小數(shù)位]]修改字段類型、字段或數(shù)值型字段寬度和數(shù)值型字段小數(shù)點后位數(shù)。ALTERTABLE

表名

DROPCOLUMN

列名從表中刪去一列。SQL數(shù)據(jù)定義功能3、刪除基本表的語句

DROPTABLE表例如:DROPTABLE學(xué)生將把一個基本表的定義連同其中記錄、索引及它導(dǎo)出的所有視圖全部刪除或不可引用。SQL數(shù)據(jù)定義功能二、索引的建立和刪除1、索引的建立

CAEATE[UNIQUE]INDEX索引名ON基本表名(列名[次序][,列名[次序]]…)[其他參數(shù)]

索引可以建立在一列或幾列上,其中次序可?。篈SC(升序)或DESC(降序),缺省值為升序。UNIQUE表示每一個索引值只對應(yīng)唯一的數(shù)據(jù)記錄。用中括號[]表示是可選項。例如CREATEINDEX學(xué)生索引ON學(xué)生(班級DESC,學(xué)生號)。SQL數(shù)據(jù)定義功能2.刪除索引的語句DROPINDEX索引名例如DROPINDEX學(xué)生索引SQL數(shù)據(jù)定義功能第四章關(guān)系數(shù)據(jù)庫實現(xiàn)及應(yīng)用4.1關(guān)系代數(shù)4.2關(guān)系演算4.3SQL語言概貌4.4SQL數(shù)據(jù)定義功能4.5SQL數(shù)據(jù)查詢語句4.6SQL查詢語句的加強4.7視圖4.8SQL數(shù)據(jù)更新語句4.9SQL數(shù)據(jù)控制功能4.10嵌入式SQL4.11查詢優(yōu)化一、語句格式SQL語言數(shù)據(jù)庫查詢語句一般格式是:SELECT*|<表達(dá)式>FROM基本表|視圖[WHERE條件表達(dá)式1][GROUPBY列名1[HAVLNG條件表達(dá)式2]……][ORDERBY列名2[ASC/DESC]……]注意:這是一條SQL語句SQL數(shù)據(jù)查詢語句SQL數(shù)據(jù)查詢語句

“目標(biāo)列”的格式可以是以下格式:1)列名1,列名2……其中列名1,列名2為FROM子句中所指基本表或視圖中的列名;如果FROM子句中指定多個表,且列名有相同的時,則列名應(yīng)寫為“表名.列名”的形式。SQL數(shù)據(jù)查詢語句2)上述每一項可以是表達(dá)式,“目標(biāo)列”允許使用SQL提供的集合函數(shù)形成表達(dá)式。常用的集合函數(shù)如下:COUNT(*)計算記錄條數(shù)COUNT(列名)計算一列值的個數(shù)SUM(列名)計算某一列值的總和,該列必須為數(shù)值類型AVG(列名)計算某一列值的平均值,該列必須為數(shù)值類型MAX(列名)計算某一列值的最大值,該列必須為數(shù)值類型MIN(列名)計算某一列值的最小值,該列必須為數(shù)值類型如無HAVING子句,上述函數(shù)完成對全表統(tǒng)計,否則作分組統(tǒng)計。

SQL數(shù)據(jù)查詢語句SQL數(shù)據(jù)查詢語句3)DISTINCT列名1[,列名2…]表示在最終結(jié)果表中,屬性相同的元組只保留一條。在書寫時,允許使用通配符“*”、“?”。“*”表示任意一字符串?!埃俊北硎救我庖粋€字符。“基本表或視圖”格式如下所示:表名1(或視圖名1)[別名1][,表名2(或視圖名2)[別名2]]…SQL數(shù)據(jù)查詢語句如果{<表達(dá)式>}由列名構(gòu)成,將實現(xiàn)關(guān)系投影運算。如果FROM中指定的是一個表,WHERE的描述將實現(xiàn)選擇運算。如果FROM中指定的是多個表,WHERE的描述中將包括連接運算。SQL數(shù)據(jù)查詢語句二、對單一表查詢語句示例下列示例中使用的基本表的結(jié)構(gòu)假設(shè)為:學(xué)生(學(xué)生號,姓名,性別,出生年份,班級,寢室號)課程(課程號,課程名,先行課程名)成績(學(xué)生號,課程號,分?jǐn)?shù))其中出生年份和分?jǐn)?shù)為整型,其他為字符類型SQL數(shù)據(jù)查詢語句例4.12求所有學(xué)生表數(shù)據(jù)。SELECT*FROM學(xué)生例4.13求所有學(xué)生姓名的列表。SELECT姓名FROM學(xué)生例4.14如當(dāng)前系統(tǒng)設(shè)定的年份為YEAR1求顯示所有學(xué)生姓名、年齡。SELECT姓名,YEAR1-出生年份FROM學(xué)生SQL數(shù)據(jù)查詢語句例4.15求顯示學(xué)生人數(shù)和學(xué)生平均年齡。SELECTCOUNT(*),AVG(YEAR1-出生年份)FROM學(xué)生例4.16求所有學(xué)生班級的列表。SELECTDISTINCT班級FROM學(xué)生因為每個學(xué)生班級均有許多學(xué)生,為在列表中不出現(xiàn)重復(fù)班級名,故使用了“DISTINCT”。SQL數(shù)據(jù)查詢語句例4.17顯示一個學(xué)生表,要求先按班級,在班級相同時按學(xué)生號排序。SELECT*FROM學(xué)生ORDERBY班級,學(xué)生號例4.18求全體男生信息。SELECT*FROM學(xué)生WHERE性別=‘男’例4.19求1980年以前出生的女生姓名、性別、出生年份。SELECT姓名,性別,出生年份FROM學(xué)生WHERE性別=‘女’AND出生年份<1980SQL數(shù)據(jù)查詢語句例4.20假設(shè)沒有安排寢室學(xué)生的寢室號為空值,求沒有安排寢室學(xué)生姓名。SELECT姓名FROM學(xué)生WHERE寢室號ISNULL涉及空值的謂詞的一般形式是:列名IS[NOT]NULL。在條件表達(dá)式中還經(jīng)常使用謂詞IN、BETWEEN、LIKE。SQL數(shù)據(jù)查詢語句例4.21求200101班和200103班的學(xué)生表。實現(xiàn)語句1:SELECT*FROM學(xué)生

WHERE班級IN(‘200101’,‘200103’)實現(xiàn)語句2:SELECT*FROM學(xué)生

WHERE班級=‘200101’OR班級=‘200103’謂詞IN實際是一系列邏輯關(guān)系詞“OR”的縮寫。也可用謂詞NOTIN表示不在某集合之中。SQL數(shù)據(jù)查詢語句例4.22求出生年份在1982至1985年間的學(xué)生姓名和出生年份。SELECT姓名,出生年份FROM學(xué)生WHERE出生年份BETWEEN1982AND1985SQL數(shù)據(jù)查詢語句例4.23找出所有2001級學(xué)生。SELECT*FROM學(xué)生WHERE班級LIKE‘2001%’使用謂詞LIKE時,列名必須為各種字符串類型??刹捎靡恍┩ㄅ渥址海撸ㄏ聶M線)表示任意一單個字符。%(百分號)表示任意長度字符串。SQL數(shù)據(jù)查詢語句例4.23求選修課程超過了三門的學(xué)生號SELECT學(xué)生號FROM成績GROUPBY學(xué)生號HAVINGCOUNT(*)>3以上查詢實現(xiàn)了關(guān)系運算中投影與選擇兩種運算。SQL數(shù)據(jù)查詢語句三、對兩個以上表的連接查詢例4.25求所有學(xué)生信息,包括他所學(xué)的課程的課程號和成績,并按課程號和成績排名。SELECT學(xué)生.*,成績.*FROM學(xué)生,成績WHERE學(xué)生.學(xué)生號=成績.學(xué)生號ORDERBY課程號,分?jǐn)?shù)DESCSQL數(shù)據(jù)查詢語句例4.26求分?jǐn)?shù)為優(yōu)良(80分?jǐn)?shù)及以上)的所有成績組成的表,要求顯示內(nèi)容包括姓名、課程名和分?jǐn)?shù)。SELECT姓名,課程名,分?jǐn)?shù)FROM學(xué)生,成績,課程

WHERE學(xué)生.學(xué)號=成績.學(xué)號

AND成績.課程號=課程.課程號AND分?jǐn)?shù)>=80SQL數(shù)據(jù)查詢語句___自連接例4.27求每門課程的先行課的先行課。SELECT表1.課程名,表2.先行課程名FROM課程表1,課程表2WHERE表1.課程號=表2.課程號別名例4.28求既選修了課程號為C1,又選修了課程號為C2這兩門課的學(xué)生的學(xué)生號。SELECT表1.學(xué)生號FROM成績表1,成績表2WHERE表1.學(xué)生號=表2.學(xué)生號AND表1.課號=‘C1’AND表2.課號=‘C2’SQL數(shù)據(jù)查詢語句___自連接SQL數(shù)據(jù)查詢語句__嵌套查詢

嵌套查詢亦稱為子查詢,它是指一個SELECT-FROM-WHERE查詢塊可以嵌入到另一個查詢塊之中的查詢。例4.29求選修了課程號為‘C1’的學(xué)生姓名。SELECT姓名FROM學(xué)生WHERE學(xué)號IN(SELECT學(xué)號FROM成績

WHERE課程號=‘C1’)SQL數(shù)據(jù)查詢語句例4.30求選修了課程名為‘C語言’的學(xué)生姓名。SELECT姓名FROM學(xué)生WHERE學(xué)號IN

(

SELECT學(xué)號FROM成績

WHERE課程號IN(SELECT課程號FROM課程

WHERE課程名=‘C語言’))SQL數(shù)據(jù)查詢語句例4.31由表4.3所示關(guān)系,求表成績1和成績2的兩個關(guān)系的交。SELECT*FROM成績1WHERE學(xué)生號IN(SELECT學(xué)生號FROM成績2WHERE成績1.課程號=成績2.課程號

AND成績1.分?jǐn)?shù)=成績2.分?jǐn)?shù))SQL數(shù)據(jù)查詢語句例4.32由表4.3所示關(guān)系,求成績1-成績2兩個關(guān)系的差。SELECT*FROM成績1WHERE學(xué)生號NOTIN(SELECT學(xué)生號FROM成績2WHERE成績1.課程號=成績2.課程號

AND成績1.分?jǐn)?shù)=成績2.分?jǐn)?shù))SQL數(shù)據(jù)查詢語句兩個SELECT-FROM-WHERE查詢塊如果目標(biāo)列相同,可利用謂詞UNION構(gòu)成一個查詢,實現(xiàn)關(guān)系并運算,其格式如下:SELECT目標(biāo)列1FROM表1WHERE條件表達(dá)式1UNIONSELECT目標(biāo)列2FROM表2WHERE條件表達(dá)式2SQL數(shù)據(jù)查詢語句目標(biāo)列1與目標(biāo)列

2名字不要求一樣,但列數(shù)對應(yīng)列類型和寬度必須一樣,結(jié)果中的列名按第一個查詢塊中列名查詢時將去掉重復(fù)元組。例4.33求營業(yè)庫1和營業(yè)庫2兩個關(guān)系的并。SELECT*FROM營業(yè)庫1UNIONSELECT*FROM營業(yè)庫2SQL數(shù)據(jù)查詢語句__關(guān)系除法

一般用于實現(xiàn)關(guān)系除法,需利用存在量詞EXISTS和NOTEXISTS。這類查詢稱為相關(guān)子查詢(CorrelatedSubquery)。相關(guān)子查詢中查詢條件依賴于外層查詢中的某個值,因此不能只處理一次,而要內(nèi)外交錯反復(fù)求值。應(yīng)用EXISTS查詢語句定義見下例。例4.35求選修了課程號為‘C1’的學(xué)生姓名SELECT姓名FROM學(xué)生WHEREEXISTS(SELECT*FROM成績

WHERE成績.學(xué)號=學(xué)生.學(xué)號AND

課程號=‘C1’)SQL數(shù)據(jù)查詢語句__關(guān)系除法SQL數(shù)據(jù)查詢語句__關(guān)系除法在SQL中沒有全稱量詞(Forall),但是帶全稱量詞的謂詞都可轉(zhuǎn)換成等價的帶存在量詞的謂詞:

例4.36求選修了全部課程的學(xué)生姓名。SELECT姓名FROM學(xué)生WHERENOTEX1STS(SELECT*FROM課程WHERENOTEX1STS(SELECT*FROM成績

WHERE成績.學(xué)號=學(xué)生.學(xué)號AND

成績.課程號=課程.課程號))SQL數(shù)據(jù)查詢語句__關(guān)系除法更一般的關(guān)系除法問題如下例。例4.37求至少選修了學(xué)生號為S1的學(xué)生所選修的全部課程的學(xué)生的學(xué)生號。本問題含義是對成績表按學(xué)生號分組,如每組課程號包含了學(xué)生號為S1,所選修的全部課程的課程號則取該組學(xué)生號列入結(jié)果表。SQL數(shù)據(jù)查詢語句SQL沒有蘊函(Implication)邏輯運算。但是蘊函邏輯運算可作如下變換,

其意義是說如p包含在q中,則一定不存在:“包含在p內(nèi)的元素”卻“不在q之中”的情況。上例也就可如下表述:求這樣一些學(xué)生學(xué)號,不存在這樣的情況,即S1選修了的課程CY,他卻沒有選修。SQL數(shù)據(jù)查詢語句如果用p表示謂詞“學(xué)生s1選修課程cy”,用q表示謂詞“學(xué)生Sx選修課程Cy”,則上述查詢可表示為:SELECTDISTINCT學(xué)生號FROM成績表1WHERENOTEXISTS(SELECT*FROM成績表2WHERE表2.學(xué)生號=‘S1’ANDNOTEXISTS(SELECT*FROM成績表3WHERE表3.學(xué)生號=表1.學(xué)生號AND

表3.課程號=表2.課程號))許多數(shù)據(jù)庫產(chǎn)品對SQL查詢語句進一步擴展。以下結(jié)合SQLServer摘要介紹:1.輸出列更名運算SELECT[DISTINCT][<別名1>]<表達(dá)式1>[AS<新列名1>][,<別名2>]<表達(dá)式2>[AS<新列名2>]…]FROM……“AS新列名”指定查詢結(jié)果中列的重新定義的標(biāo)題。SQL查詢語句的加強

2.輸出定向有許多應(yīng)用要求根據(jù)查詢語句產(chǎn)生一個新表并將查詢結(jié)果送到新表中等,其方法是在語句中增加子句:INTO<表名>SQL查詢語句的加強

3.外部連接實現(xiàn)外連接的方法是在FROM子句中增加有關(guān)連接的語句成分,格式為:<表名1><連接類別>OUTERJOIN<表名2>根據(jù)連接類別不同具體分為:SQL查詢語句的加強左外連接,格式為:<表名1>LEFTOUTERJOIN<表名2>,意義為可供選作輸出內(nèi)容的記錄除了滿足連接條件的記錄之外,還要加上那些左表(表名1)中不滿足連接條件的記錄。右外連接,格式為:<表名1>RIGHTOUTERJOIN<表名2>,意義為可供選作輸出內(nèi)容的記錄除了滿足連接條件的記錄之外,還要加上那些右表(表名2)中不滿足連接條件的記錄。全外連接,格式為:<表名1>OUTEROUTERJOIN<表名2>,意義為可供選作輸出內(nèi)容的記錄除了滿足連接條件的記錄之外,還要同時加上那些左表(表名1)中不滿足連接條件的記錄以及右表(表名2)中不滿足連接條件的記錄。SQL查詢語句的加強例4.38求根據(jù)表4.2生成一個新表:統(tǒng)計表,包括所有單價大于5元的記錄,并要求增加二列:金額、說明,其中金額=數(shù)量×單價,說明要求10個字符寬,以空格填充。SELECT*,數(shù)量*單價AS金額,“”AS說明

FROM營業(yè)庫WHERE單價>5INTO統(tǒng)計表SQL查詢語句的加強例4.39求生成按課程成績的分析統(tǒng)計表,包括每門課平均分、最高分、最低分,存放在表TMP中。SELECT課程號,AVG(分?jǐn)?shù))AS平均分,MAX(分?jǐn)?shù))AS最高分,MIN(分?jǐn)?shù))AS最低分

FROM成績

GROUPBY課程號

INTOTMPSQL查詢語句的加強

例4.40對于表4.2營業(yè)庫,求生成統(tǒng)計表,要求按商品代碼分組,顯示每筆記錄,對每組記錄顯示之后求該組“數(shù)量”數(shù)據(jù)之和,并在其中品名欄內(nèi)標(biāo)注“小計”字樣。SQL查詢語句的加強

例4.41求生成按課程成績的分析表,包括所有學(xué)生姓名,班級,課程號,分?jǐn)?shù)。要求沒有成績的學(xué)生情況也能顯示。SELECT學(xué)生.姓名,學(xué)生.班級,成績.課程號,成績.分?jǐn)?shù)FROM學(xué)生LEFTOUTERJOIN成績第四章關(guān)系數(shù)據(jù)庫實現(xiàn)及應(yīng)用4.1關(guān)系代數(shù)4.2關(guān)系演算4.3SQL語言概貌4.4SQL數(shù)據(jù)定義功能4.5SQL數(shù)據(jù)查詢語句4.6SQL查詢語句的加強4.7視圖4.8SQL數(shù)據(jù)更新語句4.9SQL數(shù)據(jù)控制功能4.10嵌入式SQL4.11查詢優(yōu)化視圖和表不同之處在于,它并沒有真正地存儲數(shù)據(jù),它所存取的數(shù)據(jù)必須依附于所關(guān)聯(lián)的數(shù)據(jù)表,它是一種虛的映射關(guān)系。

SQL建立視圖的語句格式:

CREATEVIEW視圖名[(字段名[,字段名]…]AS子查詢[WITHCHECKOPTION]視圖所用字段名可以與基本表中字段名不一致。視圖當(dāng)字段名不一致或子查詢中目標(biāo)列列名是函數(shù)、一般表達(dá)式或子查詢中目標(biāo)列有相同列名時,在視圖定義中必須指出視圖的各個字段名,也可以不列出,默認(rèn)與子查詢結(jié)果相同。視圖在子查詢中一般不能包括DISTINCT,INTO,ORDER等,不能涉及臨時表。WITHCHECKOPTION選項表示在通過視圖對基本表進行插入和更新操作時必須滿足子查詢中WHERE語句中規(guī)定的條件。視圖視圖例4.42將學(xué)生表、成績表、課程表連接后取部分字段建立視圖。CREATEVIEW學(xué)生成績ASSELECT姓名,課名,分?jǐn)?shù)FROM學(xué)生,成績,課程WHERE學(xué)生.學(xué)生號=成績.學(xué)生號AND

成績.課程號=課程.課程號視圖例4.43例4.39我們可改為視圖方式。CREATEVIEW成績統(tǒng)計(課程號,平均分,最高分,最低分)ASSELECT課程號,AVG(分?jǐn)?shù)),MAX(分?jǐn)?shù)),MIN(分?jǐn)?shù))FROM成績

GROUPBY課程號再查看成績統(tǒng)計表。使用如下語句:SELECT*FROM成績統(tǒng)計

刪除視圖語句格式為:

DROPVIEW視圖名一個基本表的刪除,由它導(dǎo)出的視圖將自動刪除。當(dāng)一個視圖被刪去后,由它導(dǎo)出的其他視圖也將自動刪除或變?yōu)椴豢梢谩R晥D不僅可用于查詢,還可借助視圖實現(xiàn)對基本表的插入、修改和刪除操作。視圖在關(guān)系優(yōu)化過程中,我們將一個實際數(shù)據(jù)改為多個表存儲,使用戶面對的是復(fù)雜的數(shù)據(jù)結(jié)構(gòu),而視圖可不改變數(shù)據(jù)存儲結(jié)構(gòu)同時又使用戶面對的是簡單的數(shù)據(jù)結(jié)構(gòu),視圖將其中連接操作對用戶隱藏起來,就使用戶對數(shù)據(jù)使用大大簡化,更容易操作。視圖在一些數(shù)據(jù)庫系統(tǒng)中,利用視圖可建立兩個不同數(shù)據(jù)庫系統(tǒng)的聯(lián)系和通信。例如VFP中,可十分容易地建立ORACLE、ACCESS、SQLSERVER等系統(tǒng)中的表的視圖,稱之為“遠(yuǎn)程視圖”。VFP的程序可對這些視圖如同基本表一樣作查詢、錄入、修改、刪除等操作,并借之實現(xiàn)對相關(guān)數(shù)據(jù)庫系統(tǒng)中表的操作,使得程序設(shè)計大大簡化。視圖視圖視圖的作用:(1)視圖對于數(shù)據(jù)庫的重構(gòu)提供了一定程度的邏輯獨立性(2)簡化用戶觀點,隱藏了表之間的連接(3)方便用戶,使用戶從不同角度看待數(shù)據(jù)(4)提供數(shù)據(jù)安全功能(5)在一些數(shù)據(jù)庫系統(tǒng)中,利用視圖可建立兩個不同數(shù)據(jù)庫系統(tǒng)的聯(lián)系和通信第四章關(guān)系數(shù)據(jù)庫實現(xiàn)及應(yīng)用4.1關(guān)系代數(shù)4.2關(guān)系演算4.3SQL語言概貌4.4SQL數(shù)據(jù)定義功能4.5SQL數(shù)據(jù)查詢語句4.6SQL查詢語句的加強4.7視圖4.8SQL數(shù)據(jù)更新語句4.9SQL數(shù)據(jù)控制功能4.10嵌入式SQL4.11查詢優(yōu)化一、修改(UPDATE)語句格式:UPDATE表名SET字段=表達(dá)式

[,字段=表達(dá)式]…[WHERE條件表達(dá)式]例4.44將營業(yè)庫中所有單價高于5元的商品單價減少10%。UPDATE營業(yè)庫SET單價=單價*0.9WHERE單價>5SQL數(shù)據(jù)更新語句SQL數(shù)據(jù)更新語句二、刪除(DELETE)語句格式:DELETEFROM表名

[WHERE條件表達(dá)式]

例4.45清空成績表。

DELETEFROM成績例4.46清空89級學(xué)生成績記錄。DELETEFROM成績WHERE學(xué)生號IN(SELECT學(xué)生號FROM學(xué)生WHERE班級LIKE“1989%”)SQL數(shù)據(jù)更新語句三、插入(INSERT)語句格式1:INSERTINTO表名[(字段名[,字段名)…)]VALUES(表達(dá)式[,表達(dá)式]…)格式2:INSERTINTO表名[(字段名[,字段名]…)]

子查詢SQL數(shù)據(jù)更新語句例4.47錄入一個學(xué)生記錄到學(xué)生表中,假設(shè)已將其學(xué)號、姓名、性別、出生年份和班級數(shù)據(jù)分別賦值給變量xh1、xm1、xbl、csnf1、bj1。INSERTINTO學(xué)生(學(xué)號,姓名,性別,出生年份,班級)VALUES(xh1,xm1,xbl,csnf1,bj1)SQL數(shù)據(jù)更新語句例4.48欲由表4.1的營業(yè)庫1和營業(yè)庫2生成表4.2的營業(yè)庫表且增加金額一欄,可先基于營業(yè)庫1生成一個新表,在新表中增加“金額”字段,再將營業(yè)庫2的數(shù)據(jù)添加到生成的新表中。用如下兩條語句完成。SELECT*,數(shù)量*單價AS金額

FROM營業(yè)庫1INTO營業(yè)庫INSERTINTO營業(yè)庫SELECT*,數(shù)量*單價FROM營業(yè)庫2SQL數(shù)據(jù)更新語句四、視圖的更新若一個視圖是從單個基本表導(dǎo)出,且只是去掉了基本表的某些行和某些列(不包括候選關(guān)鍵字),我們稱這類視圖為行列子集視圖。例如:建立女學(xué)生視圖S_V1。CREATEVIEWS_V1ASSELECT學(xué)生號,性別FROM學(xué)生WHERE性別=‘女’SQL數(shù)據(jù)更新語句對于行列子集視圖允許通過它更新基本表。對視圖的更新,實質(zhì)是通過視圖實現(xiàn)對基本表的更新。但如果視圖中某些字段對應(yīng)的是對基本表按某種表達(dá)式運算的結(jié)果,或者視圖是基于多表建立的,將不能通過這樣的視圖實現(xiàn)對基本表的更新。SQL數(shù)據(jù)更新語句例如刪除女學(xué)生視圖s_v1中學(xué)號為200101的學(xué)生。DELETEFROMs_v1WHERE學(xué)號=‘200101’;轉(zhuǎn)換為對基本表的更新:DELETEFROM學(xué)生WHERE學(xué)生號=‘200101’AND性別='女';SQL數(shù)據(jù)更新語句視圖更新的限制:目前各DBMS一般都只允許對行列子集視圖進行更新,并有以下限制:(1)若視圖是由兩個以上基本表導(dǎo)出的,則此視圖不允許更新。(2)若視圖的字段來自表達(dá)式或常數(shù),則不允許對此視圖執(zhí)行INSERT和UPDATE操作,但允許執(zhí)行DELETE操作。(3)若視圖的字段來自集函數(shù),則此視圖不允許更新。(4)若視圖定義中含有GROUPBY子句,則此視圖不允許更新。(5)若視圖定義中含有DISTINCT任選項,則此視圖不允許更新。(6)若視圖定義中有嵌套查詢,并且內(nèi)層查詢的FROM子句中的表是相同的,則此視圖不允許更新。(7)一個不允許更新的視圖所導(dǎo)出的視圖不允許更新。第四章關(guān)系數(shù)據(jù)庫實現(xiàn)及應(yīng)用4.1關(guān)系代數(shù)4.2關(guān)系演算4.3SQL語言概貌4.4SQL數(shù)據(jù)定義功能4.5SQL數(shù)據(jù)查詢語句4.6SQL查詢語句的加強4.7視圖4.8SQL數(shù)據(jù)更新語句4.9SQL數(shù)據(jù)控制功能

4.10嵌入式SQL4.11查詢優(yōu)化SQL數(shù)據(jù)控制功能SQL具有授權(quán)語句,實現(xiàn)對數(shù)據(jù)庫使用的控制。其語句格式為:GRANT權(quán)力[,權(quán)力]…[ON對象類型對象名]TO用戶[,用戶]…[WITHGRANTOPTION][IDENTIFIEDBY口令]SQL數(shù)據(jù)控制功能其中,所授的權(quán)力可分為兩類:1.進入數(shù)據(jù)庫系統(tǒng)權(quán)力2.使用他人數(shù)據(jù)的權(quán)力。1.進入數(shù)據(jù)庫系統(tǒng)權(quán)力,建立自己的數(shù)據(jù)權(quán)力。這些權(quán)力由系統(tǒng)管理員授予。包括:

CONNECT連接到數(shù)據(jù)庫的權(quán)力

CREATETAB建立數(shù)據(jù)庫的權(quán)力或在數(shù)據(jù)庫中建立表的權(quán)力。DBA,系統(tǒng)管理員的權(quán)力。SQL數(shù)據(jù)控制功能例4.49授予用戶USER1進入數(shù)據(jù)庫系統(tǒng)權(quán)力。GRANTCONNECTTOUSER1例4.50將數(shù)據(jù)庫學(xué)生系統(tǒng)中建立表的權(quán)力授予用戶USER1。GRANTCREATETABONDATABASE學(xué)生系統(tǒng)TOUSER1SQL數(shù)據(jù)控制功能2.使用他人數(shù)據(jù)的權(quán)力。一般由數(shù)據(jù)表的擁有者授予,這些權(quán)力包括:

SELECT 查詢權(quán)限

INSERT 插入新記錄權(quán)限

DELETE 刪除記錄權(quán)限

UPDATE(屬性名[,屬性名]…) 對有關(guān)列修改權(quán)限

ALTER 修改表結(jié)構(gòu)權(quán)限

INDEX 建立索引權(quán)限

ALL 以上所有權(quán)限SQL數(shù)據(jù)控制功能SQL數(shù)據(jù)控制功能例4.51設(shè)成績表由USER1所建,則USER1可發(fā)出命令將對成績表查詢、修改的權(quán)力授予USER2。GRANT

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論