版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版廢品回收貨物運(yùn)輸合同匯編與環(huán)保措施
- 2024年規(guī)范委托合作合同精簡(jiǎn)版版B版
- 信息安全保護(hù)協(xié)議
- 關(guān)于中標(biāo)合同范本(2篇)
- 機(jī)場(chǎng)設(shè)備租賃合同
- 公共設(shè)施工程承包協(xié)議書
- 運(yùn)動(dòng)設(shè)施租用合同-全面保障
- 2024年綠色施工項(xiàng)目施工單位勞動(dòng)合同參考文本3篇
- 轉(zhuǎn)租合同范文
- 2024年設(shè)備租賃合同詳細(xì)條款與標(biāo)的說(shuō)明
- (八省聯(lián)考)2025年高考綜合改革適應(yīng)性演練 語(yǔ)文試卷(含答案解析)
- GB/T 45002-2024水泥膠砂保水率測(cè)定方法
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之1:0 引言(雷澤佳編制-2025B0)
- 2024版環(huán)衛(wèi)清潔班車租賃服務(wù)協(xié)議3篇
- 生產(chǎn)安全事故事件管理知識(shí)培訓(xùn)課件
- 藥劑科工作人員的專業(yè)提升計(jì)劃
- 2024-2025學(xué)年度第一學(xué)期二年級(jí)語(yǔ)文寒假作業(yè)第二十一天
- 貸款用設(shè)備購(gòu)銷合同范例
- 公務(wù)員行測(cè)真題題庫(kù)及答案
- 2025支部會(huì)議記錄范文
- 部隊(duì)保密安全課件
評(píng)論
0/150
提交評(píng)論