数据库系统原理及应用 丁忠俊 第三章 关系DB的标准语言SQL.ppt

上传人:hwp****526 文档编号:84416998 上传时间:2023-04-05 格式:PPT 页数:44 大小:301.50KB
返回 下载 相关 举报
数据库系统原理及应用 丁忠俊 第三章 关系DB的标准语言SQL.ppt_第1页
第1页 / 共44页
数据库系统原理及应用 丁忠俊 第三章 关系DB的标准语言SQL.ppt_第2页
第2页 / 共44页
点击查看更多>>
资源描述

《数据库系统原理及应用 丁忠俊 第三章 关系DB的标准语言SQL.ppt》由会员分享,可在线阅读,更多相关《数据库系统原理及应用 丁忠俊 第三章 关系DB的标准语言SQL.ppt(44页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、 第三章第三章 关系关系DB的标准语言的标准语言SQLSQL的数据定义:基本表的数据定义:基本表,视图视图,索引索引SQL的数据查询(重点)的数据查询(重点)SQL的数据更新的数据更新内容:内容:第一节第一节SQL(Structured Query Language)基本简介)基本简介 SQL起源于起源于1974年,作为关系年,作为关系DB的标准语言,用于:的标准语言,用于:ORACLE,SQL/DB,DB2等中。等中。标准版本:标准版本:SQL89SQL2(92年)年)SQL3(正在修改)。(正在修改)。一、一、SQL的特点的特点1.1.集集DBDB定定义义,操,操纵纵,控制功能于一体。,控

2、制功能于一体。2.2.高度非高度非过过程化。程化。3.3.面向集合的操作方式。面向集合的操作方式。4.4.提供两种用方式:交互式和嵌入式。提供两种用方式:交互式和嵌入式。5.5.语语言言简洁简洁,易学易用。,易学易用。二、二、SQL结构结构 基本表(基本表(Base Table)关系模式关系模式支持支持DB的三级模式的结构:的三级模式的结构:视图(视图(View)子模式子模式 存储文件(存储文件(Stored File)存储模式存储模式其中:元组称为行(其中:元组称为行(row),属性称为列(),属性称为列(column)。)。(1)SQL中的基本表对应中的基本表对应DB中的一个关系,一行对应

3、一个元组,一列对中的一个关系,一行对应一个元组,一列对 应一个属性值域。应一个属性值域。(2)SQL中的视图由基本表或视图导出;基本表是实际存储在中的视图由基本表或视图导出;基本表是实际存储在DB中的表中的表,视图是虚表,它的数据仍在导出的基本表中,它的定义存在数据字典中。视图是虚表,它的数据仍在导出的基本表中,它的定义存在数据字典中。(3)一个基本表可以跨一个或多个存储文件,一个存储文件也可以存放一)一个基本表可以跨一个或多个存储文件,一个存储文件也可以存放一 个或多个基本表;每一个存储文件对应外存上一个物理文件。个或多个基本表;每一个存储文件对应外存上一个物理文件。(4)用户可用)用户可用

4、SQL语句对视图和基本表作查询等操作。在用户来看视图与语句对视图和基本表作查询等操作。在用户来看视图与 基本表都是关系。基本表都是关系。(5)SQL的语句既可交互使用,也可嵌套到宿主语言的程序中使用。的语句既可交互使用,也可嵌套到宿主语言的程序中使用。结构要点:结构要点:三、三、SQL的构成的构成数据定义(数据定义(SQL DDL):用于定义基本表、视图、索引等。):用于定义基本表、视图、索引等。数据操纵(数据操纵(SQL DML):用于对):用于对DB的查询和更新等操作。的查询和更新等操作。数据控制:包括对基本表和视图的授权,数据控制:包括对基本表和视图的授权,完整性规则的完整性规则的 描述

5、、事务控制等。描述、事务控制等。嵌入式嵌入式SQL的使用规定。的使用规定。4个部分个部分构成:构成:第二节第二节 SQL的数据定义的数据定义包括:定义和撤消包括:定义和撤消基本表(基本表(table)视图(视图(view)索引(索引(index)完整性约束完整性约束一、基本表的创建、修改和撤消一、基本表的创建、修改和撤消1SQL提供的主要数据类型提供的主要数据类型(1)数值型)数值型 (2)字符串型)字符串型 INTEGER(或(或INT)长整型)长整型 CHAR(n)长度为)长度为n的定长字符串的定长字符串 SMALLINT 短整型短整型 VARCHAR(n)具有最大长度)具有最大长度n R

