欧美精品一二区,性欧美一级,国产免费一区成人漫画,草久久久久,欧美性猛交ⅹxxx乱大交免费,欧美精品另类,香蕉视频免费播放

《數(shù)據(jù)庫語言SQL》PPT課件.ppt

上傳人:w****2 文檔編號:15613717 上傳時間:2020-08-24 格式:PPT 頁數(shù):95 大小:393.84KB
收藏 版權(quán)申訴 舉報 下載
《數(shù)據(jù)庫語言SQL》PPT課件.ppt_第1頁
第1頁 / 共95頁
《數(shù)據(jù)庫語言SQL》PPT課件.ppt_第2頁
第2頁 / 共95頁
《數(shù)據(jù)庫語言SQL》PPT課件.ppt_第3頁
第3頁 / 共95頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《數(shù)據(jù)庫語言SQL》PPT課件.ppt》由會員分享,可在線閱讀,更多相關(guān)《《數(shù)據(jù)庫語言SQL》PPT課件.ppt(95頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、4 數(shù)據(jù)庫語言SQL,本章目標,本章主要介紹SQL語言的基本語法和使用方式,要求熟練掌握SQL語言的使用規(guī)則,能夠根據(jù)實際需求寫出能夠準確完成操作的SQL語句。,4.1 概述,SQL的發(fā)展 1974年,由Boyce和Chamberlin提出 19751979,IBM San Jose Research Lab的關(guān)系數(shù)據(jù)庫管理系統(tǒng)原型System R實施了這種語言 SQL-86是第一個SQL標準 SQL-89、SQL-92(SQL2)、SQL-99(SQL3) 現(xiàn)狀 大部分DBMS產(chǎn)品都支持SQL,成為操作數(shù)據(jù)庫的標準語言 有方言,支持程度不同,數(shù)據(jù)定義(DDL) 定義、刪除、修改關(guān)系模式(基本

2、表) 定義、刪除視圖(View) 定義、刪除索引(Index) 數(shù)據(jù)操縱(DML) 數(shù)據(jù)查詢 數(shù)據(jù)增、刪、改 數(shù)據(jù)控制(DCL) 用戶訪問權(quán)限的授予、收回,4.1.1 SQL的功能,交互式SQL 一般DBMS都提供聯(lián)機交互工具 用戶可直接鍵入SQL命令對數(shù)據(jù)庫進行操作 由DBMS來進行解釋 嵌入式SQL 能將SQL語句嵌入到高級語言(宿主語言) 使應(yīng)用程序充分利用SQL訪問數(shù)據(jù)庫的能力、宿主語言的過程處理能力 一般需要預編譯,將嵌入的SQL語句轉(zhuǎn)化為宿主語言編譯器能處理的語句,4.1.2 SQL的形式,數(shù)據(jù)定義 Create、Drop、Alter 數(shù)據(jù)操縱 數(shù)據(jù)查詢:Select 數(shù)據(jù)修改:I

3、nsert、Update、Delete 數(shù)據(jù)控制 Grant、Revoke,4.1.3 SQL的動詞,數(shù)據(jù)查詢是數(shù)據(jù)庫應(yīng)用的核心功能。 基本結(jié)構(gòu): Select A1, A2, ..., An From r1, r2, ..., rm Where P,4.2 數(shù)據(jù)查詢,A1, A2, ..., An(p(r1r1...rm)),4.2.1 Select語句的含義,對 From 子句中的各關(guān)系,作笛卡兒積() 對 Where 子句中的邏輯表達式進行選擇()運算,找出符合條件的元組。 根據(jù) Select 子句中的屬性列表,對上述結(jié)果作投影( )操作。 查詢操作的對象是關(guān)系,結(jié)果還是一個關(guān)系,是一個

4、結(jié)果集,是一個動態(tài)數(shù)據(jù)集。,4.2.2 Select子句 對應(yīng)于關(guān)系代數(shù)的投影()運算,用以列出查詢結(jié)果集中的期望屬性。,重復元組 SQL 具有包的特性 Select子句的缺省情況是保留重復元組(ALL),可用 Distinct去除重復元組 Select Distinct sdept From Student Select All sdept From Student 去除重復元組:費時 需要臨時表的支持,*與屬性列表 星號 * 表示所有屬性 星號 * :按關(guān)系模式中屬性的順序排列,并具有一定的邏輯數(shù)據(jù)獨立性 顯式列出屬性名:按用戶順序排列 Select * From Student Sel

5、ect Student.*,cno,grade From Student,SC Where Student.sno = SC.sno,更名 為結(jié)果集中的某個屬性改名 使結(jié)果集更具可讀性 Select sno as stu_no,cno as course_no, grade From SC Select sno,sname,2001 - sage as birthday From Student,4.2.3 where子句,where子句對應(yīng)與關(guān)系代數(shù)中的選擇()。 查詢滿足指定條件的元組可以通過Where子句來實現(xiàn)。 使where子句中的邏輯表達式返回True值的

6、元組,是符合要求的元組,將被選擇出來。,運算符 比較:、=、=、、not + 確定范圍: Between A and B、Not Between A and B 確定集合:IN、NOT IN 字符匹配:LIKE,NOT LIKE 空值:IS NULL、IS NOT NULL 多重條件:AND、OR、NOT,like 字符匹配:Like、Not Like 通配符: % 匹配任意字符串 _ 匹配任意一個字符 大小寫敏感,列出姓張的學生的學號、姓名。 Select sno,sname From Student Where sname LIKE 張% 列出張姓且單名的學生的學號、姓名。

7、Select sno,sname From Student Where sname LIKE 張_ _,轉(zhuǎn)義符 escape 例:列出課程名稱中帶有_的課號及課名。 Select cno,cname From Course Where cname LIKE %_% escape ,4.2.4 from子句,From子句對應(yīng)與關(guān)系代數(shù)中的笛卡兒積() 列出將被掃描的關(guān)系(表) 例:列出所有學生的學號、姓名、課號、成績。 Select Sudent.sno,sname,SC.cno,grade From Student,SC Where Student.sno = SC.sno,元組變

8、量 為 From 子句中的關(guān)系定義元組變量 方便關(guān)系名的引用 在同一關(guān)系的笛卡兒積中進行辨別 例:列出與95001同歲的同學的學號,姓名,年齡。 SelectT.sno,T.sname,T.sage FromStudent as T,Student as S WhereS.sno = 95001 AND T.sage = S.sage,4.2.5 Order By子句,指定結(jié)果集中元組的排列次序 耗時 ASC(缺?。ESC、未選中的屬性 例:列出CS系中的男生的學號、姓名、年齡,并按年齡進行排列(升序)。 Select sno,sname, sage From Student

9、 Where sdept = CS Order By sage ASC,4.3 數(shù)據(jù)定義語言,數(shù)據(jù)定義語言(Data Definition Language) Create、Drop、Alter 定義一組關(guān)系(基本表)、說明各關(guān)系的信息 各關(guān)系的模式 各屬性的值域 完整性約束 索引 安全性和權(quán)限,4.3.1 SQL中的域類型,字符型 char(n) 、varchar(n) 數(shù)值型 integer、smallint numeric(p,d) real、double、float(n) 日期/時間型 date time,4.3.2 SQL中的域定義,域定義語句(SQL-92支持) 需重

10、復使用的 Create Domain stu_name varchar(20) Create Domain zip_code char(6) 域的刪除 Drop Domain datelog 各DBMS的方法是不同的Restrict/Cascade 使用該域的屬性的處理,4.3.3 SQL中的模式定義,Create Table r (A1D1, A2D2,, AnDn, , ) 其中: r 關(guān)系名(表名)、 Ai 關(guān)系 r 的一個屬性名 Dn 屬性Ai域值的域類型 主鍵聲明: primary key (Aj1 ,Aj2 ,,Ajvm ),Create Do

11、main stu_name varchar(20) Create Table Student ( sno char(10) primary key(sno) , sname stu_name , sage smallint, ssex char(1), sdept char(2)),Create Table Course ( cno char(10) primary key (cno) , cname varchar(20) , credit smallint ) Create Table SC ( sno char(10) not null , cno char(10) not null ,

12、 grade smallint, primary key (sno, cno)),4.3.4 刪除表結(jié)構(gòu),用SQL刪除關(guān)系(表) 將整個關(guān)系模式(表結(jié)構(gòu))徹底刪除 表中的數(shù)據(jù)也將被刪除 Drop Table r Drop Table student,4.3.5 修改表結(jié)構(gòu),刪除表中的某屬性 去除屬性及相應(yīng)的數(shù)據(jù) Alter Table r Drop A 增加表中的屬性 向已經(jīng)存在的表中添加屬性 allow null 已有的元組中該屬性的值被置為Null Alter Table r Add A D Alter Table student phone char(16),4.3.6 Default

13、Value,屬性的默認值 用戶不提供某屬性的值時,默認值被使用 初始值 DDL中: ModifyDate char(30) Default TimeStamp Alter Table student Add ID integer Default 1001,4.3.7 索引Index,索引是一種數(shù)據(jù)結(jié)構(gòu),是對照表、指針表 索引是為了加速對表中元組的檢索而創(chuàng)建的一種分散存儲結(jié)構(gòu)(B樹) 索引是對表而建立的,由除存放表的數(shù)據(jù)頁面以外的索引頁面組成 索引是把雙刃劍,減慢更新的速度 索引不是SQL標準的要求 索引的種類 聚簇索引(Clustered Index) 非聚簇索引(Non-Clustered

14、Index),聚簇索引(Clustered Index) 表中的元組按聚簇索引的順序物理地存放 根級頁面---中間層頁面---葉級頁面(數(shù)據(jù)頁面) 一個表中只能有一個聚簇索引 更新的復雜性,需要大量的臨時空間 非聚簇索引(Non-Clustered Index) 表中的元組按聚簇索引的順序物理地存放 根級頁面---中間層頁面---葉級頁面(數(shù)據(jù)頁面) 一個表中只能有一個聚簇索引 更新的復雜性,需要大量的臨時空間,CREATE UNIQUE CLUSTERED | NONCLUSTERED INDEX index-name On TableName(Column,Column,) Create

15、 Index YearIndex On Movie(year) Create Clustered Index SnoIndex On student(sno) Drop Index YearIndex,4.4 數(shù)據(jù)添加,用SQL的插入語句,向數(shù)據(jù)庫表中添加數(shù)據(jù) 按關(guān)系模式的屬性順序 Insert Into Student Values ( 0095001, 張三,27, M, CS ) 按指定的屬性順序,也可以只添加部分屬性(非Null屬性為必需) Insert Into Student ( sno, sname, sage) Values ( 0095002, 李四, 26 ),

16、4.5 聚合函數(shù),把一列中的值進行聚合運算,返回單值的函數(shù)。 五個預定義的聚合函數(shù): 平均值:Avg 總和: Sum 最小值:Min 最大值:Max 計數(shù):Count Count(*)、Count(Distinct),4.5.1 Group By,將查詢結(jié)果集按某一列或多列的值分組,值相等的為一組,一個分組以一個元組的形式出現(xiàn)。 只有出現(xiàn)在Group By子句中的屬性,才可出現(xiàn)在Select子句中。 例:統(tǒng)計各系學生的人數(shù)。 Select sdept,count(*) as stu_count From Student Group By sdept,4.5.2 Having,針對聚

17、合函數(shù)的結(jié)果值進行篩選(選擇),它作用于分組計算結(jié)果集。 跟在Group By子句的后面,沒有Group By則針對全表。 例:列出具有兩門(含)以上不及格的學生的學號、不及格的課目數(shù)。 Select sno,count(sno) From SC Where grade = 2,4.5.3 Having與Where的區(qū)別,Where 決定哪些元組被選擇參加運算,作用于關(guān)系中的元組。 Having 決定哪些分組符合要求,作用于分組。 聚合函數(shù)的條件關(guān)系必須用Having,Where中不應(yīng)出現(xiàn)聚合函數(shù)。,4.5.4 聚合函數(shù)忽略Null,Count:不計 Sum:不將其計入 Avg:具有

18、 Null 的元組不參與 Max / Min:不參與 例:Select count(sdept) From Student Select Avg(sage) From Student,4.6 子查詢,子查詢是嵌套在另一查詢中的 Select-From-Where 表達式(Where/Having)。 SQL允許多層嵌套,由內(nèi)而外地進行分析,子查詢的結(jié)果作為父查詢的查找條件。 可以用多個簡單查詢來構(gòu)成復雜查詢,以增強SQL的查詢能力。 子查詢中不使用 Order By 子句,Order By子句只能對最終查詢結(jié)果進行排序。,4.6.1 單值比較,返回單值的子查詢,只返回一行一列 父查詢與單值

19、子查詢之間用比較運算符進行連接 運算符:、=、=、 例:找出與95001同齡的學生 Select * From Student Where sage = ( Select sage From Student Where sno = 95001 ),4.6.2 多值,子查詢返回多行一列 運算符:In、All、Some(Any)、Exists,in 標量值與子查詢返回集中的某一個相等,true in 被用來測試多值中的成員。 例:查詢選修C01課程的學生的學號、姓名。 Select sno,sname From Student Where sno IN (Select sno

20、From SC Where cno = C01 ),例:查詢選修了 數(shù)據(jù)庫的學生的學號和姓名 Select sno,sname From Student Where sno IN ( Select sno From SC Where cno IN ( Select cno From Course Where cname = 數(shù)據(jù)庫)),all 多值比較:多行一列 父查詢與多值子查詢之間的比較需用All來連接 標量值s比子查詢返回集R中的每個都大時,sAll R 為 True All 表示所有 all、=all、 all all 等價于 not in 例:找出年齡最小的學生

21、 Select * From Student Where sage < all ( Select sage From Student ),some、any 多值比較:多行一列 父查詢與多值子查詢之間的比較需用Some/Any來連接 標量值s比子查詢返回集R中的某一個都大時,s Some R為True 或 s Any R為True Some(早期用Any)表示某一個,只要有一個即返回真 some、=some、 some = some 等價于 in、 some 不等價于 not in,例:找出不是最小年齡的學生 Select * From student Where sage som

22、e ( Select sage From Student ) 例:找出具有最高平均成績的學號及平均成績 Select sno ,avg(grade) From SC Group By sno Having avg(grade) = all ( Select avg(grade) From SC Group By sno ),exists Exists + 子查詢用來判斷該子查詢是否返回元組 當子查詢的結(jié)果集非空時,Exists為True 當子查詢的結(jié)果集為空時,Exists為False 不關(guān)心子查詢的具體內(nèi)容,因此用 Select *,例:列出選修了C01課程的學生的學

23、號、姓名 Select sno,sname From Student Where Exists ( Select * From SC Where SC.sno = Student.sno And cno = C01),例:列出得過100分的學生的學號、姓名 Select sno,sname From Student Where Exists ( Select * From SC Where SC.sno = Student.sno And grade = 100 ),例:查詢選修了C01課程的學生的系主任 Select manager From depa

24、rtment Where Exists ( Select * From student Where sdept = department.depid And Exists ( Select * From SC Where SC.sno = student.sno And cno = C01)),例:列出沒有選C01課程的學生的學號、姓名 Select sno,sname From Student Where Not Exists ( Select * From SC Where SC.sno = Student.sno And cno = C01),例:查詢選修

25、了所有課程的學生的姓名( ForAll ) Select sname From Student Where Not Exists ( Select * From Course Where Not Exists ( Select * From SC Where Student.sno = SC.sno And SC.cno = Co)),SQL-92支持多列的成員資格測試(ASA7.0不支持) 例:找出同系、同年齡、同性別的學生 Select * from Student as T Where(T.sdept,T.sage,T.ssex) IN ( Select

26、 sdept,sage,ssex From student as S Where S.sno T.sno ),4.6.3 多列元組的比較,4.6.4 派生關(guān)系,SQL-92允許在 From中使用查詢表達式 必須為其取名 例:查詢平均成績大于75分的學號、姓名、平均成績 Select stu_no,sname,avg_grade From Student, (Select sno,avg(grade) From SC Group By sno ) as S (stu_no,avg_grade) Where Student.sno = S.stu_no And avg_grad

27、e 75,4.7 空值與連接,4.7.1 NULL 表示數(shù)據(jù)的缺失 一個確實存在,但我們不知道的值 對本實體此數(shù)值無意義,可能是設(shè)計上的失誤 是SQL的關(guān)鍵字,用于任何類型描述缺失的值,4.7.3 NULL的運算法則,對NULL值和其他任何值作算術(shù)運算時,結(jié)果為NULL 對NULL值和其他任何值作比較時,結(jié)果為UNKOWN Is Null / Is Not Null,4.7.4 Unkown的運算規(guī)則,視True為1,F(xiàn)alse為0,Unkown為1/2 AND:取小 OR:取大 NOT:取1的補 真值表不必死記硬背,4.8 數(shù)據(jù)庫的修改,數(shù)據(jù)庫修改包括插入數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù)。,4.8.

28、1 數(shù)據(jù)刪除,只能對整個元組操作,不能只刪除某些屬性上的值。 只能對一個關(guān)系起作用,若要從多個關(guān)系中刪除元組,則必須對每個關(guān)系分別執(zhí)行刪除命令。 Delete From r Where P 從關(guān)系 r 中刪除滿足P的元組,只是刪除數(shù)據(jù),而不是定義。,刪除單個元組 例:刪除學號為95001的學生的選課信息 Delete From SC Where sno = 95001 刪除多個元組 例:刪除選課而未參加考試的學生的選課信息 Delete From SC Where grade is null 刪除整個關(guān)系中的所有數(shù)據(jù) 例:刪除所有學生的選課信息 Delete From SC,4.8.2

29、 數(shù)據(jù)插入,單行插入:一次只插入一個元組 例:新增一個學生信息 Insert Into Student Values ( 98001, Gloria,25, F, CS),多行插入:插入一個集合 例:給CS系的學生開設(shè)必修課C05,建立選課信息 Insert Into SC Select sno,cno,null From Student,Course Where sdept = CS and cno = C05,4.8.3 數(shù)據(jù)更新,改變符合條件的某個(某些)元組的屬性值 例:將95001學生轉(zhuǎn)入MA系 Update Student Set sd

30、ept = MA Where sno = 95001 例:所有學生年齡加1 Update Student Set sage = sage + 1,例:將選修C05課程的學生的成績改為該課的平均成績 Update SC Set grade = ( Select avg(grade ) From SC Where cno = C05) Where cno = C05,4.9 視圖,是從一個或幾個基本表(或視圖)中導出的虛表 數(shù)據(jù)庫中只保存它的定義 是RDBMS提供給用戶以多種角度觀察數(shù)據(jù)庫中數(shù)據(jù)的重要機制 創(chuàng)建視圖、刪除 Create V

31、iew v as Drop View v,例:計算機系的花名冊 Create View CS_Stu as Select sno, sname, ssex From Student Where sdept = CS,4.9.1 視圖(View),視圖名可以出現(xiàn)在任何關(guān)系名可以出現(xiàn)的地方 例:列出計算機系的男生 Select sno,sname From CS_Stu Where ssex = M,例:建立學生平均成績視圖 Create View avg_grade(sno,avg) as Select sno,avg(grade)

32、 From SC Group By sno 例:找出平均成績大于等75的學生 Select * From avg_grade Where avg = 75 注意:此例的使用方法是非標準的。,視圖的更新:單表、原始屬性構(gòu)成的視圖可以更新(像基本表那樣更新) 由多表構(gòu)成的視圖由很大的限制 視圖中的非原始屬性也不能更新 例:Update avg_grade Set avg = 100 Where sno = 95001,4.9.2 視圖的作用,簡化用戶的操作 不同的用戶可從不同的角度看待同一數(shù)據(jù) 支持一定的邏輯數(shù)據(jù)獨立性 數(shù)據(jù)的安全性,4.9.3 綜合示例,Create D

33、omain stu_name varchar(20) Create Table Student (sno char(10) not null, sname stu_name , sage smallint, ssex char(1), sdept char(2), primary key (sno), check(ssex in (M, F))),Create Table Course ( cno char(10) not null , cname varchar(20) , credit smallint, primary key (cno)) Create Table S

34、C ( sno char(10) not null , cno char(10) not null , grade smallint, primary key (sno, cno), check(grade =0 and grade <=100)),4.10 嵌入式SQL,前面所介紹的SQL語言作為一種獨立的自含式語言,是聯(lián)機終端用戶在交互環(huán)境下使用的,稱為交互式SQL(INTERACTIVE SQL),簡稱ISQL。,在實際應(yīng)用當中,常常還需要解決這樣兩個問題: 有許多應(yīng)用是過程化的,要求根據(jù)不同的條件來完成不同的任務(wù); 有許多應(yīng)用不僅需要讀出數(shù)據(jù),還必須讀查詢

35、得到的數(shù)據(jù)進行處理。,對于上述問題,單獨使用SQL語言是很難滿足實際需求的。為了解決這些問題,SQL還提出了另外一種使用方式,即可以作為一種數(shù)據(jù)子語言嵌入某些主語言中,利用高級語言的過程性結(jié)構(gòu)來彌補SQL語言實現(xiàn)復雜應(yīng)用方面的不足。這種將SQL嵌入COBOL, C, C++, FORTRAN,中使用,稱為嵌入式SQL(EMBEDDED SQL),簡稱ESQL;而接受SQL嵌入的高級語言,稱為主語言或者宿主語言。,對于宿主語言中的嵌入式SQl,DBMS通常采用兩種方法處理。 一是預編譯方法; 一是修改和擴充主語言方法,使之能夠處理SQL。 當前主要采用第一種方法。其過程是,有DBMS的預處理

36、程序?qū)υ闯绦蜻M行掃描,識別出SQL語句,然后將它們轉(zhuǎn)換為主語言調(diào)用語句,從而使得主語言能過識別它們,最后由主語言的編譯程序?qū)⒄麄€源程序編譯成目標代碼。,所有在終端交互方式下使用的SQL均能在嵌入方式下使用。由于使用方式的差異,存在著具體操作方式上的不同。但無論是怎樣的使用方式,都需要解決下面三個主要問題: 應(yīng)用程序中主語言的語句和SQL的語句,這兩種語句; 應(yīng)用程序中既有主語言變量又有SQL列變量,如何區(qū)分這兩種變量; 主語言變量一般均為標量,而SQL中的列變量一般均為集合量,如何建立由集合量到標量的轉(zhuǎn)換。,4.10.1 主語言語句和SQL語句的區(qū)分,在嵌入方式下,所有SQL語句在嵌入主語句的

