ImageVerifierCode 换一换
格式:PPT , 页数:155 ,大小:5.37MB ,
文档编号:2930182      下载积分:29 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-2930182.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(三亚风情)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(数据库基础教程课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

数据库基础教程课件.ppt

1、nSQL: Struceured Query Languangn1974年,由Boyce和Chamber提出n1975-1979年,在System R上实现,由IBM的San Jose研究室研制,称为Sequel用户1用户2用户4视图V1视图V1用户3基本表B1基本表B2基本表B4基本表B3存储文件S1存储文件S2存储文件S4存储文件S3SQL数据库体系结构SQL用户VIEWBase TableStored filen有关组织nANSI(American Natural Standard Institute)nISO(International Organization for Standar

2、dization)n有关标准nSQL-86n“数据库语言SQL”nSQL-89n“具有完整性增强的数据库语言SQL”,增加了对完整性约束的支持nSQL-92n“数据库语言SQL”,是SQL-89的超集,增加了许多新特性,如新的数据类型,更丰富的数据操作,更强的完整性、安全性支持等。nSQL-3n正在讨论中的新的标准,将增加对面向对象模型的支持n一体化n集DDL,DML,DCL于一体n单一的结构-关系,带来了数据操作符的统一n面向集合的操作方式n一次一集合n高度非过程化n用户只需提出“做什么”,无须告诉“怎么做”,不必了解存取路径n两种使用方式,统一的语法结构nSQL既是自含式语言(用户使用),

3、又是嵌入式语言(程序员使用)n语言简洁,易学易用nchar(n):固定长度的字符串nvarchar(n):可变长字符串nint:整数nsmallint:小整数类型nnumeric(p,d):定点数,小数点左边p位,右边q位nreal:浮点数ndouble precision:双精度浮点数ndate:日期(年、月、日)ntime:时间(小时、分、秒)ninterval:两个date或time类型数据之间的差n格式 域名 数据类型n示例create domaincreate domain person-name char(20) 类似C语言中:typedeftypedef ADDRESS_LIST

4、ADDRESS_LISTchar name10;char telephone20;char location20char email20;ADDRESS_LISTADDRESS_LIST tom;n格式 表名( 列名 数据类型 缺省值 ,列名 数据类型 缺省值 ,(列名 ,列名 ) , (列名 ,列名 ) 表名 (列名 ,列名 ) ,(条件)checkcheckn示例CREATE TABLECREATE TABLE S( S# CHARCHAR(4), SNAME CHARCHAR(8) NOT NULLNOT NULL, AGE SMALLINTSMALLINT, SEX CHARCHAR(

5、1), PRIMARY KEY PRIMARY KEY (S#), CHECKCHECK (SEX=0 OR SEX=1)CREATE TABLECREATE TABLE C( C# CHARCHAR(4), CNAME CHARCHAR(10) NOT NULLNOT NULL, TEACHER CHARCHAR(8), PRIMARY KEY PRIMARY KEY (C#),)CREATE TABLECREATE TABLE SC(S# CHARCHAR(4), C# CHARCHAR(4), GRADE SAMLLINTSAMLLINT, PRIMARY KEY PRIMARY KEY

6、 (S#,C#), FOREIGN KEY FOREIGN KEY (S#)REFERENCESREFERENCES S(S#), FOREIGN KEY FOREIGN KEY (C#)REFERENCESREFERENCES C(S#), CHECKCHECK(GRADE IS NULLIS NULL) OROR GRADE BETWEENBETWEEN 0 ANDAND 100)n示例 create domaincreate domain person_name char(20)create tablecreate table PROF( PNO char10, person_name

7、PNAME not nullnot null, SAL int, AGE int, DNO char10, primary key primary key (PNO), foreign key foreign key (DNO) references references DEPT(DNO), checkcheck (SAL 0)n格式: 表名 子句增加新列子句删除列 子句修改列定义n示例alter tablealter table PROFadd add LOCATION char30n格式 表名n示例 drop tabledrop table DEPT 撤消基本表后,基本表的定义、表中数据

8、、索引、以及由此表导出的视图的定义都被删除n格式 / 索引名 表名 (列名 / , 列名/) uniqueunique(distinctdistinct):):唯一性索引,不允许表中不同的行在索引列上取相同值。若已有相同值存在,则系统给出相关信息,不建此索引。系统并拒绝违背唯一性的插入、更新 clustercluster:聚集索引,表中元组按索引项的值排序并物理地聚集在一起。一个基本表上只能建一个聚集索引 asc/descasc/desc:索引表中索引值的排序次序,缺省为ascn示例: create cluster indexcreate cluster index s-index on S(

9、S#)n格式 索引名n可以动态地定义索引,即可以随时建立和删除索引n不允许用户在数据操作中引用索引。索引如何使用完全由系统决定,这支持了数据的物理独立性n应该在使用频率高的、经常用于连接的列上建索引n一个表上可建多个索引。索引可以提高查询效率,但索引过多耗费空间,且降低了插入、删除、更新的效率 数据库名 数据库名 数据库名 数据库名selectselect A1 , A2 , , Anfromfrom r1 , r2 , , rmwherewhere P A1 , A2 , , An(p(r1 r2 rm)给出所有老师的姓名selectselect PNAMEfromfrom PROF 可以为

10、列名,* ,算术表达式,聚集函数n“* *”:表示“所有的属性”给出所有老师的信息selectselect *fromfromPROFn带, , 的算术表达式给出所有老师的姓名及税后工资额selectselect PNAME,SAL 0.95fromfrom PROF 缺省为保留重复元组,也可用关键字allall显式指明。若要去掉重复元组,可用关键字distinctdistinct或uniqueunique指明 找出所有选修课程的学生 selectselect distinctdistinct SNO fromfrom SCnfrom子句列出查询的对象表n当目标列取自多个表时,在不混淆的情况下

11、可以不用显式指明来自哪个关系n例:找出工资低于500的职工的姓名、工资、系别 selectselectPNAME , SAL , DNAME fromfrom PROF , DEPT wherewhere SAL P2.SAL n格式列名 “字符串”找出满足给定匹配条件的字符串n匹配规则n “%” n匹配零个或多个字符n “”n匹配任意单个字符nEscapen定义转义字符,以去掉特殊字符的特定含义,使其被作为普通字符看待n如escape “”,定义 作为转义字符,则可用%去匹配%,用去匹配思考:用什么去匹配 ?n列出姓名以“张”打头的教师的所有信息 selectselect * fromfro

12、m PROF wherewhere PNAME likelike “张%”n列出名称中含有4个字符以上,且倒数第3个字符是d,倒数第2个字符是_的系的所有信息 selectselect * fromfrom PROF wherewhere PNAME likelike “% d ”n按系名升序列出老师姓名,所在系名,同一系中老师按姓名降序排列 selectselect DNAME,PNAME fromfrom PROF,DEPT wherewhere PROF.DNO = DEPT.DNO order byorder by DNAME ascasc,PNAME descdescn提示 集合操作

13、自动去除重复元组,如果要保留重复元组的话,必须用all关键词指明n求选修了001或(且)002号课程的学生号(selectselect SNOfromfrom SC wherewhere CNO = 001)union (intersect)union (intersect)(selectselect SNO fromfrom SC wherewhere CNO = 002)n求选修了001和002号而没有选003号课程的学生号(selectselect SNOfromfrom SC wherewhere CNO = 001 oror CNO = 002 )exceptexcept(selec

14、tselect SNOfromfrom SC wherewhere CNO = 003) group by将表中的元组按指定列上值相等的原则分组,然后在每一分组上使用聚集函数,得到单一值having则对分组进行选择,只将聚集函数作用到满足条件的分组上列出每个学生的平均成绩列出每门课程的平均成绩group by S#group by C#928590929290n平均值:avgavgn最小值:minminn最大值:maxmaxn总和:sumsumn记数:countcountcountcount(* *)与)与countcount(列名)的差别(列名)的差别n列出各系的老师的最高、最低、平均工资

15、selectselect DNO,maxmax(SAL),minmin(SAL),avgavg(SAL) fromfrom PROF group by group by DNOn火眼金睛火眼金睛 求选修了课程的学生人数 selectselect count count (SNO ) fromfrom SC selectselect PNAME,maxmax(SAL) fromfrom PROF selectselect DNO,avgavg(SAL) fromfrom PROF group bygroup by DNO wherewhere AGE 60n列出及格的学生的平均成绩 select

16、select SNO,avgavg(SCORE) fromfrom SC group bygroup by SNO havinghaving minmin(SCORE) = 60selectselect SNO,avgavg(SCORE) fromfrom SCwherewhere SCORE =60 group bygroup by SNOn列出每一年龄组中男学生(超过50人)的人数 selectselect AGE,countcount(S#) fromfrom S wherewhere SEX = M group by group by AGE havinghaving count(*)

17、 50测试指定列的值是否为空值找出年龄值为空的老师姓名 selectselect PNAME fromfrom PROF wherewhere AGE is nullis null不可写为wherewhere AGE = null nulln除is not null之外,空值不满足任何查找条件n如果null参与算术运算,则该算术表达式的值为nulln如果null参与比较运算,则结果可视为false。在SQL-92中可看成unknownn如果null参与聚集运算,则除count(*)之外其它聚集函数都忽略null 例:selectselect sumsum(G) fromfrom SC例:sel

18、ectselect countcount(*) fromfrom SCn测试集合是否为空n测试集合是否存在重复元组表达式表达式 (子查询)(子查询)判断表达式的值是否在子查询的结果中n列出张军和王红同学的所有信息 selectselect * fromfrom S wherewhere SNAME in in (“张军”,“王红”)n选修了001号课程的学生的学号及姓名 selectselect SNO,SNAME fromfrom S where where SNO inin (selectselect SNO fromfrom SC wherewhere CNO = 001)n列出选修了0

19、01号和002号课程的学生的学号 selectselect SNO fromfrom SC wherewhere SC.CNO = 001 andand SNO in in (selectselect SNO fromfrom SC wherewhere CNO = 002)n表达式表达式 比较运算符比较运算符 (子查询)(子查询) 表达式的值至少与子查询结果中的一个值相比满足比较运算符 n表达式表达式 比较运算符比较运算符 (子查询)(子查询) 表达式的值与子查询结果中的所有的值相比都满足比较运算符n找出平均成绩最高的学生号 selectselect SNO fromfrom SC grou

20、p bygroup by SNO havinghaving avgavg(SCORE) = allall(selectselect avgavg(SCORE) fromfrom SC group bygroup by SNO)判断子查询的结果集合中是否有任何元组存在in后的子查询与外层查询无关,每个子查询执行一次,而exists后的子查询与外层查询有关,需要执行多次,称之为n列出选修了01号课程的学生的学号及姓名 selectselect SNO,SNAME fromfrom S wherewhere exists (selectselect * fromfrom SC wherewhere

21、CNO = 01 a n da n d S N O = S.SNO)n列出选修了001号和002号课程的学生的学号 selectselect SNO fromfrom SC SC1 wherewhere SC1.CNO = 001 andand exists exists (selectselect SNO fromfrom SC SC2 wherewhere SC2. CNO = 002 andand SC2.SNO = SC1.SNO)n列出选修了全部课程的学生姓名 selectselect SNAME fromfrom S wherewhere not existsnot exists(

22、selectselect C# fromfrom C wherewhere notnot existsexists(selectselect * fromfrom SC wherewhere SC.C# = C.C# andand SC.S# = S.S# )任意课程,所求学生选之 不存在任何一门课程,所求学生没有选之n列出至少选修了001号学生选修的所有课程的学生名 selectselect SNAME fromfrom S wherewhere not existsnot exists(selectselect CNO fromfrom COURSE wherewhere existsex

23、ists(selectselect * fromfrom SC wherewhere SC.CNO = COURSE.CNO andand SC.SNO = 001) and not existsand not exists(selectselect * fromfrom SC wherewhere SC.CNO = COURSE.CNO andand SC.SNO = S.SNO)任意课程,001号学生选之,所求学生选之 不存在任何一门课程,001号学生选之,所求学生没有选之如果子查询结果中没有重复元组,则返回truen找出所有只教授一门课程的老师姓名 selectselect PNAME

24、from from PROF where where uniqueunique(selectselect PNO fromfrom PC wherewhere PC.PNO = PROF.PNO)n找出至少选修了两门课程的学生姓名 selectselect SNAME from from S where where notnot uniqueunique(selectselect SNO fromfrom SC wherewhere SC.SNO = S.SNO)uniqueunique (a , b , null) , (a , b , null) ? SQL-92中,允许在from子句中使

25、用子查询表达式,这时可将该子查询的结果命名为一个临时关系临时关系加以引用n找出平均成绩及格的学生 先求出每个学生的平均成绩,再从中找出及格的学生 selectselect SNAME , avg(SCORE) fromfrom S,SC wherewhere SC.SNO = S.SNO group bygroup by SC .SNOselectselect SNAME , AVG_SCOREfromfrom (selectselect SNAME , avg(SCORE) fromfrom S,SC wherewhere SC.SNO = S.SNO group bygroup by SC

26、 .SNO) asas result(SNAME , AVG_SCORE )wherewhere AVG_SCORE = 60视图的属性名缺省为子查询结果中的属性名,也可以显式指明 with check option指明当对视图进行insert,update时,要检查是否满足视图定义中的条件create viewcreate view COMPUTER_PROFasas (selectselect PNO , PNAME , SAL fromfrom PROF,DEPT wherewhere PROF.PNO = DEPT.PNO and and DEPT.DNAME = “计算机系”)cre

27、ate viewcreate view DEPTSAL( DNO, LOW, HIGH, AVERAGE, TOTAL )asas ( selectselect DNO, minmin(SAL), maxmax(SAL), avgavg(SAL), sumsum(SAL) fromfrom PROF group by group by DNO )n给出计算机系工资超过800的老师姓名selectselect PNAMEfromfrom COMPUTER_PROFwherewhere SAL 800n给出计算机系老师的最低、最高、平均工资以及工资总额selectselect LOW , HIGH

28、 , AVERAGE , TOTALfromfrom DEPTSAL , DEPTwherewhere DEPTSAL.DNO = DEPT.DNO andand DEPT.DNAME =“计算机系”n连接成分n包括两个输入关系、连接条件、连接类型n连接条件连接条件n决定两个关系中哪些元组相互匹配,以及连接结果中出现哪些属性n连接类型连接类型n决定如何处理与连接条件不匹配的元组n自然连接自然连接n出现在结果关系中的两个连接关系的元组在公共属性上取值相等,且公共属性只出现一次non on Pn出现在结果关系中的两个连接关系的元组在公共属性上取值满足谓词条件P,且公共属性出现两次nusing (A

29、using (A1 1, A, A2 2 , A , An n) )n (A1, A2 , An)是两个连接关系的公共属性的子集,元组在(A1, A2 , An)上取值相等,且(A1, A2 , An)只出现一次n内连接内连接n舍弃不匹配的元组n左外连接左外连接n内连接 + 左边关系中失配的元组(缺少的右边关系属性值用null表示)n右外连接右外连接n内连接 + 右边关系中失配的元组(缺少的左边关系属性值用null表示)n全外连接全外连接n内连接 + 左边关系中失配的元组(缺少的右边关系属性值用null表示)+ 右边关系中失配的元组(缺少的左边关系属性值用null表示)ncross joinc

30、ross joinn两个关系的笛卡儿积nunion joinunion joinn左边关系中失配的元组+ 右边关系中失配的元组n对于外连接,连接条件是必须的n对于内连接,连接条件是可选的,没有连接条件等价于两个关系的笛卡儿积n列出老师的教工号、姓名、工资、所教课程号selectselect PNO,PNAME,SAL,CNOfromfrom (PROF nature left outer joinnature left outer join PC)ABCa1b1c1a2b2c2a3b3c3CDc1d1c2d2c4d3R inner join inner join S on on R.C = S

31、.CABCCDa1b1c1c1d1a2b2c2c2d2RSR left outer join left outer join S on on R.C = S.CABCCDa1b1c1c1d1a2b2c2c2d2a3b3c3nullnullR nature right outer join nature right outer join SABCDa1b1c1d1a2b2c2d2nullnullc4d3R full outer join full outer join S onon R.C = S.CABR.CS.CDa1b1c1c1d1a2b2c2c2d2a3b3c3nullnullnulln

32、ullnullc4d3ninsert intoinsert into PROF valuesvalues ( P123, “王明”, 35, D08, 498 )ninsert intoinsert into PROF (PNO, PNAME, DNO)valuesvalues ( P123, “王明”, D08 ) 思考:SAL取何值?n将平均成绩大于90的学生加入到EXCELLENT中insert intoinsert into EXCELLENT ( SNO, GRADE)selectselect SNO , avgavg(SCORE)fromfrom SCgroup bygroup b

33、y (SNO)havinghaving avgavg(SCORE) 90不支持修改在子查询中出现的表insert intoinsert into PROFselectselect *fromfrom PROF若支持,则完成查询后,再执行修改操作 表名 条件表达式从表中删除符合条件的元组,如果没有where语句,则删除所有元组n清除所有选课记录delete fromdelete from SCn删除王明老师所有的任课记录delete fromdelete from PCwherewhere PNO inin (selectselect PNO fromfrom PROF wherewhere P

34、NAME = “王明”) n删除低于平均工资的老师记录delete fromdelete from PROFwherewhere SAL (selectselect avgavg(SAL) fromfrom PROF) 思考:是先找到所有符合条件的元组,一并删除,还是找到一个删除一个?update update 表名 setset 列名 = 表达式 | 子查询 列名 = ,表达式 | 子查询wherewhere 条件表达式指定对哪些列进行更新,以及更新后的值是什么n老师工资上调5%updateupdate PROFsetset SAL = SAL * 1.05n将D01系系主任的工资改为该系的

35、平均工资updateupdate PROFsetset SAL = (selectselect avgavg(SAL) fromfrom PROFwherewhere DNO = D01)wherewhere PNO = (selectselect DEAN fromfrom DEPT wherewhere DNO = D01)n当C1课程的成绩小于该课程的平均成绩时,将该成绩提高5%updateupdate SCsetset GRADE = GRADE * 1.05 wherewhere C# = C1andand GRADE 2000 update update PROF setset S

36、AL = SAL * 0.95 wherewhere SAL 15)n域约束子句n用CREATE DOMAIN定义域时,可以出现 CHECK AGE SMALLINT(VALUE = 15) AND VALUE = 25)n全局约束涉及多个属性间的或多个关系间的联系CREATE TABLE SC(S# CHAR(4), C# CHAR(4), GRADE SMALLINT, PRIMARY KEY (S#, C#), (S# IN (SELECT S# FROM S), (C# IN (SELECT C# FROM C)如果S中删除元组,不会触发CHECK子句,只有对SC表的更新才会触发n命名

37、 约束名 n示例S# CHAR(4) S_PK AGE SAMLLINT AGE_VAL (AGE = 15 AND AGE = 25)n关系上约束的撤消与添加撤消用添加用n示例 table S S_PK table SC SC_CHECK (S# in select S# from S)n域约束的创建、撤消与添加 AGE_DOMAIN smallintDC_AGE (value = 15) AGE_DOMAIN DC_AGE check(value = 15) AGE_DOMAIN DC_AGEn定义 断言是谓词,表达数据库总应该满足的条件n一旦定义了断言,系统验证其有效性,并且对每个可能违

38、反该断言的更新操作都进行检查n这种检查会带来巨大的系统负载,因此应该谨慎使用断言n对断言“所有X, P(X)”,是通过检查“not exists X, P(X)”来实现的n示例:不允许男同学选修张老师课程 ASSE2 (not exists(select * from SC where C# in(select C# from C where TEACHER = 张) and S# in(select S# from S where SEX = M)n示例:每门课最多50名男同学选修 ASSE1 (50 = all(select count(SC.S#) from S, SC where S.

39、S# = SC.S# and SEX = M group by C#)n撤消:断言名 ASSE1n触发器是一条语句,当对数据库做修改时,它自动被系统执行n触发器的定义n指明什么条件下触发器被执行n指明触发器执行的动作是什么n触发器的作用n示警n满足特定条件时自动执行某项任务n触发器事件nInsertInsert、 deletedelete、updateupdatecreate trigger trigger-namebeginafterinsertdeleteupdateon table-nameof column-namereferencingold row as identifiernew

40、 row as identifiertriggered-SQL-statementfor each rowwhen(search-condition)begin atomicendnSQL的表达能力相比高级语言有一定的限制,有些数据访问要求单纯使用SQL无法完成。一方面,SQL在逐渐增强自己的表达能力(参见习题4.10),另一方面,太多的扩展会导致优化能力及执行效率的降低n实际的应用系统是非常复杂的,数据库访问只是其中一个部件。有些动作如与用户交互、图形化显示数据等只能用高级语言实现主语言主语言 + + 嵌入嵌入SQLSQL 预处理预处理 主语言主语言 + + 函数调用函数调用 主语言编译器主

41、语言编译器 主语言执行程序主语言执行程序 嵌入的SQL语句以EXEC SQLEXEC SQL开始,以分号(; ;) 或END_EXEXEND_EXEX结束EXEC SQLEXEC SQL delete fromdelete from PROF where where DNO = 10;n宿主变量nC变量,既可以用在C语句中,也可用在SQL语句中,用来在两者之间传递数据n宿主变量的声明n声明为通常的C变量,并将其放在下列标识语句之间EXEC SQL BEGIN DECLARE SECTIONEXEC SQL BEGIN DECLARE SECTIONint prof_no;char prof_n

42、ame30;int salary;EXEC SQL END DECLARE SECTIONEXEC SQL END DECLARE SECTION注:宿主变量出现于SQL语句中时,前面加(:)以区别列名 宿主变量可出现的地方:SQL的数据操纵语句中可出现常数常数的任何地方,select,fetch等语句的intointo字句中示例:EXEC SQLEXEC SQL selectselect PNAME , SAL intointo : :prof_name , : :salary fromfrom PROF wherewhere PNO = prof_no ; ; n指示变量nC变量,用来指示

43、返回给宿主变量的值是否为null值,以及返回给宿主变量的字符串是否发生了截断n指示变量应用场合n如果一个宿主变量所对应的数据库字段允许空值,或字符串类型的宿主变量的长度可能小于所对应的数据库字段的长度,则需要一个指示变量来指明数据库访问的返回状态n指示变量的返回值n= 0:取到主变量的值不空,没有发生截断n= 1:取到主变量的值为空值n 0:取到主变量的值发生了截断,指示变量的值是截断前的字符串的实际长度n指示变量的用法n声明与宿主变量的声明方式一样,在数据操纵语句中,在宿主变量和指示变量之间加( : : )或关键字indicatorindicatorEXEC SQL BEGIN DECLAR

44、E SECTIONEXEC SQL BEGIN DECLARE SECTIONint prof_no;char prof_name30;int salary;short name_id;short sal_id;EXEC SQL END DECLARE SECTIONEXEC SQL END DECLARE SECTIONEXEC SQL selectEXEC SQL select PNAME , SAL intointo : :prof_name : : name_id , : :salary: : sal_id fromfrom PROF wherewhere PNO = prof_no

45、; ; n执行方式的差别nSQL:一次一集合nC语言:一次一记录n游标n在查询结果的记录集合中移动的指针n若一个SQL语句返回单个元组,则不用游标n若一个SQL语句返回多个元组,则使用游标n不需要游标的数据操作n结果是一个元组的select语句EXEC SQLEXEC SQL selectselect PNAME , SALintointo : :prof_name : : name_id, : :salary : : sal_id fromfrom PROFwherewhere PNO = prof_no ; ;ninsert语句 EXEC SQLEXEC SQL insert intoin

46、sert into PROF valuesvalues (: :prof_no, : :prof_name , : :salary , : :dept_no , : : salary) ; ;ndelete语句 EXEC SQLEXEC SQL delete fromdelete from PROF valuesvalues PNO : :prof_no ; ;nupdate语句 EXEC SQLEXEC SQL update update PROF set set SAL = : :salary wherewhere PNO = : : prof_no ; ;n需要游标的数据操作当selec

47、t语句的结果中包含多个元组时,使用游标可以逐个存取这些元组活动集:活动集:selecT语句返回的元组的集合当前行:当前行:活动集中当前处理的那一行。游标即是指向当前行的指针n游标分类n滚动游标n游标的位置可以来回移动,可在活动集中取任意元组n非滚动游标n只能在活动集中顺序地取下一个元组n更新游标n数据库对游标指向的当前行加锁,当程序读下一行数据时,本行数据解锁,下一行数据加锁n定义与使用游标的语句ndeclaredeclare定义一个游标,使之对应一个select语句declaredeclare 游标名 scrollscroll cursor forcursor forselect语句for

48、updatefor update ofof列表名for update任选项,表示该游标可用于对当前行的修改与删除nopen打开一个游标,执行游标对应的查询,结果集合为该游标的活动集openopen 游标名nfetch在活动集中将游标移到特定的行,并取出该行数据放到相应的宿主变量中fetch fetch next next | prior prior | first first | last last | current current | relative n relative n | absolute m absolute m 游标名 into into 宿主变量表nclose关闭游标,释放

49、活动集及其所占资源。需要再使用该游标时,执行open语句closeclose 游标名nfree删除游标,以后不能再对该游标执行open语句freefree 游标名n良好的应用程序必须提供对错误的处理,应用程序需要知道SQL语句是否正确执行了,发生错误时的错误代码,执行时遇到特殊情况时的警告信息nSQL通讯域是一结构,每一嵌入SQL语句的执行情况在其执行完成后写入SQLCA结构中的各变量中, 根据SQLCA中的内容可以获得每一嵌入SQL语句执行后的信息,应用程序就可以做相应的处理n为了说明 (USERCA),必须在应用程序中包括:n占统治地位的产品,没有通过任何的公认程序而被作为标准广泛接受n把一些已经被厂商实现的、甚至已经变成事实标准的特性标准化n引导市场的正式标准,先定义一些特性,然后厂商实现这些特性n适用于客户-服务器体系结构,定义客户程序用以连接到数据库系统和发出SQL命令的APIn客户可以用同一ODBC API来连接到任何支持ODBC的数据库系统;ODBC允许用户同时连接到多个数据源并在这些数据源之间进行切换n每个数据库系统必须提供一个驱动程序,受客户端的ODBC驱动程序管理器控制,负责与服务器连接和通讯以及进行所有必要的数据和查询格式转换nODBC API定义一个CLI(调用层接口)、一个SQL语法定义以及关于允许的CLI调用序列的规则

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|