《數(shù)據(jù)庫(kù)系統(tǒng)教程(第3版)》第3章 關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL_第1頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)教程(第3版)》第3章 關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL_第2頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)教程(第3版)》第3章 關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL_第3頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)教程(第3版)》第3章 關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL_第4頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)教程(第3版)》第3章 關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL

本章重要概念

(1)SQL數(shù)據(jù)庫(kù)的體系結(jié)構(gòu),SQL的組成。(2)SQL的數(shù)據(jù)定義:SQL模式、基本表和索引的創(chuàng)建和撤銷。(3)SQL的數(shù)據(jù)查詢;SELECT語(yǔ)句的句法,SELECT語(yǔ)句的三種形式及各種限定,基本表的聯(lián)接操作,SQL3中的遞歸查詢。(4)SQL的數(shù)據(jù)更新:插入、刪除和修改語(yǔ)句。(5)視圖的創(chuàng)建和撤銷,對(duì)視圖更新操作的限制。(6)嵌入式SQL:預(yù)處理方式,使用規(guī)定,使用技術(shù),卷游標(biāo),動(dòng)態(tài)SQL語(yǔ)句。

本章概述SQL是關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言,對(duì)關(guān)系模型的發(fā)展和商用DBMS的研制起著重要的作用。SQL語(yǔ)言是介乎于關(guān)系代數(shù)和元組演算之間的一種語(yǔ)言。本章詳細(xì)介紹SQL的核心部分內(nèi)容:數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)更新和嵌入式SQL。

關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL3.1SQL的體系結(jié)構(gòu)

3.2SQL的數(shù)據(jù)定義

3.3SQL的數(shù)據(jù)查詢3.4數(shù)據(jù)更新3.5視圖的定義和對(duì)視圖的操作3.6嵌入式SQL

3.1SQL的體系結(jié)構(gòu)

3.1.1SQL的產(chǎn)生與發(fā)展

3.1.2SQL數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)

3.1.3

SQL的組成

返回SQL的產(chǎn)生與發(fā)展

1970年,美國(guó)IBM研究中心的E.F.Codd連續(xù)發(fā)表多篇論文,提出關(guān)系模型。1972年,IBM公司開始研制實(shí)驗(yàn)型關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)SYSTEMR,配制的查詢語(yǔ)言稱為SQUARE(SpecifyingQueriesAsRelationalExpression)語(yǔ)言,在語(yǔ)言中使用了較多的數(shù)學(xué)符號(hào)。1974年,Boyce和Chamberlin把SQUARE修改為SEQUEL(StructuredEnglishQUEryLanguage)語(yǔ)言。后來(lái)SEQUEL簡(jiǎn)稱為SQL(StructuredQueryLanguage),即“結(jié)構(gòu)式查詢語(yǔ)言”,SQL的發(fā)音仍為“sequel”?,F(xiàn)在SQL已經(jīng)成為一個(gè)標(biāo)準(zhǔn)。SQL數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)

用戶1用戶2用戶3用戶4視圖1視圖1基本表1基本表2基本表3基本表4存儲(chǔ)文件1存儲(chǔ)文件2存儲(chǔ)文件3存儲(chǔ)文件4圖3.1SQL數(shù)據(jù)庫(kù)的體系結(jié)構(gòu)SQL用戶ViewBasetableStoredfileSQL的組成

核心SQL主要有四個(gè)部分: (1)數(shù)據(jù)定義語(yǔ)言,即SQLDDL,用于定義SQL模式、基本表、視圖、索引等結(jié)構(gòu)。 (2)數(shù)據(jù)操縱語(yǔ)言,即SQLDML。數(shù)據(jù)操縱分成數(shù)據(jù)查詢和數(shù)據(jù)更新兩類。其中數(shù)據(jù)更新又分成插入、刪除和修改三種操作。 (3)嵌入式SQL語(yǔ)言的使用規(guī)定。這一部分內(nèi)容涉及到SQL語(yǔ)句嵌入在宿主語(yǔ)言程序中的規(guī)則。 (4)數(shù)據(jù)控制語(yǔ)言,即SQLDCL,這一部分包括對(duì)基本表和視圖的授權(quán)、完整性規(guī)則的描述、事務(wù)控制等內(nèi)容。返回3.2SQL的數(shù)據(jù)定義