37、程序時幾乎都必須在其前綴加EXEC SQL,而結(jié)束標志可以因主語言不同而不同,一般是在語句結(jié)束處用END-EXEC 或用分號“;”。 在程序中所使用的SQL中的表,包括基表和視圖都要用EXEC SQL DECLEAR語句加以說明。 SQL語句執(zhí)行后,系統(tǒng)要反饋給程序以信息,這些信息均送入SQL通訊區(qū)(SQL Communication Area)SQLCA。 SQLCA是一個數(shù)據(jù)結(jié)構(gòu),在應(yīng)用程序中用EXEC SQL INCLUDE SQLCA 語句加以定義。,SQLCA中有一個存放每次執(zhí)行SQL語句后返回代碼的變量SQLCODE,這是一個整型變量,反映SQL語句執(zhí)行后的結(jié)果狀態(tài)。 應(yīng)用程序每執(zhí)

38、行一條SQl語句之后都應(yīng)測試一次SQLCODE的值。 當它為0時表示正常結(jié)束,即SQL語句成功; 非0時為非正常結(jié)束,SQL語句不成功。 即使說,SQLCODE的基本功用是DBMS向宿主程序報告執(zhí)行SQL語句的情況。,例:在一些高級語言中使用嵌入式SQL語言的格式與刪除S的情況。 在C中使用SQL語言使以EXEC SQL開始,以分號“;”結(jié)束,其格式為: EXEC SQL; 刪除關(guān)系S的命令為: EXEC SQL DROP TABLE S;,在COBLE 中以EXEC SQL開始,以END_EXEC結(jié)束,格式為: EXEC SQLEND_EXEC 刪除S的語句為: EXEC SQL DRO