6、EAL 浮点型(取决于机器)浮点型(取决于机器)可变字符串可变字符串 FLOAT(n)浮点型精度为浮点型精度为n位位 NCMERIC(P,d)定点数(定点数(p位数字,位数字,小数点后小数点后d位)位)(3)位串型)位串型 (4)时间型)时间型 BIT(N)长度为)长度为N的二进制的往事。的二进制的往事。DATE 日期:日期:YYYYMMDD TIME 时间:时:分:秒时间:时:分:秒HH:MM:SS算术操作仅限于数值型的数据。算术操作仅限于数值型的数据。2基本表的创建,修改和撤消基本表的创建,修改和撤消(1)创建基本表)创建基本表 句型:句型:Create Table基本表名(列名基本表名(

7、列名 类型类型 列完整性约束列完整性约束,)主关键字子(主关键字子(PRIMARY KEY)其中:完整性约束定义其中:完整性约束定义 有三种子句:有三种子句:检查子句检查子句 (CHECK)外关键字子句(外关键字子句(FOREIGN KEY)例:教学例:教学DB中有三个关系模式:中有三个关系模式:S(sno,sname,sex,age,dept)Sc(sno,cno,grade)C(cno,cname,credit)定义其基本表。定义其基本表。Create table s(sno CHAR(5)NOT NULL UNIQUE,sname CHAR(8),),sex CHAR(2),),age

8、INT,dept CHAR(6)primary KEY(sno));Create table sc(sno CHAR(5),cno CHAR(4),grade SMALLINT,PRIMARY KEY(sno,cno),),FOREIGN KEY(cno)REFERENCES C(cno),),FOREIGN KEY(sno)REFERENCES S(sno),),CHECK ((grade IS NULL)OR (grade BETWEEN 0 AND 100));其基本表定义如下:其基本表定义如下:表表C定义略定义略(2)基本表结构的修改)基本表结构的修改增加新的属性:增加新的属性:ALT

9、ER TABLE 基本表名基本表名 ADD 列名列名 类型类型 例:例:ALTER TABLE S ADD PHON CHAR(8)删除原有的属性删除原有的属性:ALTER TABLE 基本表名基本表名 DROP CASCADE|RESTRICT 其中:其中:CASCADE:所有引用该列的视图和约束也要一起被删除。所有引用该列的视图和约束也要一起被删除。RESTRICT:只有视图和约束没有引用该属性时,才能删除,:只有视图和约束没有引用该属性时,才能删除,否则拒绝。否则拒绝。例:例:ALTER TABLE S DROP age CASCADE;(3)基本表的撤消)基本表的撤消 句型:句型:DR

10、OP TABLE 基本表名;基本表名;例:例:DROP TABLE S;三、视图的创建与撤消三、视图的创建与撤消 视图:外模式(子模式):由基本表或其它已建视图构造出视图:外模式(子模式):由基本表或其它已建视图构造出的表。的表。(1)视图的创建)视图的创建 句型:句型:Create View 视图名(列名表)视图名(列名表)AS SELECT 查询子句查询子句 例:若用户经常用到例:若用户经常用到sno,sname,cname和和grade信息,则建立视信息,则建立视图供查询图供查询 Create View Sg(sno,sname,cname,grade)As select ssno,sn

11、ame,cname,grade from s,sc,c where ssno=scsno And o=o;(2)视图撤消)视图撤消句型:句型:DROP View 视图名视图名四、索引的创建及撤消四、索引的创建及撤消 建立索引的目的,加快对关系的查找。(浪费外存空间)建立索引的目的,加快对关系的查找。(浪费外存空间)在基本表上可建立一个或多个索引,索引存在存储文件中称索引文件。在基本表上可建立一个或多个索引,索引存在存储文件中称索引文件。句型:句型:Create UNIQUE INDEX 索引名索引名 ON 基本表名(列名)基本表名(列名)例:例:Create index SI ON S(sno

12、)按)按sno升序排列升序排列 Create Unique index SI ON S(sno););sno中值对应唯一的记录值中值对应唯一的记录值 Create Unique index SCI ON SC(sno ASC,cno DESC)索引定义的结构存在数据字典库中,学号按升序排列,索引定义的结构存在数据字典库中,学号按升序排列,CNO值按降序排列。值按降序排列。索引的撤消:索引的撤消:DROPindex 索引名索引名例:例:DROP index SI;第三节第三节 SQL的数据查询的数据查询数据查询是数据查询是DB中最重要,最基本的操作。查询操作是更新操作的基础。中最重要,最基本的操

