关系数据库语言SQL_第1页
关系数据库语言SQL_第2页
关系数据库语言SQL_第3页
关系数据库语言SQL_第4页
关系数据库语言SQL_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关系数据库语言SQL关系数据库语言SQL关系数据库语言SQL本章重要概念(1)数据库的体系结构,的组成。(2)的数据定义:模式、基本表和索引的创建和撤销。(3)的数据查询;语句的句法, 语句的三种形式及各种限定,基本表的连接操作,3中的递归查询。(4)的数据更新:插入、删除和修改语句。(5)视图的创建和撤消,对视图更新操作的限制。(6)嵌入式:预处理方式,使用规定,使用技术,卷游标,动态语句。(7)存储过程与。2关系数据库语言SQL关系数据库语言SQL关系数据库语言SQL1本章重要概念(1)数据库的体系结构,的组成。(2)的数据定义:模式、基本表和索引的创建和撤销。(3)的数据查询;语句的句法, 语句的三种形式及各种限定,基本表的连接操作,3中的递归查询。(4)的数据更新:插入、删除和修改语句。(5)视图的创建和撤消,对视图更新操作的限制。(6)嵌入式:预处理方式,使用规定,使用技术,卷游标,动态语句。(7)存储过程与。2本章重要概念(1)数据库的体系结构,的组成。2本章概述是关系数据库的标准语言,对关系模型的发展和商用的研制起着重要的作用。语言是介乎于关系代数和元组演算之间的一种语言。本章详细介绍的核心部分内容: ●数据定义 ●数据查询 ●数据更新 ●嵌入式3本章概述是关系数据库的标准语言,对关系模型的发展和商用的研制关系数据库语言3.1简介3.2的数据定义3.3的数据查询3.4的数据更新3.5视图的定义和对视图的操作3.6嵌入式3.7存储过程与3.8小结4关系数据库语言3.1简介43.1简介3.1.1发展史3.1.2数据库的体系结构3.1.3的组成3.1.4的特点53.1简介3.1.1发展史53.1.1发展史(1)1970年,美国研究中心的连续发表多篇论文,提出关系模型。1972年,公司开始研制实验型关系数据库管理系统R,配制的查询语言称为语言。1974年,把修改为语言。1978年,简称为,即“结构式查询语言”。的发音仍为“”。现在已经成为一个标准,其发音更倾向于发“”。63.1.1发展史(1)1970年,美国研究中心的连续发3.1.1发展史(2)1986年10月,标准1987年6月,标准1992年8月,标准 (2)1999年,标准 (3)在未来很长一段时间里,仍将是关系数据库领域的主流语言。在软件工程、人工智能领域,已显示出相当大的潜力。(86)73.1.1发展史(2)1986年10月,标准(86)3.1.2数据库的体系结构(1)用户1用户2用户3用户4视图1视图2基本表1基本表2基本表3基本表4存储文件1存储文件2存储文件3存储文件4图3.1数据库的体系结构用户