39、P TABLE S END_EXEC 在Power Builder中使用SQL與通常SQL沒有任何區(qū)別,語句前不需要加任何EXEC SQL,只需用分號作為語句結(jié)束標記,即刪除S的語句為: DROP TABLE S,嵌入式SQL語句根據(jù)其作用的不同,可以分為可執(zhí)行語句和說明性語句兩類??蓤?zhí)行語句又分為數(shù)據(jù)定義、數(shù)據(jù)控制和數(shù)據(jù)操作三種。在宿主語言編寫的程序(宿主程序)中任何允許出現(xiàn)執(zhí)行高級語言語句的地方,都可以嵌入可執(zhí)行SQL語句;任何允許出現(xiàn)說明性高級語句的地方,都可以寫說明性SQL語句。,4.10.2 主語言變量與SQL變量的區(qū)別,主變量與指示變量 主變量 在嵌入方式下,程序中的SQL語

40、句段內(nèi)可使用主語言的程序變量來輸入和輸出數(shù)據(jù)。SQL中使用主語言程序定義的變量稱為主變量。,主變量根據(jù)其作用的不同,分為輸入主變量和輸出主變量。 輸入主變量由應(yīng)用程序?qū)ζ滟x值,SQL加以引用; 輸出主變量由SQL語句對其賦值或設(shè)置狀態(tài)信息,返回給應(yīng)用程序。 一個主變量可以既是輸入主變量,又是輸出主變量。,利用輸入主變量,我們可以完成以下功能: 指定向數(shù)據(jù)庫中插入的數(shù)據(jù); 把數(shù)據(jù)庫中的數(shù)據(jù)修改為指定值; 指定WHERE子句或HAVING子句中的條件。 利用輸出主變量,我們可以得到SQL語句的執(zhí)行結(jié)果和狀態(tài)信息。,指示變量 一個主變量可以附帶一個任選的指示變量(indicator variable

41、)。 指示變量是一個整型變量,用來“指示”所述主變量的值或者條件。 指示變量可以指示輸入主變量是否為空值,可以檢測輸出主變量是否為空值,值是否被截斷等。,主變量與指示變量的說明 所有SQL語句中用到的主變量和指示變量都必須加以說明。 說明的開頭行與結(jié)尾行分別為: EXEC SQL BEGIN DECLEAR SECTION EXEC SQL END DECLEAR SECTION。 說明了之后的主變量和指示變量,可以在SQL語句中任何一個能夠使用表達式的地方調(diào)用。,SQL語句中的主變量名稱前必須添加冒號()作為標志,這是為了與數(shù)據(jù)庫中的對象名(表名,視圖名,屬性名等)向區(qū)別。同樣,SQL語