13、作。查询操作是更新操作的基础。查询功能的强弱直接影响查询功能的强弱直接影响DB使用性能。使用性能。一、一、select查询语句的句型查询语句的句型 select目标表的属性名或目标列表达式目标表的属性名或目标列表达式 from表名或视图名表名或视图名 from子句子句 where行条件表达式行条件表达式 行条件子句行条件子句 group by列名列名1having条件表达式条件表达式 列条件子句列条件子句 order by列名列名2asc|desc 排序子句排序子句执行过程执行过程根据根据where子句的条件表达式,从子句的条件表达式,从from子句指定的基本表或视图中找出满足条件子句指定的基

14、本表或视图中找出满足条件的元组,再按的元组,再按select子句中的目标列表达式,选出元组中的属性值形成结果表。子句中的目标列表达式,选出元组中的属性值形成结果表。如果有如果有group子句,将结果按子句,将结果按列名列名1的值进行分组,列值相等的元组分为一组,的值进行分组,列值相等的元组分为一组,每一组会产生结果表中的一条记录。每一组会产生结果表中的一条记录。having子句将满足条件的组给出输出。子句将满足条件的组给出输出。order子句对输出的目标表按子句对输出的目标表按asc升序或升序或desc降序排列。降序排列。select基本句型基本句型 select A1,A2,An (属性名(

15、属性名Ai)from R1,R2,Rn(关系名或视图名(关系名或视图名Ri)A1,A2,An A1,A2,An(F F (R1(R1 R2R2 RnRn)where F (逻辑表达式(逻辑表达式F)其中:其中:F可使用以下运算符可使用以下运算符算术比较符:算术比较符:,=,=,或!或!=逻辑符:逻辑符:AND,OR,NOT集合运算符:集合运算符:union(并),(并),intersect(交),(交),except(差),(差),IN(属于)(属于)谓词:谓词:exists(存在量词),(存在量词),all,any(some),unique(唯一),(唯一),LIKEF,中还可以是,中还可以

16、是select子句(嵌套)子句(嵌套)使用的函数:使用的函数:avg(列名):求平均值(列名):求平均值 min(列名):求最小值(列名):求最小值 max(列名):求最大值(列名):求最大值 sum(列名):求和(列名):求和 count(列名):求列中值的个数(列名):求列中值的个数 count(*):求元组个数):求元组个数二、二、SELSCT语句的使用语句的使用 单表查询单表查询 多表关联查询(嵌套查询)多表关联查询(嵌套查询)集合查询集合查询1、单表查询、单表查询例:教学例:教学DB三个基本表:三个基本表:s(sno,sname,sex,age,dept):学号,姓名,性别,年龄,系

17、名):学号,姓名,性别,年龄,系名 c(cno,cname,pno,credit):课号,课名,先修课名,学分:课号,课名,先修课名,学分 sc(sno,cno,grade):学号,课号,成绩:学号,课号,成绩列上查询列上查询例例1:查询学生的学号,姓名和系名:查询学生的学号,姓名和系名 select sno,sname,dept from s;例例2:查询全部学生的详细情况:查询全部学生的详细情况 select *from s;例例3:查询全部学生的姓名及出生年份:查询全部学生的姓名及出生年份 select sname,2003-age from s;结果:结果:sname 2003-age

18、 李一李一 1981 刘二刘二 1982 王三王三 1983例例4:查询全部学生的姓名,出生年份和系名:查询全部学生的姓名,出生年份和系名要求:指定别名改变查询结果的列标题要求:指定别名改变查询结果的列标题select sname NAME,2003-age BIRTHDAY,ISLOWER(dept)DEPARTMENTfrom s;结果:结果:NAME BIRTHDAY DEPARTMENT李一李一 1981 cs刘二刘二 1982 is王三王三 1983 ma行上查询行上查询例例1:查询所有选修课程的学生的学号。:查询所有选修课程的学生的学号。Select distinct sno fr

19、om SC;例例2:查找成绩不及格的学生的学号及课号。:查找成绩不及格的学生的学号及课号。select distinct sno,cnofrom scwhere grade=90 AND grade3;(结果分组查询)(结果分组查询)Sno Cno dept 1 1 IS 1 2 IS 1 3 IS 1 4 IS 2 1 IS 2 2 IS 2 3 IS 2 4 IS2、关联查询、关联查询多个表联接查询多个表联接查询等值与非等值的连接查询等值与非等值的连接查询a等值连接查询:等值连接查询:b笛卡尔积的连接笛卡尔积的连接 c自然连接自然连接Select s,sc select s,sc sele

20、ct sno,sname,sex,dept,cno,gradefrom s,sc from s,sc from s,sc where ssno=sc sno where s sno=sc snoSnosnamesexagedept200012000220003王一王一刘二刘二李三李三男男女女男男191820CSISMA设:设:SnoCno grade2000120001200012000220002123238085908090SSCa、等值连接结果:、等值连接结果:SSnoSnamesexagedeptSCSnoCnograde2000120001200012000220002王一王一王一王

21、一王一王一刘二刘二刘二刘二男男男男男男女女女女1919191818CSCSCSISIS2000120001200012000220002123238085908090b、笛卡尔积连接结果产生:、笛卡尔积连接结果产生:35=15个元组,产生无意义的元组,因此,个元组,产生无意义的元组,因此,该连接很少使用。该连接很少使用。c、自然连接的结果,只是去掉重复的、自然连接的结果,只是去掉重复的sno.sno sname sex dept cno grade 自身连接自身连接例:查找至少选择选修课程号为例:查找至少选择选修课程号为“1”号和为号和为“2”号的学生的学号。号的学生的学号。select xs

22、no from SC x,SC ywhere xsno=ysno AND xcno=1 AND ycno=2;结果:结果:xsno 20001外连接外连接 为外连接符(或为外连接符(或+):它可将一些为空值列连接到结果表中。):它可将一些为空值列连接到结果表中。将将中中C改写为外连接改写为外连接select sno,sname,sex,dept,cno,gradefrom s,scwhere ssno=scsno();注:注:*出现连接符的右边称左外连接出现连接符的右边称左外连接 *出现连接符的左边称右外连接出现连接符的左边称右外连接snosnamesexdeptcnograde2000120

23、00120001200022000220003王一王一王一王一王一王一刘二刘二刘二刘二李三李三男男 男男男男女女女女男男CSCSCSISISMA123238085908090结果:结果:嵌套结构的查询嵌套结构的查询例:查询选修课程号为例:查询选修课程号为“2”的学生姓名与学号的学生姓名与学号a.Select ssno,ssname (涉及表(涉及表s和和sc连接查找):连接查找):from s,sc s(sno,sname,sex,age,dept)where ssno=scsno AND cno=2;sc(sno,cno,grade)b.写法:写法:Select sno,sname(嵌套查询

24、结构)(嵌套查询结构)from s where sno IN(select sno from sc where cno=2);注:嵌套结构层次分明,具有结构化程序设计特点注:嵌套结构层次分明,具有结构化程序设计特点 嵌套结构比不嵌套结构查询效率高(因先作选择)嵌套结构比不嵌套结构查询效率高(因先作选择)子查询中不能出现子查询中不能出现order by子句,即不能针对子查询排序。子句,即不能针对子查询排序。c.写法(使用存在量词的嵌套查询)写法(使用存在量词的嵌套查询)select sno,sname from s where EXISTS(select from SC where SCSno=

25、SSno AND Cno=2);例:查找选修了课程名为例:查找选修了课程名为“信息系统信息系统”的学生学号与姓名的学生学号与姓名 select sno,sname from s where sno IN (select sno from sc where cno IN (select cno from c where(cname=信息系统信息系统);涉及:三个表:涉及:三个表:s(sno,sname,sex,age,dept)sc(sno,cno,grade)c(cno,cname,pno,credit)例:查找其他系中比例:查找其他系中比IS系任何学生年龄小的学生名单系任何学生年龄小的学生名

26、单 select sname,age from s where age ALL(select age from s where dept=IS)AND deptIS Order by age DESC;例:查询选修了全部课程的学生姓名例:查询选修了全部课程的学生姓名Select snamefrom swhere NOT EXISTS(select from c where NOT EXISTS (select from sc where sc.sno=ssno AND o=ccno);(1)涉及涉及s,sc,c三个表三个表(2)SQL无全程量词无全程量词 运算符,因此将题意运算符,因此将题意转

27、化为等价的存在量词的形式,查询这样转化为等价的存在量词的形式,查询这样的学生姓名,没有一门课是他不选的。的学生姓名,没有一门课是他不选的。(x x)pp(x(x(p)例:查找至少有一门课的成绩超过学号为例:查找至少有一门课的成绩超过学号为20002的一门课成绩的学生学号的一门课成绩的学生学号 select distinct sno from sc where grade some(select grade from sc where sno=20002)3.集合查询集合查询 例:查找计算机系的学生及年龄不大于例:查找计算机系的学生及年龄不大于19岁的学生岁的学生 实际求计算机系的所有学生与年龄

28、不大于实际求计算机系的所有学生与年龄不大于19岁其它系的学生的并集岁其它系的学生的并集 select from s where dept=cs UNION Select from s where age=19;第四节第四节 SQL的数据更新的数据更新数据插入数据插入数据删除数据删除数据修改数据修改更新包括:更新包括:一、数据插入一、数据插入元组值的插入元组值的插入查询结果的插入查询结果的插入包括:包括:1、元组值的插入、元组值的插入 一般句型:一般句型:INSERT INTO 基本表名(列名表基本表名(列名表)VALUES(元组值元组值)一次一次 仅插入一个元组仅插入一个元组 或或 INSER

29、T INTO 基本表名(列名表)基本表名(列名表)(TABLE(元组值),(元组值),(元组值),(元组值),)一次插入多个元组一次插入多个元组 如:如:INSERT INTO SC(TABLE(20005,1,85),),(20005,2,90),),(20005,3,95)2、查询结果的插入、查询结果的插入 一般句型:一般句型:INSERT INTO 基本表名(列名表)基本表名(列名表)SELECT 查询语句查询语句把当前表中满足条件的元组把当前表中满足条件的元组送到已存在的表中。送到已存在的表中。如:从基本表如:从基本表SC中,把平均成绩中,把平均成绩 80的男学生的学号和平均成绩存的男

30、学生的学号和平均成绩存入另一个入另一个 已知的基本表已知的基本表SG(sno,sg1)中:)中:INSERT INTO SG(sno,sg1)SELECT sno,AVG(grade)FROM SC WHERE sno IN(SELECT sno FROM S WHERE SEX=男男)GROUP BY sno HAVING AVG(grade)80;二、数据的删除二、数据的删除 一般句型:一般句型:DELETE FROM 基本表名基本表名 WHERE 条件表达式条件表达式 从一个基本表中删除满足条件的元组从一个基本表中删除满足条件的元组例:删除例:删除SC中中1号课程中小于该课程平均成绩的成

31、绩元组号课程中小于该课程平均成绩的成绩元组 DELETE FROM SC WHERE cno=1AND grade(SELECT AVG(grade)FROM SC WHERE cno=1);三、数据的修改三、数据的修改 修改基本表中元组的某些列值修改基本表中元组的某些列值 一般句型:一般句型:UPDATE 基本表名基本表名 SET 列名列名=值表达式值表达式,列名,列名=值表达式,值表达式,WHERE 条件表达式条件表达式例:将女同学的成绩提高例:将女同学的成绩提高10%UPDATE SC SET grade=grade11 WHERE sno IN(select sno from s wh

32、ere sex=女女)四、视图的更新操作四、视图的更新操作1、视图的概念、视图的概念视图从一个或多个基本表(或已定义的视图)导出的表,提供视图从一个或多个基本表(或已定义的视图)导出的表,提供给用户查询给用户查询DB中数据使用。中数据使用。视图是一个虚表,它的框架定义的属性存于数据字典库中,其视图是一个虚表,它的框架定义的属性存于数据字典库中,其数据仍在原来基本表中。数据仍在原来基本表中。视图的查询与基本表的查询使用视图的查询与基本表的查询使用select语句。语句。视图的作用:视图的作用:(1)视图能简化用户的操作。)视图能简化用户的操作。通过视图可以从一个基本表或多个基本表中抽取用户感兴趣

33、通过视图可以从一个基本表或多个基本表中抽取用户感兴趣的数据,方便的数据,方便 用户处理。用户处理。(2)视图对重构)视图对重构DB提供了一定程度的逻辑独立性。提供了一定程度的逻辑独立性。例:例:将表将表s(sno,sname,sex,age,dept)垂直划分为两个表:垂直划分为两个表:sx(sno,sname,dept)sy(sno,sex,age)若建立一个视图若建立一个视图s:Create view s(sno,sname,sex,age,dept)as select sxsno,sxsname,sysex,syage,sxdept from sx,sy where sxsno=sysn

34、o;这样尽管这样尽管DB逻辑结构改变了,但应用程序不必修改,因为新建逻辑结构改变了,但应用程序不必修改,因为新建立的视图定义了用户原来的关系,使用户的外模式保持不变。立的视图定义了用户原来的关系,使用户的外模式保持不变。(3)视图能对保密数据提供保护。视图能对保密数据提供保护。2、视图的更新操作、视图的更新操作视图是不实际存储数据的虚表,因此:视图是不实际存储数据的虚表,因此:对视图的更新,最终要转换为对基本表的更新。对视图的更新,最终要转换为对基本表的更新。必须对视图的更新操作作一些限制(查询不限制)。必须对视图的更新操作作一些限制(查询不限制)。视图更新的三条规则:视图更新的三条规则:(1

35、)不允许对从多个基本表作连接操作导出的视图作)不允许对从多个基本表作连接操作导出的视图作更新操作。更新操作。(2)不允许对使用了分组()不允许对使用了分组(group by)和函数(如:)和函数(如:MIN等)操作导出的视图作更新。等)操作导出的视图作更新。(3)如果视图从单个基本表,使用选择、投影操作导)如果视图从单个基本表,使用选择、投影操作导出的,并包含了基本表的主关键字或某个候选关键出的,并包含了基本表的主关键字或某个候选关键字,那么这样的视图称为字,那么这样的视图称为“行列子集视图行列子集视图”,可作,可作更新操作。更新操作。例:从例:从s表中定义一个有关男同学的视图表中定义一个有关

36、男同学的视图 Create view S1(sno,snam,age)as select sno,sname,age from S where sex=男男;该视图从单基本表导出,且包含关键字该视图从单基本表导出,且包含关键字sno,可以更新:可以更新:执行插入操作:执行插入操作:INSERT INTO S1 VALUES(20006,王五王五,20););例:定义视图例:定义视图 Create view SSG(sno,cnum,Avgg)as select sno,count(sno),Avg(grade)from sc where grade IS NOT NULL Group by s

37、no;SSG由分组和函数操作导出,据(由分组和函数操作导出,据(2)规则不能更新。)规则不能更新。第五节第五节 嵌入式嵌入式SQL的使用的使用交互式交互式SQL:用户在终端上以命令形式使用:用户在终端上以命令形式使用嵌入式嵌入式SQL:在高级语言源程序中嵌入:在高级语言源程序中嵌入SQL语句语句SQL语言使用形式:语言使用形式:一、嵌入式一、嵌入式SQL的使用规定的使用规定扩充宿主语言的编译程序功能,使之能处理扩充宿主语言的编译程序功能,使之能处理SQL语句语句采用预处理方式处理采用预处理方式处理SQL语句语句嵌入式嵌入式SQL两种处理两种处理方式:方式:宿主语言语句宿主语言语句+SQL语句语

38、句预处理方式预处理方式SQL语句的过程:语句的过程:预备处理程序预备处理程序宿主宿主语言言语句句+函数函数调用用宿主语言编译程序宿主语言编译程序宿主宿主语言目言目标程序程序SQL函数定义库函数定义库SQL与宿主语言的接口与宿主语言的接口lSQL与宿主语言的接口是共享变量。与宿主语言的接口是共享变量。l共享变量由宿主语言程序定义,再用共享变量由宿主语言程序定义,再用SQL的的DECLARE语句说明,随后语句说明,随后SQL语语句可引用这些变量。句可引用这些变量。lSQL2规定,规定,SQLSTATE是一个特殊的共享变量,起着解释是一个特殊的共享变量,起着解释SQL语句执行状况语句执行状况的作用(

39、如报错)。的作用(如报错)。嵌入式嵌入式SQL的使用规定的使用规定(1)在)在SQL语句前使用前缀标识语句前使用前缀标识“EXEC SQL”“END-EXEC”(后缀标识)括起来,以示区别宿主语言语句。(注:(后缀标识)括起来,以示区别宿主语言语句。(注:END-EXEC后缀标识在后缀标识在C和和PASCAL语言中用语言中用“;”号表示)。号表示)。(2)允许嵌入的)允许嵌入的SQL语句引用宿主语言的程序变量(称为共享变语句引用宿主语言的程序变量(称为共享变量),量),但有两条规定:但有两条规定:a、引用时,变量前必须加冒号、引用时,变量前必须加冒号“:”作前缀标识,以示与数据作前缀标识,以示