3.2.1SQL模式的創(chuàng)建和撤銷

3.2.2基本數(shù)據(jù)類型

3.2.3基本表的創(chuàng)建、修改和撤銷

3.2.4索引的創(chuàng)建和撤銷

返回SQL模式的創(chuàng)建和撤銷

SQL模式的創(chuàng)建可用CREATESCHEMA語(yǔ)句定義,其基本句法如下:

CREATESCHEMA〈模式名〉A(chǔ)UTHORIZATION〈用戶名〉DROP語(yǔ)句的句法如下:

DROPSCHEMA〈模式名〉[CASCADE│RESTRICT]其方式有兩種:

CASCADE(級(jí)聯(lián)式)方式。

RESTRICT(約束式)方式。

基本數(shù)據(jù)類型

SQL提供的主要數(shù)據(jù)類型(也稱為“域類型”)有:(1)數(shù)值型(2)字符串型(3)位串型(4)時(shí)間型返回基本表的創(chuàng)建、修改和撤銷(1)基本表的創(chuàng)建

例3.1

基本表SS(S#,SNAME,AGE,SEX)可用下列語(yǔ)句創(chuàng)建:

CREATETABLES (S# CHAR(4)NOTNULL, SNAMECHAR(8)NOTNULL, AGE CHAR(1), SEX CHAR(1), PRIMARYKEY(S#));

基本表的創(chuàng)建、修改和撤銷(2)基本表結(jié)構(gòu)的修改增加新的列用“ALTER…ADD…”語(yǔ)句,其句法如下:

ALTERTABLE<基本表名>

ADD<列名><類型>刪除原有的列用“ALTER…DROP…”語(yǔ)句,句法如下:

ALTERTABLE<基本表名>DROP<列名>[CASCADE│RESTRICT]

此處CASCADE方式表示:在基本表中刪除某列時(shí),所有引用到該列的視圖和約束也要一起自動(dòng)地被刪除。而RESTRICT方式表示在沒(méi)有視圖或約束引用該屬性時(shí),才能在基本表中刪除該列,否則拒絕刪除操作。

基本表的創(chuàng)建、修改和撤銷(3)例3.2在基本表S中增加一個(gè)地址(ADDRESS)列,可用下列語(yǔ)句:

ALTERTABLESADDADDRESSVARCHAR(30);

應(yīng)注意,新增加的列不能定義為“NOTNULL”。基本表在增加一列后,原有元組在新增加的列上的值都被定義為空值(NULL)。例3.3在基本表S中刪除年齡(AGE)列,并且把引用該列的所有視圖和約束也一起刪除,可用下列語(yǔ)句:

ALTERTABLESDROPAGECASCADE;例3.4在基本表S中S#的長(zhǎng)度修改為6,可用下列語(yǔ)句:

ALTERTABLESMODIFYS#CHAR(6);

基本表的創(chuàng)建、修改和撤銷(4)基本表的撤銷撤銷語(yǔ)句的句法如下:

DROPTABLE<基本表名>[CASCADE│RESTRICT]

此處的CASCADE、RESTRICT的語(yǔ)義同前面句法中的語(yǔ)義一樣。

返回索引的創(chuàng)建和撤銷

索引的創(chuàng)建 創(chuàng)建索引可用“CREATEINDEX”語(yǔ)句實(shí)現(xiàn)。句法如下:

CREATE[UNIQUE]INDEX<索引名>ON<基本表名>(列名表)索引的撤銷 當(dāng)索引不需要時(shí),可以用“DROPINDEX”語(yǔ)句撤銷,其句法如下:

DROPINDEX<索引名>返回3.3SQL的數(shù)據(jù)查詢

3.3.1

SELECT查詢語(yǔ)句

3.3.2

SELECT語(yǔ)句完整的句法

3.3.3

SELECT語(yǔ)句中的限定

3.3.4

基本表的聯(lián)接操作

3.3.5

SQL3中的遞歸查詢

返回

SELECT查詢語(yǔ)句(1)SELECT—FROM—WHERE句型 在關(guān)系代數(shù)中最常用的式子是下列表達(dá)式:

πA1,…,An(σF(R1×…×Rm))

這里R1、…、Rm為關(guān)系,F(xiàn)是公式,A1、…、An為屬性。 針對(duì)上述表達(dá)式,SQL為此設(shè)計(jì)了SELECT—FROM—WHERE句型:

SELECTA1,…,An FROMR1,…,Rm

WHEREF

這個(gè)句型是從關(guān)系代數(shù)表達(dá)式演變來(lái)的,但WHERE子句中的條件表達(dá)式F要比關(guān)系代數(shù)中公式更靈活。SELECT查詢語(yǔ)句(2)SELECT句型使用實(shí)例 例3.8教學(xué)數(shù)據(jù)中有三個(gè)基本表(關(guān)系):

S(S#,SNAME,AGE,SEX) SC(S#,C#,GRADE) C(C#,CNAME,TEACHER)

下面用SELECT查詢語(yǔ)句表達(dá)每個(gè)查詢。 ①檢索學(xué)習(xí)課程號(hào)為C2的學(xué)生學(xué)號(hào)與成績(jī)。

②檢索學(xué)習(xí)課程號(hào)為C2的學(xué)生學(xué)號(hào)與姓名。 ③檢索選修課程名為MATHS的學(xué)生學(xué)號(hào)與姓名。④檢索選修課程號(hào)為C2或C4的學(xué)生學(xué)號(hào)。⑤檢索至少選修課程號(hào)為C2和C4的學(xué)生學(xué)號(hào)。SELECT查詢語(yǔ)句(3)SELECT語(yǔ)句的圖示形式

例3.9對(duì)于例3.8中的第二個(gè)查詢語(yǔ)句的圖示形式如下所述。SELECT查詢語(yǔ)句(4)

聚合函數(shù)

COUNT(*)計(jì)算元組的個(gè)數(shù)COUNT(列名)對(duì)一列中的值計(jì)算個(gè)數(shù)SUM(列名)求某一列值的總和(此列的值必須是數(shù)值型)AVG(列名)求某一列值的平均值(此列的值必須是數(shù)值型)MAX(列名)求某一列值的最大值MIN(列名)求某一列值的最小值返回SELECT語(yǔ)句完整的句法

(1)SELECT語(yǔ)句完整的句法如下:

SELECT目標(biāo)表的列名或列表達(dá)式序列

FROM基本表名和(或)視圖序列[WHERE行條件表達(dá)式][GROUPBY列名序列[HAVING組條件表達(dá)式]][ORDERBY列名[ASC|DESC],…]SELECT語(yǔ)句完整的句法(2)整個(gè)語(yǔ)句的執(zhí)行過(guò)程如下:(1)讀取FROM子句中基本表、視圖的數(shù)據(jù),執(zhí)行笛卡爾積操作。(2)選取滿足WHERE子句中給出的條件表達(dá)式的元組。(3)按GROUP子句中指定列的值分組,同時(shí)提取滿足HAVING子句中組條件表達(dá)式的那些組。(4)按SELECT子句中給出的列名或列表達(dá)式求值輸出。(5)ORDER子句對(duì)輸出的目標(biāo)表進(jìn)行排序,按附加說(shuō)明ASC升序排列,或按DESC降序排列。SELECT語(yǔ)句完整的句法(3)例3.11對(duì)教學(xué)數(shù)據(jù)庫(kù)的基本表S、SC、C中數(shù)據(jù)進(jìn)行查詢和計(jì)算。①統(tǒng)計(jì)每一年齡選修課程的學(xué)生人數(shù)

SELECTAGE,COUNT(DISTINCTS.S#)FROMS,SCWHERES.S#=SC.S#GROUPBYAGE;

由于要統(tǒng)計(jì)每一個(gè)年齡的學(xué)生人數(shù),因此要把滿足WHERE子句中條件的查詢結(jié)果按年齡分組,在每一組中的學(xué)生年齡相同。此時(shí)的SELECT子句應(yīng)對(duì)每一組分開進(jìn)行操作,在每一組中,年齡只有一個(gè)值,統(tǒng)計(jì)的人數(shù)是這一組中的學(xué)生人數(shù)。SELECT語(yǔ)句完整的句法(4)②求基本表S中男同學(xué)的每一年齡組(超過(guò)50人)有多少人?要求查詢結(jié)果按人數(shù)升序排列,人數(shù)相同按年齡降序排列。

SELECTAGE,COUNT(S#) FROMS WHERESEX='M' GROUPBYAGE HAVINGCOUNT(*)>50 ORDERBY2,AGEDESC;返回SELECT語(yǔ)句中的限定(1)

SELECT子句中的規(guī)定

SELECT子句描述查詢輸出的表格結(jié)構(gòu),即輸出值的列名或表達(dá)式。其形式如下:

SELECT[ALL|DISTINCT]<列名或列表達(dá)式序列>|*條件表達(dá)式中的算術(shù)比較操作條件表達(dá)式中可出現(xiàn)算術(shù)比較運(yùn)算符(<,<=,>,>=,=,!=),也可以用“BETWEEN…AND…”比較運(yùn)算符限定一個(gè)值的范圍。列和基本表的改名操作SELECT語(yǔ)句中的限定(2)字符串的匹配操作 條件表達(dá)式中字符串匹配操作符是“LIKE”。在表達(dá)式中可使用兩個(gè)通配符: 百分號(hào)(%):與零個(gè)或多個(gè)字符組成的字符串匹配。 下劃線(_):與單個(gè)字符匹配。集合的并、交、差操作當(dāng)兩個(gè)子查詢結(jié)果的結(jié)構(gòu)完全一致時(shí),可以讓這兩個(gè)子查詢執(zhí)行并、交、差操作。并、交、差的運(yùn)算符為UNION、INTERSECT和EXCEPT。空值的比較操作

SQL中允許列值為空,空值用保留字NULL表示。

SELECT語(yǔ)句中的限定(3)集合的比較操作

SQL提供SELECT語(yǔ)句的嵌套子查詢機(jī)制。子查詢是嵌套在另一個(gè)查詢中的SELECT語(yǔ)句。(1)集合成員資格的比較(2)集合成員的算術(shù)比較(3)空關(guān)系的測(cè)試(4)重復(fù)元組的測(cè)試導(dǎo)出表的使用

SQL2允許在FROM子句中使用子查詢。如果在FROM子句中使用了子查詢,那么要給子查詢的結(jié)果起個(gè)表名和相應(yīng)的列名。

返回基本表的聯(lián)接操作

基本表的聯(lián)接操作(例)SQL3中的遞歸查詢

例3.23

C1(BASIC)C3(COBOL)C2(FORTRAN)C5(C)C4(PASCAL)C9(PL/I)C8(VC++)C6(Ada)C7(C++)圖3.13課程之間的先修與后繼的聯(lián)系(箭尾指向的課程是箭頭指向課程的直接先修課)返回3.4數(shù)據(jù)更新

3.4.1數(shù)據(jù)插入

3.4.2

數(shù)據(jù)刪除

3.4.3數(shù)據(jù)修改

返回?cái)?shù)據(jù)插入

(1)單元組的插入

INSERTINTO

基本表名[(列名表)]VALUES(元組值)(2)多元組的插入

INSERTINTO

基本表名[(列名表)]

VALUES(元組值),(元組值),……,(元組值)(3)查詢結(jié)果的插入

INSERTINTO

基本表名[(列名表)]<SELECT查詢語(yǔ)句>這個(gè)語(yǔ)句可把一個(gè)SELECT語(yǔ)句的查詢結(jié)果插到某個(gè)基本表中。(4)表的插入

INSERTINTO

基本表名1[(列名表)]TABLE基本表名2這個(gè)語(yǔ)句可把基本表2的值插入到基本表1中。數(shù)據(jù)刪除

SQL的刪除操作是指從基本表中刪除元組,其句法如下:

DELETEFROM基本表名

[WHERE條件表達(dá)式] 其語(yǔ)義是從基本表中刪除滿足條件表達(dá)式的元組。刪除語(yǔ)句實(shí)際上是“SELECT*FROM基本表名[WHERE條件表達(dá)式]”和DELETE操作的結(jié)合,每找到一個(gè)元組,就把它刪去。應(yīng)該注意,DELETE語(yǔ)句只能從一個(gè)基本表中刪除元組。WHERE子句中條件可以嵌套,也可以是來(lái)自幾個(gè)基本表的復(fù)合條件。數(shù)據(jù)修改

當(dāng)需要修改基本表中元組的某些列值時(shí),可以用UPDATE語(yǔ)句實(shí)現(xiàn),其句法如下:

UPDATE基本表名

SET列名=值表達(dá)式[,列名=值表達(dá)式…]│ROW=(元組)

[WHERE條件表達(dá)式]其語(yǔ)義是:修改基本表中滿足條件表達(dá)式的那些元組中的列值,需修改的列值在SET子句中指出。返回3.5視圖的定義和對(duì)視圖的操作

3.5.1視圖的創(chuàng)建和撤銷

3.5.2

對(duì)視圖的更新操作

3.5.3視圖的優(yōu)點(diǎn)

返回視圖的創(chuàng)建和撤銷(1)視圖的創(chuàng)建創(chuàng)建視圖可用“CREATEVIEW”語(yǔ)句實(shí)現(xiàn)。其句法如下:

CREATEVIEW<視圖名>(列表名)

AS<SELECT查詢語(yǔ)句>例3.27對(duì)于教學(xué)數(shù)據(jù)庫(kù)中基本表S、SC、C,用戶經(jīng)常要用到S#、SNAME、CNAME和GRADE等列的數(shù)據(jù),那么可用下列語(yǔ)句建立視圖:

CREATEVIEWSTUDENT_GRADE(S#,SNAME,CNAME,GRADE)

ASSELECTS.S#,SNAME,CNAME,GRADE

FROMS,SC,C

WHERES.S#=SC.S#ANDSC.C#=C.C#;視圖的創(chuàng)建和撤銷(2)視圖的撤銷在視圖不需要時(shí),可以用“DROPVIEW”語(yǔ)句把其從系統(tǒng)中撤銷。其句法如下:

DROPVIEW視圖名例3.28撤銷STUDENT_GRADE視圖,可用下列語(yǔ)句實(shí)現(xiàn):

DROPVIEWSTUDENT_GRADE;

對(duì)視圖的更新操作(1)定義3.1如果視圖是從單個(gè)基本表只使用選擇、投影操作導(dǎo)出的,并且包含了基本表的主鍵,那么這樣的視圖稱為“行列子集視圖”,并且可以被執(zhí)行更新操作。對(duì)視圖的更新操作(2)例3.29下面討論對(duì)視圖更新的幾個(gè)例子。①設(shè)有一個(gè)視圖定義

CREATEVIEWSUDENT_GRADE ASSELECTS.S#,SNAME,CNAME,GRADE FROMS,SC,C WHERES.S#=SC.S#ANDSC.C#=C.C#;

這個(gè)視圖定義了學(xué)生選修的課程名和成績(jī),是由三個(gè)基本表聯(lián)接而成的。 如果用戶要在視圖中執(zhí)行插入操作:

INSERTINTOSTUDENT_GRADE VALUES('S24','WANG','MATHS',80);

若在基本表C中,課程名為MATHS的課程號(hào)有多個(gè),則往基本表SC插入元組時(shí),課程號(hào)C#就不定了。因此,對(duì)這個(gè)視圖的更新是不允許的。

對(duì)視圖的更新操作(3)②設(shè)有一個(gè)視圖定義,包含每個(gè)學(xué)生選修課程(成績(jī)?yōu)榉强眨┑拈T數(shù)和平均成績(jī):

CREATEVIEWS_GRADE(S#,C_NUM,AVG_GRADE) ASSELECTS#,COUNT(C#),AVG(GRADE) FROMSC WHEREGRADEISNOTNULL

視圖S_GRADE雖然是從單個(gè)基本表導(dǎo)出,但導(dǎo)出時(shí)使用了分組和聚集操作,因此也是不能更新的。譬如,在未更改基本表SC中值時(shí),要在視圖S_GRADE中更改學(xué)生的平均成績(jī),顯然是不切實(shí)際的。對(duì)視圖的更新操作(4) ③如果定義了一個(gè)有關(guān)男學(xué)生的視圖:

CREATEVIEWS_MALE ASSELECTS#,SNAME,AGE FROMS WHERESEX='M';

這個(gè)視圖是從單個(gè)關(guān)系只使用選擇和投影導(dǎo)出的,并且包含鍵S#,因此是可更新的。例如,執(zhí)行插入操作:

INSERTINTOS_MALE

VALUES('S28','WU',18);

系統(tǒng)自動(dòng)會(huì)把它轉(zhuǎn)變成下列語(yǔ)句:

INSERTINTOS VALUES('S28','WU',18,'M');

返回視圖的優(yōu)點(diǎn)

視圖是用戶一級(jí)的數(shù)據(jù)觀點(diǎn),由于有了視圖,使數(shù)據(jù)庫(kù)系統(tǒng)具有下列優(yōu)點(diǎn):(1)視圖提供了邏輯數(shù)據(jù)獨(dú)立性。

(2)簡(jiǎn)化了用戶觀點(diǎn)。數(shù)據(jù)庫(kù)的全部結(jié)構(gòu)是復(fù)雜的,并有多種聯(lián)系。

(3)數(shù)據(jù)的安全保護(hù)功能。

返回3.6嵌入式SQL

SQL語(yǔ)言有兩種使用方式:一種是在終端交互方式下使用,稱為交互式SQL;另一種是嵌入在高級(jí)語(yǔ)言的程序中使用,稱為嵌入式SQL,而這些高級(jí)語(yǔ)言可以是C、ADA、PASCAL、COBOL或PL/I等,稱為宿主語(yǔ)言。

3.6.1SQL的運(yùn)行環(huán)境

3.6.2嵌入式SQL的使用規(guī)定

3.6.3

嵌入式SQL的使用技術(shù)

3.6.4

動(dòng)態(tài)SQL語(yǔ)句

SQL的運(yùn)行環(huán)境

宿主語(yǔ)言十嵌入式SQL

預(yù)處理程序

宿主語(yǔ)言十函數(shù)調(diào)用

SQL函數(shù)定義庫(kù)宿主語(yǔ)言編譯程序

目標(biāo)程序

圖3.14源程序處理過(guò)程嵌入式SQL的使用規(guī)定

在程序中要區(qū)分SQL語(yǔ)句與宿主語(yǔ)言語(yǔ)句允許嵌入的SQL語(yǔ)句引用宿主語(yǔ)言的程序變量(稱為共享變量),但有兩條規(guī)定: (1)引用時(shí),這些變量前必須加冒號(hào)“:”作為前綴標(biāo)識(shí),以示與數(shù)據(jù)庫(kù)中變量有區(qū)別。(2)這些變量由宿主語(yǔ)言的程序定義,并用SQL的DECLARE語(yǔ)句說(shuō)明。SQL的集合處理方式與宿主語(yǔ)言單記錄處理方式之間的協(xié)調(diào)。

(1)游標(biāo)定義語(yǔ)句(DECLARE)。

(2)游標(biāo)打開語(yǔ)句(OPEN)。

(3)游標(biāo)推進(jìn)語(yǔ)句(FETCH)。

(4)游標(biāo)關(guān)閉語(yǔ)句(CLOSE)。

嵌入式SQL的使用技術(shù)不涉及游標(biāo)的SQLDML語(yǔ)句涉及游標(biāo)的SQLDML語(yǔ)句卷游標(biāo)的定義和推進(jìn)涉及游標(biāo)的SQLDML語(yǔ)句

(1)SELECT語(yǔ)句的使用方式

當(dāng)SELECT語(yǔ)句查詢結(jié)果是多個(gè)元組時(shí),此時(shí)宿主語(yǔ)言程序無(wú)法使用,一定要用游標(biāo)機(jī)制把多個(gè)元組一次一個(gè)地傳送給宿主語(yǔ)言程序處理。(2)對(duì)游標(biāo)指向元組的修改或刪除操作 在游標(biāo)處于活動(dòng)狀況時(shí),可以修改或刪除游標(biāo)指向的元組。

動(dòng)態(tài)SQL語(yǔ)句(1)動(dòng)態(tài)SQL預(yù)備語(yǔ)句

EXECSQLPREPARE〈動(dòng)態(tài)SQL語(yǔ)句名〉FROM〈共享變量或字符串〉這里共享變量或字符串的值應(yīng)是一個(gè)完整的SQL語(yǔ)句。這個(gè)語(yǔ)句可以在程序運(yùn)行時(shí)由用戶輸入才組合起來(lái)。此時(shí),這個(gè)語(yǔ)句并不執(zhí)行。動(dòng)態(tài)SQL語(yǔ)句(2)動(dòng)態(tài)SQL執(zhí)行語(yǔ)句

EXECSQLEXECUTE〈動(dòng)態(tài)SQL語(yǔ)句名〉 動(dòng)態(tài)SQL語(yǔ)句使用時(shí),還可以有兩點(diǎn)改進(jìn):(1)當(dāng)預(yù)備語(yǔ)句中組合而成的SQL語(yǔ)句只需執(zhí)行一次時(shí),那么預(yù)備語(yǔ)句和執(zhí)行語(yǔ)句可合并成一個(gè)語(yǔ)句:

EXECSQLEXECUTEIMMEDIATE〈共享變量或字符串〉(2)當(dāng)預(yù)備語(yǔ)句中組合而成的SQL語(yǔ)句的條件值尚缺時(shí),可以在執(zhí)行語(yǔ)句中用USING短語(yǔ)補(bǔ)上:

EXECSQLEXECUTE<動(dòng)態(tài)SQL語(yǔ)句名>USING<共享變量>動(dòng)態(tài)SQL語(yǔ)句(3)例3.33下面兩個(gè)C語(yǔ)言的程序段說(shuō)明了動(dòng)態(tài)SQL語(yǔ)句的使用技術(shù)。①EXECSQLBEGINDECLARESECTION;char*query; EXECSQLENDDECLARESECTION; scanf(〞%s〞,query); /*從鍵盤輸入一個(gè)SQL語(yǔ)句*/

EXECSQLPREPAREqueFROM:query; EXECSQLEXECUTEque;

這個(gè)程序段表示從鍵盤輸入一個(gè)SQL語(yǔ)句到字符數(shù)組中;字符指針query指向字符串的第1個(gè)字符。如果執(zhí)行語(yǔ)句只做一次,那么程序段最后兩個(gè)語(yǔ)句可合并成一個(gè)語(yǔ)句:

EXECSQLEXECUTEIMMEDIATE:query;動(dòng)態(tài)SQL語(yǔ)句(4)②char*query=〞UPDATEsc SETgrade=grade*1.1 WHEREc#=?〞;

EXECSQLPREPAREdynprogFROM:query;

charcno[5]=〞C4〞;

EXECSQLEXECUTEdynprogUSING:cno;

這里第一個(gè)char語(yǔ)句表示用戶組合成一個(gè)SQL語(yǔ)句,但有一個(gè)值(課程號(hào))還不能確定,因此用“?”表示。第二個(gè)語(yǔ)句是動(dòng)態(tài)SQL預(yù)備語(yǔ)句。第三個(gè)語(yǔ)句(char語(yǔ)句)表示取到了課程號(hào)值。第四個(gè)語(yǔ)句是動(dòng)態(tài)SQL執(zhí)行語(yǔ)句,“?”值到共享變量cno中取。

小結(jié)

SQL是關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言,已廣泛應(yīng)用在商用系統(tǒng)中。SQL的數(shù)據(jù)定義部分包括對(duì)SQL模式、基本表、視圖、索引的創(chuàng)建和撤銷。SQL的數(shù)據(jù)操縱分成數(shù)據(jù)查詢和數(shù)據(jù)更新兩部分。SQL的數(shù)據(jù)查詢是用SELECT語(yǔ)句實(shí)現(xiàn),兼有關(guān)系代數(shù)和元組演算的特點(diǎn)。SQL的數(shù)據(jù)更新包括插入、刪除和修改等三種操作,在視圖中只有行列子集視圖是可以更新的。嵌入式SQL涉及到SQL語(yǔ)句的宿主語(yǔ)言程序中的使用規(guī)定,以解決兩種語(yǔ)言的不一致和相互聯(lián)系的問(wèn)題。同時(shí)還介紹了動(dòng)態(tài)SQL語(yǔ)句。

本章的重點(diǎn)篇幅

(1)教材中P97的例3.8(SELECT語(yǔ)句)。(2)教材

溫馨提示

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

評(píng)論

0/150

提交評(píng)論