42、句中的指示變量之前也必須加有冒號,同時緊跟在所指的主變量之后。 在SQL語句之外的其它地方,說明之后的主變量和指示變量可以直接引用,不必添加冒號。 在主程序內(nèi),一般不出現(xiàn)SQL變量。能夠使用表達式的地方調(diào)用。,4.10.3游標語句的使用,1. 概念 SQL語言與主語言在數(shù)據(jù)處理有著不同方式。SQL是面向集合的,一條SQL語句原則上可以產(chǎn)生或處理多條記錄。主語言使面向記錄的,一組主變量一次只能存放一條記錄,僅僅使用主變量并不能夠完全滿足SQL語句向應(yīng)用程序輸出數(shù)據(jù)的要求。這里基本的問題是,在嵌入方式下,SQL的變量是集合型的,主變量為標量型的, SQL變量不能夠直接提供給主程序使用。為了解決

43、這個問題,就需要有一種機制,將SQL變量中的集合量逐個取出送入主變量內(nèi),進而提供給主程序使用。解決問題的基本思路是在嵌入式SQL中引入“游標”的概念,用游標來協(xié)調(diào)SQL和主語言的兩種不同數(shù)據(jù)處理方式。,游標本質(zhì)上是系統(tǒng)為用戶開設(shè)的一個數(shù)據(jù)緩沖區(qū),用以存放SQL語句的結(jié)果數(shù)據(jù)集。 每個游標區(qū)都有一個名字。用戶可以通過游標逐一讀取數(shù)據(jù)記錄,然后賦值給主變量 ,再交由主語言程序作進一步的處理。 利用游標概念提供上述協(xié)調(diào)機制的基本方法是在嵌入式SQL中增加一組游標(cursor)語句。,游標語句 游標定義語句 有為某一種語句的結(jié)果定義一個命名的游標。其語句為: EXEC SQL DECLARE