40、与数据库中变量有区别。库中变量有区别。b、这些变量由宿主语言的程序定义,并用、这些变量由宿主语言的程序定义,并用SQL的的DECLARE语语句说明。句说明。如:如:C语言程序中使用如下形式定义共享变量:语言程序中使用如下形式定义共享变量:EXEC SQL BEGIN DECLARE SECTION;Char Sno5,name9;Char SQLSTATE6;EXEC SQL END DECLARE SECTION;(3)SQL的集合处理方式与宿主语言单记录处理方式的协调的集合处理方式与宿主语言单记录处理方式的协调 由于由于SQL语句处理的是记录集合,而宿主语言语句一次只能处语句处理的是记录集

41、合,而宿主语言语句一次只能处理一个记录,因此需要用游标(理一个记录,因此需要用游标(cursor)机制,把集合操作转换成)机制,把集合操作转换成单记录处理方式。单记录处理方式。与游标有关的与游标有关的SQL语句有下列四个:语句有下列四个:a、游标定义语句:游标是与某一查询结果相联系的符号名。、游标定义语句:游标是与某一查询结果相联系的符号名。定义形式:定义形式:EXEC SQL DECLARE 游标名游标名CURSOR FOR SELECT语句语句 END-EXECb、游标打开语句(、游标打开语句(OPEN):执行游标定义中的):执行游标定义中的SELECT语句,语句,使游标(实际是指针)指向