83.1.2数据库的体系结构(1)用户1用户2用户3用户43.1.2数据库的体系结构(2)(1)一个模式()是表和约束的集合。(2)一个表由行集构成,一行是列的序列。(3)表有三种类型:基本表、视图和导出表。(4)基本表与存储文件间的联系是。每个存储文件与外部存储器上一个物理文件对应。(5)用户可以用语句对基本表和视图进行查询等操作。在用户看来,两者是一样的,都是表。(6)用户可以是应用程序,也可以是终端用户。虽然是国际公认的关系数据库标准,但标准的文档中并没有使用“关系”和“数据库”这两个名词。93.1.2数据库的体系结构(2)(1)一个模式()3.1.3的组成核心主要有四个部分:(1)数据定义语言,即,用于定义模式、基本表、视图、索引等结构。(2)数据操纵语言,即。数据操纵分成数据查询和数据更新两类。其中数据更新又分成插入、删除和修改三种操作。(3)嵌入式语言的使用规定。 语句嵌入在宿主语言程序中的规则。(4)数据控制语言,即,这一部分包括授权、完整性规则的描述、事务控制等内容。103.1.3的组成核心主要有四个部分:103.1.4的特点(1)具有十分灵活和强大的查询功能,其语句能完成相当复杂的查询操作。(2)不是一个应用开发语言,它只提供对数据库的操作功能,不能完成屏幕控制、菜单管理、报表生成等功能。(3)是国际标准语言,有利于各种数据库之间交换数据,有利于程序的移植,有利于实现高度的数据独立性,有利于实现标准化。(4)的词汇不多,完成核心功能只用了9个英语动词,它的语法结构接近英语,因此容易学习和使用。113.1.4的特点(1)具有十分灵活和强大的查询功能,其3.2的数据定义3.2.1模式的创建和撤销3.2.2基本数据类型3.2.3基本表的创建、修改和撤销3.2.4索引的创建和撤销123.2的数据定义3.2.1模式的创建和撤销123.2.1模式的创建和撤销模式的创建可用语句定义,其基本句法如下:〈模式名〉〈用户名〉语句的句法如下: 〈模式名〉[│]其方式有两种: (级联式)方式。 (约束式)方式。133.2.1模式的创建和撤销模式的创建可用语句定义,其3.2.2基本数据类型提供的主要数据类型(也称为“域类型”)有:(1)数值型: ()(2)字符串型:(n)(3)位串型(4)时间型143.2.2基本数据类型提供的主要数据类型(也称为“域类3.2.3基本表的创建、修改和撤销(1)1.基本表的创建例3.1基本表T(,,)可用下列语句创建: T ( (4), (8), (10), ());153.2.3基本表的创建、修改和撤销(1)1.基本表的创建13.2.3基本表的创建、修改和撤销(2)C ( (4), (10), (4), (), ()T());S ( (4), (8), , (1), ());163.2.3基本表的创建、修改和撤销(2)C163.2.3基本表的创建、修改和撤销(3)

( (4), (4), , (,), ()S(), ()C());173.2.3基本表的创建、修改和撤销(3)173.2.3基本表的创建、修改和撤销(4)2.基本表结构的修改对基本表的结构进行修改,即增加新的列、删除原有的列或修改数据类型、宽度等。(1)增加新的列用“……”语句,其句法如下:<基本表名><列名><类型>(2)删除原有的列用“……”语句,句法: <基本表名><列名> [│](3)修改原有列的类型、宽度的句法如下:<基本表名><列名><类型>183.2.3基本表的创建、修改和撤销(4)2.基本表结构的修改3.2.3基本表的创建、修改和撤销(5)例3.2 S(30);例3.3 S;例3.4S(6);193.2.3基本表的创建、修改和撤销(5)例3.2193.2.3基本表的创建、修改和撤销(6)基本表的撤销撤销语句的句法如下: <基本表名>[│]此处的、的语义同前面句法中的语义一样。例3.5需要撤销基本表S。但只有在没有视图或约束引用基本表S中的列时才能撤销,否则拒绝撤销。可用下列语句实现: S; 203.2.3基本表的创建、修改和撤销(6)基本表的撤销203.2.4索引的创建和撤销(1)索引的创建创建索引可用“”语句实现。其句法如下: []<索引名> <基本表名>(列名表)索引的撤消 当索引不需要时,可以用“”语句撤消,其句法如下: <索引名>213.2.4索引的创建和撤销(1)索引的创建213.2.4索引的创建和撤销(2)例3.6S();

(,);例3.7,;223.2.4索引的创建和撤销(2)例3.6223.3的数据查询3.3.1查询语句的基本结构3.3.2语句完整的结构3.3.3数据查询中的限制和规定3.3.4条件表达式中的比较操作3.3.5嵌套查询的改进写法3.3.6基本表的联接操作3.3.73中的递归查询233.3的数据查询3.3.1查询语句的基本结构233.3.1查询语句的基本结构(1)——句型 在关系代数中最常用的式子是下列表达式: πA1,…(σF(R1×…×))

针对上述表达式,为此设计了——句型: A1,…, R1,…, F243.3.1查询语句的基本结构(1)——句型243.3.1查询语句的基本结构(2)在子句的条件表达式F中可使用下列运算符:●算术比较运算符:<,<=,>,>=,=,<>或!=。●逻辑运算符:,,。●集合成员资格运算符:,。●谓词:,,,。●聚合函数:,,,,。●F中运算对象还可以是另一个语句,即语句可以嵌套。●另外,语句的查询结果之间还可以进行集合的并、交、差操作,其运算符是:,,。 语句能表达所有的关系代数表达式。253.3.1查询语句的基本结构(2)在子句的条件表达式F中可3.3.1查询语句的基本结构(3)句型使用实例例3.8教学数据中有四个基本表: T(,,) C(,,) S(,,,) (,,) 用户有一个查询语句:检索学习课程号为C2课程的学生学号与姓名。 这个查询要从基本表S和中检索数据,因此可以有下面三种写法。263.3.1查询语句的基本结构(3)句型使用实例263.3.1查询语句的基本结构(4)第一种写法(连接查询): ,

=='C2';第二种写法(嵌套查询): , S (

='C2');不相关子查询273.3.1查询语句的基本结构(4)第一种写法(连接查询):3.3.1查询语句的基本结构(5)第二种写法(嵌套查询)(另一种写法): ,S 'C2'(

=);第三种写法(使用存在量词的嵌套查询): ,S (* = ='C2');相关子查询283.3.1查询语句的基本结构(5)第二种写法(嵌套查询)(3.3.1查询语句的基本结构(6)例3.9对于教学数据库中四个基本表T、C、S、,下面用语句表达第2章中例2.6的各个查询语句。①检索学习课程号为C2的学生学号与成绩。 ,

='C2';②该语句已在例3.8中介绍过。293.3.1查询语句的基本结构(6)例3.9对于教学数据库3.3.1查询语句的基本结构(7)③检索至少选修老师所授课程中一门课程的学生学号与姓名。 , S,,C,T == ='';与②一样,本例也由多种写法,例如,嵌套查询写法。303.3.1查询语句的基本结构(7)③检索至少选修老师所授3.3.1查询语句的基本结构(8)④检索选修课程号为C2或C4的学生学号。

='C2'='C4';⑤检索至少选修课程号为C2和C4的学生学号。

X,Y ='C2' ='C4';313.3.1查询语句的基本结构(8)④检索选修课程号为C2或3.3.1查询语句的基本结构(9)⑥检索不学C2课程的学生姓名与年龄。 ,S ( 'C2');或者: , S

(*'C2');这个查询不能使用连接查询写法。323.3.1查询语句的基本结构(9)⑥检索不学C2课程的学3.3.1查询语句的基本结构(10)⑦检索学习全部课程的学生姓名。在表S中找学生,要求这个学生学了全部课程。换言之,在表S中找学生,在C中不存在一门课程,这个学生没有学。按照此语义,就可写出查询语句的表达方式: S /*C表中不存在一门课程*/ (*C /*该学生没有学*/ (* ));333.3.1查询语句的基本结构(10)⑦检索学习全部课程的3.3.1查询语句的基本结构(11)⑧检索所学课程包含学号为S3学生所学课程的学号。 ·在表中找一个学生(), ·不存在S3学的一门课(), ·该学生没有学。X /*不存在S3学的一门课*/ (*Y 'S3' /*该学生没有学*/ (* Z ));343.3.1查询语句的基本结构(11)⑧检索所学课程包含学 语句的图示形式(1)例3.10对于例3.9中的八个查询语句的图示形式如下所述。①检索学习课程号为C2的学生学号与成绩。图中“P.”(即)表示用户需要的数据,“C2”为常量。P.C2P.35 语句的图示形式(1)例3.10对于例3.9中的八个查询语语句的图示形式(2)②检索学习课程号为C2的学生学号与姓名。 图中,“”表示表格等值联接的条件。SP.C236语句的图示形式(2)②检索学习课程号为C2的学生学号与姓名语句的图示形式(3)检索至少选修老师所授课程中一门课程的学生学号与姓名。SP.CT37语句的图示形式(3)检索至少选修老师所授课程中一门课程SP语句的图示形式(4)④检索选修课程号为C2或C4的学生学号。⑤检索至少选修课程号为C2和C4的学生学号。P.C2P.C4C2

C438语句的图示形式(4)④检索选修课程号为C2或C4的学生学号语句的图示形式(5)⑥检索不学C2课程的学生姓名与年龄。⑦检索学习全部课程的学生姓名。SP.P.┐C2SCP.┐┐39语句的图示形式(5)⑥检索不学C2课程的学生姓名与年龄。语句的图示形式(6)⑧检索所学课程包含学生S3所学课程的学号。┐S3┐

40语句的图示形式(6)⑧检索所学课程┐S3┐403.3.2语句完整的结构(1) 1.聚合函数(*)计算元组的个数(列名)对一列中的值计算个数(列名)求某一列值的总和(此列的 值必须是数值型)(列名)求某一列值的平均值(此列 的值必须是数值型)(列名)求某一列值的最大值(列名)求某一列值的最小值413.3.2语句完整的结构(1) 1.聚合函数413.3.2语句完整的结构(2)例3.11①求男学生的总人数和平均年龄。 (*),() S 'M';②统计选修了课程的学生人数。 () ;423.3.2语句完整的结构(2)例3.11423.3.2语句完整的结构(3)2语句完整的句法如下:目标表的列名或列表达式序列基本表名和(或)视图序列[行条件表达式][列名序列[组条件表达式]][列名[],…]433.3.2语句完整的结构(3)2语句完整的句法如下:433.3.2语句完整的结构(4)整个语句的执行过程如下:(1)读取子句中基本表、视图的数据,执行笛卡儿积操作。(2)选取满足子句中给出的条件表达式的元组。(3)按子句中指定列的值分组,同时提取满足子句中组条件表达式的那些组。(4)按子句中给出的列名或列表达式求值输出。(5)子句对输出的目标表进行排序,按附加说明升序排列,或按降序排列。443.3.2语句完整的结构(4)整个语句的执行过程如下:43.3.2语句完整的结构(5)例3.12对教学数据库的基本表 T、C、S、中数据进行查询和计算。①统计每门课程的学生选修人数,要求显示课程号、课程名和学生人数。,,()C,

,;453.3.2语句完整的结构(5)例3.12对教学数据库3.3.2语句完整的结构(6)②求每一教师每门课程的学生选修人数(超过50人),要求显示教师工号、课程号和学生人数。显示时,查询结果按人数升序排列,人数相同按工号升序、课程号降序排列。 ,,() C,

, (*)>50 3,,;463.3.2语句完整的结构(6)②求每一教师每门课程的学3.3.3数据查询中的限制和规定(1)1.子句中的规定子句描述查询输出的表格结构,即输出值的列名或表达式。其形式如下: []<列名或列表达式序列>|*例3.13①在基本表中检索男同学选修的课程号。

S, 'M';②检索每个学生的出生年份。 ,,2006– S;473.3.3数据查询中的限制和规定(1)1.子句中的规定43.3.3数据查询中的限制和规定(2)2.列和基本表的改名操作例3.14在基本表S中检索每个学生的出生年份,输出的列名为和。 , 2006 S;483.3.3数据查询中的限制和规定(2)2.列和基本表的改名3.3.3数据查询中的限制和规定(3)3.集合的并、交、差操作(查询语句1) (查询语句1)

(查询语句2) (查询语句2)(查询语句1) (查询语句1)

(查询语句2) (查询语句2)(查询语句1) (查询语句1)

(查询语句2) (查询语句2)493.3.3数据查询中的限制和规定(3)3.集合的并、交、3.3.4条件表达式中的比较操作(1)运算符名称符号及格式说明算术比较判断<表达式1>θ<表达式2>比较两个表达式的值之间判断<表达式1>[]<表达式2><表达式3>搜索(不)在给定范围内的数据相同判断<字符串>[]<匹配模式>查找(不)包含给定模式的值空值判断<表达式>[]判断某值是否为空值之内判断<元组>[](<集合>)判断某元组是否在某集合内限定比较判断<元组>θ(<集合>)元组与集合中每(某)一个元组满足θ比较存在判断[](<集合>)判断集合是否至少存在一个元组惟一判断[](<集合>)判断集合是否没有重复元组503.3.4条件表达式中的比较操作(1)运算符符号及格式说3.3.4条件表达式中的比较操作(2)1.算术比较操作条件表达式中可出现θ符(<,<=,>,>=,=,!=),也可以用“……”比较运算符限定一个值的范围。例3.15在基本表S中检索18~20岁的学生姓名。 S >=18<=20;若使用“……”,就更容易理解了: S 1820;513.3.4条件表达式中的比较操作(2)1.算术比较操作53.3.4条件表达式中的比较操作(3)2.字符串的匹配操作 条件表达式中字符串匹配操作符是“”。 在表达式中可使用两个通配符:百分号(%):与零个或多个字符组成的字符串匹配。下划线(_):与单个字符匹配。例3.16在S中检索以字符D打头的学生姓名。

S '';523.3.4条件表达式中的比较操作(3)2.字符串的匹配操3.3.4条件表达式中的比较操作(4)3.空值的比较操作中允许列值为空,空值用关键字表示。例3.17在表S中检索年龄为空值的学生姓名。

S ;在聚合函数中遇到空值时,除了(*)外,都跳过空值而去处理非空值。533.3.4条件表达式中的比较操作(4)3.空值的比较操作3.3.4条件表达式中的比较操作(5)4.集合成员资格的比较 其形式如下: 元组(集合) 元组(集合)例3.18在基本表S和中检索至少不学C2和C4两门课程的学生学号。S( ('C2','C4'));543.3.4条件表达式中的比较操作(5)4.集合成员资格的3.3.4条件表达式中的比较操作(6)5.集合成员的算术比较其形式如下: 元组θ(集合) 元组θ(集合)这里应该注意,元组比较操作与字符串比较类似。例如(a1,a2)<=(b1,b2),其意义与(a1<b1)((a1=b1)(a2<=b2))等价。553.3.4条件表达式中的比较操作(6)5.集合成员的算术3.3.4条件表达式中的比较操作(7)例3.19对基本表S、、C的数据进行检索。①检索学C2课程的学号与姓名。,S=( ='C2');②检索至少有一门成绩超过学生S4一门成绩的学生学号。

>( 'S4');563.3.4条件表达式中的比较操作(7)例3.19对基本表3.3.4条件表达式中的比较操作(8)③检索不学C2课程的学生姓名与年龄。 ,S <>('C2');④检索平均成绩最高的学生学号。

>= (());573.3.4条件表达式中的比较操作(8)③检索不学C2课程3.3.4条件表达式中的比较操作(9)6.集合空否的测试其形式如下: (集合) (集合)这些操作在例3.8、例3.9中已使用过,此处不再举例。583.3.4条件表达式中的比较操作(9)6.集合空否的测试53.3.4条件表达式中的比较操作(10)7.集合中重复元组存在否的测试形式如下: (集合) (集合)例3.20在基本表T和C中检索只开设了一门课程的教师工号和姓名。 ,T (C =);593.3.4条件表达式中的比较操作(10)7.集合中重复元组3.3.5嵌套查询的改进写法(1)1.导出表的使用2允许在子句中使用子查询。如果在子句中使用了子查询,那么要给子查询的结果起个表名和相应的列名。例3.21在基本表中检索平均成绩超过80分的学生学号和平均成绩。603.3.5嵌套查询的改进写法(1)1.导出表的使用603.3.5嵌套查询的改进写法(2)

()>= (() );

,(())()

()>=();例3.19④例3.21613.3.5嵌套查询的改进写法(2)例3.19④例33.3.5嵌套查询的改进写法(3)2.子句和临时视图3允许用户用子句定义一个临时视图(即子查询),置于语句的开始处。而临时视图本身是用语句定义的。例3.22 () ()

()>= ();623.3.5嵌套查询的改进写法(3)2.子句和临时视图623.3.6基本表的连接操作(1)图3.10连接类型和连接条件连接类型连接条件

(内连接)(应写在连接类型的左边)

(左外连接)等值连接条件(应写在连接类型的右边)

(右外连接)(A1,A2,…,)(应写在连接类型的右边)

(完全外连接)633.3.6基本表的连接操作(1)图3.10连接类型和3.3.6基本表的连接操作(2)E1:RSE2:RS ==E3:RS(B)(a)关系R(b)关系S(c)E1ABCBCDABCDa1b1c1b1c1d1a1b1c1d1a2b2c2b2c2d2a2b2c2d2a3b3c3b4c4d4a3b3c3(d)E2(f)E3ADABDa1b1c1b1c1d1a1b1c1c1d1a2b2c2b2c2d2a2b2c2c2d2a3b3c3a3b3c3643.3.6基本表的连接操作(2)E1:R3.3.73中的递归查询(1)例3.24设课程之间有先修与后继的联系,其关系模式如下: (,,)设临时视图(,)的属性表示课程号、直接或间接先修课的课程号。求,可以利用这样两个规则:①()←()②()←()∧()653.3.73中的递归查询(1)例3.24设课程之间有3.3.53中的递归查询(2)(,) ① ((,) ② ③ (, ④ , ⑤ =) ⑥ *; ⑦663.3.53中的递归查询(2)(,) ①663.4数据更新3.4.1的数据插入3.4.2的数据删除3.4.3的数据修改673.4数据更新3.4.1的数据插入673.4.1数据插入(1)(1)单元组的插入基本表名[(列名表)](元组值)(2)多元组的插入基本表名[(列名表)] (元组值),(元组值),……,(元组值)(3)查询结果的插入基本表名[(列名表)]<查询语句>这个语句可把语句的查询结果插到基本表中。(4)表的插入基本表名1[(列名表)]基本表名2这个语句可把基本表2的值插入到基本表1中。683.4.1数据插入(1)(1)单元组的插入683.4.1数据插入(2)例3.25往基本表中插入元组的若干例子。① S(,,,) ('S36','',20,'M');② (,) ('S5','C8');③ ('S4','C4',85), ('S3','C6',90), ('S7','C2',70);693.4.1数据插入(2)例3.25往基本表中插入元组的3.4.1数据插入(3)④(,) ()

(S='M')

()>80;⑤(,) 4;703.4.1数据插入(3)④(,)703.4.2数据删除(1)的删除操作是指从基本表中删除元组,其句法如下: 基本表名 [条件表达式] 其语义是从基本表中删除满足条件表达式的元组。应该注意,语句只能从一个基本表中删除元组。子句中条件可以嵌套,也可以是来自几个基本表的复合条件。713.4.2数据删除(1)的删除操作是指从基本表中删除元组3.4.2数据删除(2)例3.26把课程名为的成绩从基本表中删除,

(C ='');把C4课程中小于该课程平均成绩的成绩元组从基本表中删除。

='C4' <(() ='C4');723.4.2数据删除(2)例3.26把课程名为的成绩从基3.4.3数据修改(1)当需要修改基本表中元组的某些列值时,可以用语句实现,其句法如下:基本表名 列名=值表达式[,列名=值表达式…] │=(元组) [条件表达式]其语义是:修改基本表中满足条件表达式的那些元组中的列值,需修改的列值在子句中指出。733.4.3数据修改(1)当需要修改基本表中元组的某些列3.4.3数据修改(2)例3.27对基本表和C中的值进行修改。①把C5课程的课程名改为。 C ='' ='C5';②把女同学的成绩提高10%。

=*1.1 (S ='F');743.4.3数据修改(2)例3.27对基本表和C中的值进3.4.3数据修改(3)③当C4课的成绩低于该门课程平均成绩时,提高5%。

=*1.05 ='C4' <(() ='C4');④在C中,把课程号为C5的元组修改为(C5): C =('C5','','') ='C5';753.4.3数据修改(3)③当C4课的成绩低于该门课程平均3.5视图的定义和对视图的操作3.5.1视图的创建和撤消3.5.2对视图的更新操作3.5.3视图的优点763.5视图的定义和对视图的操作3.5.1视图的创建和撤3.5.1视图的创建和撤消(1)视图的创建 其句法如下: <视图名>(列表名) <查询语句>例3.28() ,,, S,,C ==;773.5.1视图的创建和撤消(1)视图的创建773.5.1视图的创建和撤消(2)视图的撤消在视图不需要时,可以用“”语句把其从系统中撤消。其句法如下: 视图名例3.29撤消视图,可用下列语句实现: ;783.5.1视图的创建和撤消(2)视图的撤消783.5.2对视图的操作(1)在视图定义以后,对于视图的查询()操作,与基本表一样,没有什么区别。但对于视图中元组的更新操作就不一样了。定义3.1如果视图是从单个基本表只使用选择、投影操作导出的,并且包含了基本表的主键,那么这样的视图称为“行列子集视图”,并且可以被执行更新操作。允许用户更新的视图在定义时必须加上“”短语。793.5.2对视图的操作(1)在视图定义以后,对于视图的查3.5.2对视图的操作(2)例3.30如果定义了一个有关男学生的视图:

S ='M'; 这个视图是行列子集视图,是可更新的。譬如,执行插入操作:

('S28','',18);系统自动会把它转变成下列语句: S ('S28','',18,'M');803.5.2对视图的操作(2)例3.30如果定义了一个有3.6嵌入式语言有两种使用方式:一种是在终端交互方式下使用,称为交互式;另一种是嵌入在高级语言的程序中使用,称为嵌入式,而这些高级语言可以是C、、、或等,称为宿主语言。3.6.1嵌入式的实现方式3.6.2嵌入式的使用规定3.6.3嵌入式的使用技术3.6.4动态语句813.6嵌入式语言有两种使用方式:一种是在终端交互方式下3.6.1嵌入式的实现方式图3.12源程序处理过程源程序(用主语言和嵌入式SQL编写)预处理过的源程序(嵌入的SQL语句已转换成函数调用形式)预处理程序宿主语言编译程序

目标程序

SQL函数定义库823.6.1嵌入式的实现方式图3.12源程序处理过程源程3.6.2嵌入式的使用规定在程序中要区分语句与宿主语言语句。允许嵌入的语句引用宿主语言的程序变量(称为共享变量)。的集合处理方式与宿主语言单记录处理方式之间的协调。(1)游标定义语句()。(2)游标打开语句()。(3)游标推进语句()。(4)游标关闭语句()。833.6.2嵌入式的使用规定在程序中要区分语句与宿主语言语3.6.3嵌入式的使用技术语句,只要加上前缀标识“”和结束标志“”,就能嵌入在主语言程序中使用。语句在嵌入使用时,要注意是否使用了游标机制。下面就是否使用游标分别介绍的嵌入使用技术。不涉及游标的语句涉及游标的语句卷游标的定义和推进843.6.3嵌入式的使用技术语句,只要加上前缀标识“”和1.不涉及游标的语句(1)如果是、和语句,那么加上前缀标识“”和结束标志“”,就能嵌入在宿主语言程序中使用。对于语句,如果已知查询结果肯定是单元组时,在加上前缀和结束标志后,也可直接嵌入在主程序中使用,此时应在语句增加一个子句,指出找到的值应送到相应的共享变量中去。851.不涉及游标的语句(1)如果是、和语句,那么加上前缀标1.不涉及游标的语句(2)①

s =;②s() ();③ =(s =);861.不涉及游标的语句(2)①861.不涉及游标的语句(3)④把课程名为的成绩增加某个值(该值在共享变量中给出):

=+

(c ='');871.不涉及游标的语句(3)④把课程名为的成绩增加某个值82.涉及游标的语句(1)语句的使用方式 当语句查询结果是多个元组时,此时宿主语言程序无法使用,一定要用游标机制把多个元组一次一个地传送给宿主语言程序处理。(2)对游标指向元组的修改或删除操作 在游标处于活动状况时,可以修改或删除游标指向的元组。882.涉及游标的语句(1)语句的使用方式88例3.32在基本表中检索某学生(学号由共享变量给出)的学习成绩信息(,,)。

!((,〞02000〞))(){; [5],[5],[5]; g; [6];;

,, =;89例3.32在基本表中检索某学生(学号由共享变量给出)的学习;(1) { ,,;();(〞,,〞,,,g);};}90;90例3.33如果对找到的成绩作如下处理:删除不及格的成绩,

60~69分的成绩修改为70分,再显示该学生的成绩信息。(1){ ,,;();(g<60)

{(g<70) {=70 ; g=70; } (〞,,〞,,,g); }}91例3.33如果对找到的成绩作如下处理:删除不及格的成绩,

3.卷游标的定义和推进(1)(1)卷游标的定义句法如下:〈游标名〉 〈语句〉

(2)卷游标的推进句法如下:EXECSQLFETCH

NEXTPRIORFIRSTLASTRELATIVE<整数>ABSOLUTE<整数>FROM〈游标名〉INTO〈变量表〉END_EXEC923.卷游标的定义和推进(1)(1)卷游标的定义句法如下:E3.卷游标的定义和推进(2)这里,表示把游标从当前位置推进一行; 表示把游标从当前位置返回一行; 表示把游标移向查询结果的第一行; 表示把游标移向查询结果的最后一行。后两种句法举例说明:3把游标从当前位置推进3行;–5把游标从当前位置返回5行;4把游标移向查询结果的第4行;–6把游标移向查询结果的倒数第6行。933.卷游标的定义和推进(2)这里,表示把游标从当前位置3.6.4动态语句(1)动态预备语句〈动态语句名〉 〈共享变量或字符串〉

这里共享变量或字符串的值应是一个完整的语句。这个语句可以在程序运行时由用户输入才组合起来。此时,这个语句并不执行。943.6.4动态语句(1)动态预备语句943.6.4动态语句(2)动态执行语句 〈动态语句名〉 动态语句使用时,还可以有两点改进:(1)当预备语句中组合而成的语句只需执行一次时,那么预备语句和执行语句可合并成一个语句:〈共享变量或字符串〉(2)当预备语句中组合而成的语句的条件值尚缺时,可以在执行语句中用短语补上: <动态语句名> <共享变量>953.6.4动态语句(2)动态执行语句953.6.4动态语句(3)例3.34下面两个C语言的程序段说明了动态语句的使用技术。①; *; ; (〞〞);/*从键盘输入语句*/ ; ;如果执行语句只做一次,那么程序段最后两个语句可合并成一个语句: ;963.6.4动态语句(3)例3.34下面两个C语言的程序3.6.4动态语句(4)②*=〞 =*1.1 =?〞;;[5]=〞C4〞;;

973.6.4动态语句(4)②*=〞973.7存储过程与是一种非过程性语言,有很强的表达能力。随着基于数据库的应用逻辑日益复杂,在应用中仅仅使用顺序执行的语句序列表现出很大的局限性。减少局限性的方法之一是使用标准的存储过程()和(,持久存储模块)技术。983.7存储过程与是一种非过程性语言,有很强的表达能力。随着3.7.1数据库存储过程与函数(1)定义3.2存储过程是使用语句和流程控制语句编写的模块,存储过程经编译和优化后存储在数据库服务器端的数据库中,使用时调用即可。使用存储过程具有以下优点:(1)提高运行速度。(2)增强了的功能和灵活性。(3)可以降低网络的通信量。(4)减轻了程序编写的工作量。(5)间接实现安全控制功能。993.7.1数据库存储过程与函数(1)定义3.2存储过程是3.7.1数据库存储过程与函数(2)声明存储过程的一般形式如下: <过程名>(<参数>) <局部声明> <过程体>;声明函数的一般形式如下: <函数名>(<参数>) <返回类型> <局部声明> <函数体>;1003.7.1数据库存储过程与函数(2)声明存储过程的一般形式3.7.1数据库存储过程与函数(3)如果过程(或函数)用通用程序设计语言编写,则要指定语言和存储程序代码的文件名。例如,可使用以下形式: <过程名>(<参数>) <程序设计语言名> <文件路径名>;可以使用标准中的语句来调用存储过程,可以从交互式界面调用,也可以由嵌入式调用。该调用语句的形式如下: <过程名>(<参数列表>);1013.7.1数据库存储过程与函数(3)如果过程(或函数)用通3.7.2(1)是标准的一部分,它指定了如何编写持久存储模块,提供流程控制语句来表示过程处理的应用逻辑。1.顺序执行2.条件分支语句 <条件><语句列表> <条件><语句列表> …… <条件><语句列表> <语句列表> ;3.循环语句1023.7.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论