44、 CURSOR映像語句,游標打開語句 游標定義后再使用時需要打開游標,此時游標處于活動狀態(tài)并指向集合的第一個記錄。其一般形式為: EXEC SQL OPEN 游標關(guān)閉語句 游標使用完后需要關(guān)閉。其一般形式為: EXEC SQL CLOSE ,游標推進語句 該語句讀出當前記錄,并將游標推向集合中的下一個記錄,此語句常用于循環(huán),其一般形式為: EXEC SQL FETCH ,例:查詢DEPT變量中給出的某個系的全體學生的信息。 EXEC SQL DECLARE SX CURSOR FOR SELECT S#,Sn,Sa FROM S WHERE Sd=:D

45、EPT; EXEC SQL OPEN SX; DO WHILE EXEC SQL FETCH SX; INTO S# ,SNAME,AGE .. END; EXEC SQL CLOSE SX;,作業(yè): 課本習題3的:2,13,本章小結(jié),簡單查詢:選擇條件、排序輸出、聚合運算以及分組處理。 連接查詢:查詢的并、交、差;連接與笛卡爾積;元組變量。 嵌套查詢:產(chǎn)生單值的子查詢;涉及到關(guān)系的選擇條件;涉及到元組的選擇條件;相關(guān)子查詢。 數(shù)據(jù)庫更新:插入、刪除、修改。 定義關(guān)系模式:定義表、撤消表;更改關(guān)系模式;建立和撤消索引。 視圖:定義視圖、查詢視圖、更新視圖、撤消視圖。,

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!