42、查询结果的第一行之前。使游标(实际是指针)指向查询结果的第一行之前。语句型:语句型:EXEC SQL OPEN 游标名游标名END-EXECc、游标推进语句(、游标推进语句(FETCH):游标推进一行,将游标所指的当):游标推进一行,将游标所指的当前行的值送共享变量。前行的值送共享变量。句型:句型:EXEC SQL FETCH FROM游标名游标名INTO变量表变量表 END-EXEC 注:注:FETCH常置于宿主语言程序的循环语句中。常置于宿主语言程序的循环语句中。d、游标关闭语句(、游标关闭语句(CLOSE)句型:句型:EXEC SQL CLOSE游标名游标名END-EXEC 注:在游标打

43、开后,可修改和删除游标所指的元组。注:在游标打开后,可修改和删除游标所指的元组。二、嵌入式二、嵌入式SQL的使用技术的使用技术涉及游标机制的使用技术涉及游标机制的使用技术不涉及游标机制的使用技术不涉及游标机制的使用技术方式:方式:1、不涉及游标的、不涉及游标的SQL DML语句语句INSERT,DELETE和和UPDATE语句加上前缀标识语句加上前缀标识“EXEC SQL”可可嵌入使用嵌入使用SELECT语句查找一个元组时,直接将该元组转送共享变量中。语句查找一个元组时,直接将该元组转送共享变量中。如:如:EXEC SQL SELECT sname,age,sex/在在s中寻找学生姓名、中寻找

44、学生姓名、年龄和性别年龄和性别/INTO :sn,:sa,:ss FROM S WHERE S#=:give;2、涉及游标的、涉及游标的SQL DML语句语句a、SELECT语句使用语句使用 当查找多个元组时,则用游标机制将多个元组一次一个从当查找多个元组时,则用游标机制将多个元组一次一个从DB中中读出并处理。读出并处理。具体过程:具体过程:用游标定义语句定义一个游标与某一个用游标定义语句定义一个游标与某一个SELECT语句对应。语句对应。用游标打开语句(用游标打开语句(OPEN)打开,使游标指向满足条件的元组之前。)打开,使游标指向满足条件的元组之前。每执行一次每执行一次FECTH,游标指向

45、下一个满足条件的元组,并将其值,游标指向下一个满足条件的元组,并将其值送共享变量。送共享变量。继续循环。继续循环。关闭语句(关闭语句(CLOSE)关闭游标。)关闭游标。例:在例:在SC基本表中查找某学生(学号由基本表中查找某学生(学号由give给出)的学习成绩信息给出)的学习成绩信息 (S,C,GRADE),下面是该查询的),下面是该查询的C语言函数定义:语言函数定义:#define NOM!(strcmp(SQLSTATE,“02000”)void sel()EXEC SQL BEGIN DECLARE SECTION;Char sno5,cno6,give5;Int g;Char SQLS

46、TATE6;EXEC SQL END DECLARE SECTION;EXEC SQL DECLARE SCX CURSOR FOR SELECT S,C,grade FROM SC WHERE S=:give;EXEC SQL OPEN SCX;While(1)EXEC SQL FETCH FROM SCX INTO:sno,:cno,:g;If (NOM)break;Printf(“%s,%s,%d”,sno,cno,g);EXEC SQL CLOSE SCX;b、游标指向元组的修改或删除操作、游标指向元组的修改或删除操作 涉及多个元组的修改或删除用游标机制。涉及多个元组的修改或删除用游标

47、机制。如:上例对查到的成绩删除不及格的成绩及将成绩如:上例对查到的成绩删除不及格的成绩及将成绩6069改为改为70分:分:则上例中将则上例中将while(1)中增加如下语句:)中增加如下语句:if (g 60)EXEC SQL DELETE FROM SC WHERE CURRENT OF SCX;else if (g 70)EXEC SQL UPDATE SC SET grade=70 WHERE CURRENT OF SCX;g=70;c、卷游标的定义与推进、卷游标的定义与推进 上述游标法只能使游标从头到尾顺序指向要查的元组,且不能上述游标法只能使游标从头到尾顺序指向要查的元组,且不能返回

48、查找。返回查找。SQL2提供卷游标(提供卷游标(scroll cursor)技术,使游标进退自如)技术,使游标进退自如 定义句型:定义句型:EXEC SQL DECLARE 游标名游标名SCROLL CURSOR FOR SELECT语句语句 END-EXEC 卷游标打开,关闭同游标一样。卷游标打开,关闭同游标一样。卷游标推进句型:卷游标推进句型:NEXTPRIORFIRSTLASTRELATIVE 整数整数ABSOLUTE整数整数EXEC SQL FETCHFROM游标名游标名INTO变量名表变量名表END-EXEC 第三章练习题第三章练习题一一.填空题填空题1.传统关系模型中的术语与传统关

49、系模型中的术语与SQL中术语存在如下对应关系中术语存在如下对应关系,关系模式在关系模式在SQL中称中称为为_;存储模式称为存储模式称为_;子模式称为子模式称为_。2.视图是一个虚表,它是一个从视图是一个虚表,它是一个从_中导出的表。中导出的表。3.SELECT语句中,语句中,_子句用于选择满足给定条件的元组子句用于选择满足给定条件的元组,使用使用_子子句可按指定的列的值分组句可按指定的列的值分组,同时使用同时使用_子句提取满足条件的元组。子句提取满足条件的元组。4.SQL语言的数据定义功能包括语言的数据定义功能包括_,_,_和和_。5.SQL语言有两种使用方式语言有两种使用方式,分别是分别是_

50、方式和方式和_方式。方式。第三章练习题第三章练习题二二.已知已知DBS中包含了三个基本表中包含了三个基本表GOODS(G#,GNAME,PRICE,TYPE,FACT)其中商品表中,其中商品表中,G#:商品号商品号,GNAME:商品名,商品名,PRICE:单价,单价,TYPE:型号,型号,FACT:制造商;商场基制造商;商场基本表:本表:SHOPS(S#,SNAME,ADDR,MANAG)。)。其中分别为:商其中分别为:商场号、商场名、地址和经理名;销售基本表场号、商场名、地址和经理名;销售基本表SALES(S#,G#,QTY)其中其中QTY为数量。为数量。1.试用试用SQL语句完成下列查询语

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com