《第3章 关系型数据库标准语言SQL.ppt》由会员分享,可在线阅读,更多相关《第3章 关系型数据库标准语言SQL.ppt(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 第第3章章 关系关系型数据库标准语言型数据库标准语言SQL SQL简介简介 SQL的数据定义:基本表的数据定义:基本表,视图视图,索引索引,约束约束 SQL的数据查询的数据查询 SQL的数据更新的数据更新 嵌入式嵌入式SQL的使用的使用主要内容:主要内容:重点:重点:SQL的数据查询的数据查询 3.1 SQL概述概述 SQL(Structured Query Language)起源于)起源于1974年,作为关系年,作为关系DB的标准语的标准语言,用于:言,用于:ORACLE,SQL/DB,DB2等关系数据库系统中。等关系数据库系统中。标准版本:标准版本:SQL89SQL2(92年)年)SQL
2、3(99年)。年)。一、一、SQL的特点的特点1.1.集集DBDB定定义义,操,操纵纵,控制功能于一体。,控制功能于一体。2.2.高度非高度非过过程化。程化。3.3.面向集合的操作方式。面向集合的操作方式。4.4.提供两种用方式:交互式和嵌入式。提供两种用方式:交互式和嵌入式。5.5.语语言言简洁简洁,易学易用。,易学易用。二、二、SQL结构结构 基本表(基本表(Base Table)关系模式关系模式支持支持DB的三级模式的结构:的三级模式的结构:视图(视图(View)子模式子模式 存储文件(存储文件(Stored File)存储模式存储模式其中:元组称为行(其中:元组称为行(row),属性称
3、为列(),属性称为列(column)。)。(1)SQL中的基本表对应中的基本表对应DB中的一个关系,一行对应一个元中的一个关系,一行对应一个元组,一列对应一个属性值域。组,一列对应一个属性值域。(2)SQL中的视图由基本表或视图导出;基本表是实际存储在中的视图由基本表或视图导出;基本表是实际存储在DB中的表中的表,视图是虚表,它的数据仍在导出的基本表中,它的视图是虚表,它的数据仍在导出的基本表中,它的定义存在数据字典中。定义存在数据字典中。(3)一个基本表可以跨一个或多个存储文件,一个存储文件也)一个基本表可以跨一个或多个存储文件,一个存储文件也可以存放一个或多个基本表;每一个存储文件对应外存
4、上一个可以存放一个或多个基本表;每一个存储文件对应外存上一个物理文件。物理文件。(4)用户可用)用户可用SQL语句对视图和基本表作查询等操作。在用户语句对视图和基本表作查询等操作。在用户来看视图与基本表都是关系。来看视图与基本表都是关系。(5)SQL的语句既可交互使用,也可嵌套到宿主语言的程序中的语句既可交互使用,也可嵌套到宿主语言的程序中使用。使用。结构要点:结构要点:三、三、SQL的构成的构成数据定义(数据定义(SQL DDL):用于定义基本表、视图、索引等。):用于定义基本表、视图、索引等。数据操纵(数据操纵(SQL DML):用于对):用于对DB的查询和更新等操作。的查询和更新等操作。
5、数据控制:包括对基本表和视图的授权,数据控制:包括对基本表和视图的授权,完整性规则的描述、事务控制等。完整性规则的描述、事务控制等。嵌入式嵌入式SQL的使用规定。的使用规定。4个部分个部分构成:构成:3.2 SQL的数据定义的数据定义包括:定义和撤消:包括:定义和撤消:基本表(基本表(table):):表名,属性名,类型,长度。表名,属性名,类型,长度。视图(视图(view)索引(索引(index)完整性约束条件完整性约束条件一、基本表的创建、修改和撤消一、基本表的创建、修改和撤消1SQL提供的主要数据类型提供的主要数据类型(1)数值型)数值型 INTEGER(或(或INT)长整型长整型 SM
6、ALLINT 短整型短整型 REAL 浮点型浮点型(取决于机器)(取决于机器)FLOAT(n)浮点型精度为浮点型精度为n位位 NCMERIC(P,d)定点数(定点数(p位数字,小数点后位数字,小数点后d位)位)(2)字符串型)字符串型 CHAR(n)最大长度为最大长度为n的定长字符串的定长字符串 VARCHAR(n)长度可变字符串,具有最大长度长度可变字符串,具有最大长度n(3)位串型)位串型 BIT(N)长度为)长度为N的二进制的往事。的二进制的往事。(4)时间型)时间型 DATE 日期:日期:YYYYMMDD(年(年-月月-号数)号数)TIME 时间:时间:HH:MM:SS(时:分:秒)时
7、:分:秒)算术操作仅限于数值型的数据。算术操作仅限于数值型的数据。2基本表的创建,修改和撤消基本表的创建,修改和撤消(1)创建基本表)创建基本表 句型:句型:Create Table基本表名(列名基本表名(列名 类型类型 列完整性约束列完整性约束,););主关键字子句(主关键字子句(PRIMARY KEY)其中:完整性约束定义其中:完整性约束定义 有三种子句:有三种子句:检查子句检查子句 (CHECK)外关键字子句(外关键字子句(FOREIGN KEY)例:教学例:教学DB中有三个关系模式:中有三个关系模式:S(sno,sname,sex,age,dept)Sc(sno,cno,grade)C
8、(cno,cname,credit)定义其基本表。定义其基本表。Create table s(sno CHAR(5)NOT NULL UNIQUE,sname CHAR(8),),sex CHAR(2),),age 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 (
9、(grade IS NULL)OR (grade BETWEEN 0 AND 100));其基本表定义如下:其基本表定义如下:表表C定义略定义略(2)基本表结构的修改)基本表结构的修改增加新的属性:增加新的属性:ALTER TABLE 基本表名基本表名 ADD 列名列名 类型类型 例:例:ALTER TABLE S ADD PHON CHAR(8);删除原有的属性删除原有的属性:ALTER TABLE 基本表名基本表名 DROP 列名列名 CASCADE|RESTRICT;其中:其中:CASCADE:所有引用该列的视图和约束也要一起被删除。所有引用该列的视图和约束也要一起被删除。RESTRIC
10、T:只有视图和约束没有引用该属性时,才能删除,:只有视图和约束没有引用该属性时,才能删除,否则拒绝。否则拒绝。例:例:ALTER TABLE S DROP age CASCADE;(3)基本表的撤消)基本表的撤消 句型:句型:DROP TABLE 基本表名;基本表名;例:例:DROP TABLE S;三、视图的创建与撤消三、视图的创建与撤消 视图:外模式(子模式):由基本表或其它已建视图构造出视图:外模式(子模式):由基本表或其它已建视图构造出的表。的表。(1)视图的创建)视图的创建 句型:句型:Create View 视图名(列名表)视图名(列名表)AS SELECT 查询子句查询子句 例:
11、若用户经常用到例:若用户经常用到sno,sname,cname和和grade信息,则建立视信息,则建立视图供查询图供查询 Create View Sg(sno,sname,cname,grade)As select ssno,sname,cname,grade from s,sc,c where ssno=scsno And o=o;(2)视图撤消)视图撤消句型:句型:DROP View 视图名视图名四、索引的创建及撤消四、索引的创建及撤消 建立索引的目的,加快对关系的查找。(浪费外存空间)建立索引的目的,加快对关系的查找。(浪费外存空间)在基本表上可建立一个或多个索引,索引存在存储文件中称索
12、在基本表上可建立一个或多个索引,索引存在存储文件中称索引文件。引文件。句型:句型:Create UNIQUE INDEX 索引名索引名 ON 基本表名(列名)基本表名(列名)例:例:Create index SI ON S(sno)按)按sno升序排列升序排列 Create Unique index SI ON S(sno););sno中值对应唯一中值对应唯一的记录值的记录值 Create Unique index SCI ON SC(sno ASC,cno DESC)索引定义的结构存在数据字典库中,学号按升序排列,索引定义的结构存在数据字典库中,学号按升序排列,CNO值值按降序排列。按降序排
13、列。索引的撤消:索引的撤消:DROPindex 索引名;索引名;例:例:DROP index SI;3.3 SQL的数据查询的数据查询一、一、select查询语句的句型查询语句的句型 select目标表的属性名或目标列表达式目标表的属性名或目标列表达式 select子句子句 from表名或视图名表名或视图名 from子句子句 where行条件表达式行条件表达式 行条件子句行条件子句 group by列名列名1having条件表达式条件表达式 列条件子列条件子句句 order by列名列名2asc|desc 排序子句排序子句执行过程执行过程 根据根据where子句的条件表达式,从子句的条件表达式
14、,从from子句指定的基本表或视子句指定的基本表或视图中找出满足条件的元组,再按图中找出满足条件的元组,再按select子句中的目标列表达式,选子句中的目标列表达式,选出元组中的属性值形成结果表。出元组中的属性值形成结果表。group子句,将结果按子句,将结果按列名列名1的值进行分组,列值相等的元组的值进行分组,列值相等的元组分为一组,每一组会产生结果表中的一条记录。分为一组,每一组会产生结果表中的一条记录。having子句将满足条件的组给出输出。子句将满足条件的组给出输出。order子句对输出的目标表按子句对输出的目标表按ASC升序或升序或DESC降序排列。降序排列。select基本句型基本
15、句型 select A1,A2,An (属性名(属性名Ai)from R1,R2,Rn (关系名或视图名(关系名或视图名Ri)where F ;(逻辑表达式(逻辑表达式F)其中:其中:F可使用以下运算符可使用以下运算符 等价于关系代数式:等价于关系代数式:A1,A2,An(F (R1 R2 Rn)算术比较符:算术比较符:,=,=,或!或!=。逻辑符:逻辑符:AND,OR,NOT。集合运算符:集合运算符:union(并),(并),intersect(交)(交)except(差),(差),IN(属于)。(属于)。谓词:谓词:exists(存在量词),(存在量词),all,any(some),uni
16、que(唯一),(唯一),LIKE。F中还可以是中还可以是select子句(嵌套)。子句(嵌套)。使用的函数:使用的函数:avg(列名):求列中的平均值。(列名):求列中的平均值。min(列名):求列中的最小值。(列名):求列中的最小值。max(列名):求列中的最大值。(列名):求列中的最大值。sum(列名):求列中值之和。(列名):求列中值之和。count(列名):求列中值的个数。(列名):求列中值的个数。count(*):求元组个数。):求元组个数。注意:注意:select语语句与关系代数表达式的关系:句与关系代数表达式的关系:select A,B,C from R1,R2 A,B,C(F
17、 (R1 R2)where F ;例:例:已知已知对对R运算的关系代数表达式:运算的关系代数表达式:A,B(A3C=1(R):将关系代数表达式用等价的将关系代数表达式用等价的SELECT语语句写出。句写出。select A,B select A,S.B from R from R,S where A3 and C=1;where R.B=S.C;例:已知例:已知S是由是由R通通过过select语语句句执执行的行的结结果关系,果关系,请请写出此写出此select语语句。句。已知已知S是由是由R通通过过关系代数运算的关系代数运算的结结果关系,果关系,请请写出此关系代数表达式。写出此关系代数表达式。
18、select B,C from R 写法不唯一。写法不唯一。where B=5 OR C=5;A B C631547154RBC5415SA s.B6 4A,S.B(R.B=S.C(RS)B,C(B=5C=5(R)二、二、SELSCT语句的使用语句的使用 单表查询,多表关联查询(嵌套查询),集合查询。单表查询,多表关联查询(嵌套查询),集合查询。1、单表查询、单表查询 例:教学例:教学DB三个基本表:三个基本表:s(sno,sname,sex,age,dept):):学号,姓名,性别,年龄,系名学号,姓名,性别,年龄,系名 c(cno,cname,credit):课号,课名,学分:课号,课名,
19、学分 sc(sno,cno,grade):学号,课号,成绩:学号,课号,成绩列上查询列上查询例例1:查询学生的学号,姓名和系名:查询学生的学号,姓名和系名 select sno,sname,dept from s;例例2:查询全部学生的详细情况:查询全部学生的详细情况 select *(*表示表示s中的全部属性中的全部属性)from s;sno,sname,dept (S)例例3:查询全部学生的姓名及出生年份:查询全部学生的姓名及出生年份 select sname,2018-age from s;结果:结果:sname 无列名无列名 李一李一 1999 刘二刘二 1996 王三王三 1995例
20、例4:查询全部学生的姓名,出生年份和系名:查询全部学生的姓名,出生年份和系名 要求:指定别名改变查询结果的列标题要求:指定别名改变查询结果的列标题select sname NAME,2015-age BIRTHDAY,dept DEPARTMENTfrom s;结果:结果:NAME BIRTHDAY DEPARTMENT 李一李一 1981 cs 刘二刘二 1982 is 王三王三 1983 ma行上查询行上查询例例1:查询所有选修课程的学生的学号。:查询所有选修课程的学生的学号。Select distinct sno from SC;例例2:查找成绩不及格学生的学号及课号。:查找成绩不及格学
21、生的学号及课号。select distinct sno,cno from sc where grade=90 AND grade=100;或:或:where grade between 90 and 100;SC表原来值:表原来值:Sno Cno grade Sno20001 1 80 操作后:操作后:2000120001 2 85 2000220002 3 90 20002 2 80 sno,cno(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 IS 2、关联查询、关联
22、查询 多个表连接查询多个表连接查询 例例1:查询每个学生及选修课程的情况。:查询每个学生及选修课程的情况。Select s,sc from s,sc where ssno=sc sno;s.sno,sname,sex,dept,sc.sno,cno,grade(ssno=sc sno (SSC)自身连接查询自身连接查询例例2:查找:查找至少至少选择选修课程号为选择选修课程号为“1”号号和和为为“2”号的学生的学号的学生的学号。号。select xsno from SC x,SC y x,y是是别别名名 where xsno=ysno AND xcno=1 AND ycno=2;另一另一嵌套结构
23、嵌套结构写法:写法:select sno from SC where cno=2 AND sno IN(select sno from SC where cno=1);嵌套结构的查询嵌套结构的查询例例3:查询选修课程号为:查询选修课程号为“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);注:嵌套结构层次分明,具有结构化程序设计特点。注:嵌套结构层次分明,具有结构化程序设计特点。嵌套结构比不嵌套结构查询效率高(因先作选择)。嵌套结构比不嵌套结构查询效率高(因先作选择)。c.写法(使用存在量词的嵌套查询)写法(使用存在量词的嵌套查询)select sno,sname from s where EXISTS (select from SC where SCSno=SSno AND Cno=2);例例4:查找选修了课程名为:查找选修了课程名为“信息系统信息系统”的学生学号与姓
25、名。的学生学号与姓名。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,credit)关于多个表关联查询关于多个表关联查询select语句设计问题:语句设计问题:方法与步骤:方法与步骤:首先确定关系(确定首先确定关系(确定from后面的关系名)后面的关系名)根据已知的属性和要查找的属性是否
26、在同一关系中?根据已知的属性和要查找的属性是否在同一关系中?是,此关系就是要找的(是,此关系就是要找的(单关系查找单关系查找)。)。否,已知的属性所在的关系否,已知的属性所在的关系R,与要查找的属性所在的关系,与要查找的属性所在的关系S之间,找外键之间,找外键的联系;则:的联系;则:R,S与外键通过的关系(有的话)就是要找的关系。(与外键通过的关系(有的话)就是要找的关系。(多关多关系关联查找系关联查找)确定查找条件(确定确定查找条件(确定where后面的条件)后面的条件)根据题目给定的属性和值组织。根据题目给定的属性和值组织。嵌套结构中,将某一个查询条件用子查询嵌套结构中,将某一个查询条件用
27、子查询表示,再参与主查询之中。表示,再参与主查询之中。例例5:查找其他系中比:查找其他系中比IS系任何学生年龄小的学生名单。系任何学生年龄小的学生名单。select sname,age from s where age ALL(select age from s where dept=IS)AND deptIS Order by age DESC;例例6:查找至少有一门课的成绩超过学号为:查找至少有一门课的成绩超过学号为20002的一门课成绩的的一门课成绩的学生学号。学生学号。select distinct sno from sc where grade some(select grade f
28、rom sc where sno=20002);3.集合查询集合查询 例:查找计算机系的学生例:查找计算机系的学生及及年龄不大于年龄不大于19岁的学生岁的学生 实际求计算机系的所有学生实际求计算机系的所有学生和和年龄不大于年龄不大于19岁其它系的学生的并集岁其它系的学生的并集 select from s where dept=cs UNION Select from s where age=19 and dept cs;3.4 SQL的数据更新的数据更新数据插入数据插入数据删除数据删除数据修改数据修改更新包括:更新包括:一、数据插入一、数据插入元组值的插入元组值的插入查询结果的插入查询结果的插
29、入包括:包括:1、元组值的插入、元组值的插入 一般句型:一般句型:INSERT INTO 基本表名(列名表基本表名(列名表)VALUES(元组值元组值)一次一次 仅插入一个元组。仅插入一个元组。如:如:INSERT INTO SC VALUES(20005,1,85););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;Sno cno greade 1 1 70 1 2 80 1 3 90 2 1 90 2 2 70 2 3 60二、数据的删除二、数据的删除 一般句型:一般句型:DELETE FROM 基本表名基本表名 WHERE 条件表达式条件表达式 从一个基本表中
31、删除满足条件的元组从一个基本表中删除满足条件的元组例:删除例:删除SC中中1号课程中小于该课程平均成绩的成绩元组。号课程中小于该课程平均成绩的成绩元组。DELETE FROM SC WHERE cno=1AND grade(SELECT AVG(grade)FROM SC WHERE cno=1);三、数据的修改三、数据的修改 修改基本表中元组的某些列值修改基本表中元组的某些列值 一般句型:一般句型:UPDATE 基本表名基本表名 SET 列名列名=值表达式值表达式,列名,列名=值表达式,值表达式,WHERE 条件表达式条件表达式例:将女同学的成绩提高例:将女同学的成绩提高10%UPDATE
32、SC SET grade=grade11 WHERE sno IN(select sno from s where sex=女女););3.5 视图视图1、视图的概念、视图的概念视图从一个或多个基本表(或已定义的视图)导出的表,提视图从一个或多个基本表(或已定义的视图)导出的表,提供给用户供给用户查询查询DB中数据使用。中数据使用。视图是一个虚表,它的视图是一个虚表,它的框架定义的属性存于数据字典库中,框架定义的属性存于数据字典库中,其数据仍在原来基本表中。其数据仍在原来基本表中。视图的查询与基本表的查询一样,使用视图的查询与基本表的查询一样,使用select语句。语句。视图的作用:视图的作用
33、:(1)视图能简化用户的操作。)视图能简化用户的操作。通过视图可以从一个基本表或多个基本表中抽取用户感兴通过视图可以从一个基本表或多个基本表中抽取用户感兴趣的数据,方便用户处理。趣的数据,方便用户处理。(2)视图对重构)视图对重构DB提供了一定程度的逻辑独立性。提供了一定程度的逻辑独立性。例:例:将表将表s(sno,sname,sex,age,dept)垂直划分为两个表:垂直划分为两个表:sx(sno,sname,dept)sy(sno,sex,age)若建立一个视图若建立一个视图s,可以还原原来的表,可以还原原来的表s:Create view s(sno,sname,sex,age,dept
34、)as select sxsno,sxsname,sysex,syage,sxdept from sx,sy where sxsno=sysno;这样尽管这样尽管DB逻辑结构改变了,但应用程序不必修改,因为新建逻辑结构改变了,但应用程序不必修改,因为新建立的视图定义了用户原来的关系,使用户的外模式保持不变。立的视图定义了用户原来的关系,使用户的外模式保持不变。(3)视图能对保密数据提供保护。视图能对保密数据提供保护。2、视图的更新操作、视图的更新操作视图是不实际存储数据的虚表,因此:视图是不实际存储数据的虚表,因此:对视图的更新,最终要转换为对基本表的更新。对视图的更新,最终要转换为对基本表的
35、更新。必须对视图的更新操作作一些限制(查询不限制)。必须对视图的更新操作作一些限制(查询不限制)。视图更新的三条规则:视图更新的三条规则:(1)不允许对从多个基本表作)不允许对从多个基本表作连接操作导出的视图连接操作导出的视图作更新作更新操作。操作。(2)不允许对)不允许对使用了分组(使用了分组(group by)和函数(如:)和函数(如:MIN等)等)操作导出的视图操作导出的视图作更新。作更新。(3)如果视图从)如果视图从单个基本表单个基本表,使用选择、投影操作导出的使用选择、投影操作导出的,并并包含了基本表的主关键字或某个候选关键字包含了基本表的主关键字或某个候选关键字,那么这样的,那么这
36、样的视图称为视图称为“行列子集视图行列子集视图”,可作更新操作。,可作更新操作。例:从例:从s表中定义一个有关男同学的视图表中定义一个有关男同学的视图 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 selec
37、t sno,count(sno),Avg(grade)from sc where grade IS NOT NULL Group by sno;SSG由分组和函数操作导出,据(由分组和函数操作导出,据(2)规则不能更新。)规则不能更新。3.6 嵌入式嵌入式SQL的使用的使用(不讲,嵌入与语言有关不讲,嵌入与语言有关)交互式交互式SQL:用户在终端上以命令形式使用。:用户在终端上以命令形式使用。嵌入式嵌入式SQL:在高级语言源程序中嵌入:在高级语言源程序中嵌入SQL语句。语句。SQL语言语言使用形式:使用形式:一、嵌入式一、嵌入式SQL的使用规定的使用规定 扩充宿主语言的编译程序功能,直接处理扩
38、充宿主语言的编译程序功能,直接处理SQL语句。语句。采用预处理方式处理采用预处理方式处理SQL语句。语句。1、嵌入式、嵌入式SQL两种处理方式两种处理方式宿主语言语句宿主语言语句 +SQL语句语句预处理方式预处理方式SQL语句的过程:语句的过程:预备处理程序预备处理程序宿主语言语句宿主语言语句+SQLSQL函数调用函数调用宿主语言编译程序宿主语言编译程序 宿主语言目标程序宿主语言目标程序SQL函数定义库函数定义库 2.嵌入式嵌入式SQL的使用规定的使用规定 (1)SQL与宿主语言的接口与宿主语言的接口l SQL与宿主语言的接口是与宿主语言的接口是共享变量共享变量。1)共享变量由宿主语言程序定义
39、,再用)共享变量由宿主语言程序定义,再用SQL的的DECLARE语句说语句说明,随后明,随后SQL语句可引用这些变量。语句可引用这些变量。2)引用时,变量前必须加冒号)引用时,变量前必须加冒号“:”作前缀标识,以示区别作前缀标识,以示区别数据库中的变量。数据库中的变量。(2)主语言语句与)主语言语句与SQL语句的区别语句的区别 在在SQL语句前使用前缀标识语句前使用前缀标识“EXEC SQL”;以示区别宿主语;以示区别宿主语言语句。言语句。如:如:C语言程序中使用如下形式定义共享变量:语言程序中使用如下形式定义共享变量:EXEC SQL BEGIN DECLARE SECTION Char S
40、no5,name9;Char SQLSTATE6;EXEC SQL END DECLARE SECTION;3.SQL的集合处理方式与宿主语言单记录处理方式的协调的集合处理方式与宿主语言单记录处理方式的协调 由于由于SQL语句处理的是记录集合,而宿主语言语句一次只能处语句处理的是记录集合,而宿主语言语句一次只能处理一个记录,因此需要用理一个记录,因此需要用游标(游标(cursor)机制,把集合操作转换成机制,把集合操作转换成单记录处理方式。单记录处理方式。与游标有关的与游标有关的SQL语句有下列四个:语句有下列四个:a、游标定义语句:游标是与某一查询结果相联系的符号名。、游标定义语句:游标是与
41、某一查询结果相联系的符号名。定义形式:定义形式:EXEC SQL DECLARE 游标名游标名CURSOR FOR SELECT语句语句;b、游标打开语句(、游标打开语句(OPEN):执行游标定义中的):执行游标定义中的SELECT语句,语句,使游标(实际是指针)指向查询结果的第一行之前。使游标(实际是指针)指向查询结果的第一行之前。语句型:语句型:EXEC SQL OPEN 游标名游标名;注:在游标打开后,可修改和删除游标所指的元组。注:在游标打开后,可修改和删除游标所指的元组。c、游标推进语句(、游标推进语句(FETCH):游标推进一行,将游标所指的当):游标推进一行,将游标所指的当前行的
42、值送共享变量。前行的值送共享变量。句型:句型:EXEC SQL FETCH FROM游标名游标名INTO变量表变量表;注:注:FETCH常置于宿主语言程序的循环语句中。常置于宿主语言程序的循环语句中。d、游标关闭语句(、游标关闭语句(CLOSE)句型:句型:EXEC SQL CLOSE游标名游标名;二、嵌入式二、嵌入式SQL的使用技术的使用技术a、涉及游标机制的使用技术、涉及游标机制的使用技术b、不涉及游标机制的使用技术、不涉及游标机制的使用技术1、不涉及游标的、不涉及游标的SQL DML语句语句 当涉及对当涉及对DB中中一个元组一个元组操作的语句:操作的语句:INSERT,DELETE和和U
43、PDATE,SELECT,都不必使用游标。都不必使用游标。如:如:EXEC SQL SELECT sname,age,sex INTO :sn,:sa,:ss FROM S WHERE Sno=:give;/*假设一个学生的学号已在假设一个学生的学号已在give中中*/*在在s中寻找学生姓名、年龄和性别中寻找学生姓名、年龄和性别分别送到分别送到sn、sa、ss共享变量中共享变量中*/2、涉及游标的、涉及游标的SQL DML语句语句 当涉及对当涉及对DB中中多个元组多个元组操作时,都必须使用游标。操作时,都必须使用游标。(1)、)、SELECT语句使用语句使用 当查找多个元组时,则用游标机制将多
44、个元组一次一个从当查找多个元组时,则用游标机制将多个元组一次一个从DB中中读出并处理。读出并处理。具体过程:具体过程:用游标定义语句定义一个游标与某一个用游标定义语句定义一个游标与某一个SELECT语句对应。语句对应。用游标打开语句(用游标打开语句(OPEN)打开,使游标指向满足条件的元组之前。)打开,使游标指向满足条件的元组之前。每执行一次每执行一次FECTH,游标指向下一个满足条件的元组,并将其值,游标指向下一个满足条件的元组,并将其值送共享变量。继续循环。送共享变量。继续循环。关闭语句(关闭语句(CLOSE)关闭游标。)关闭游标。例:在例:在SC基本表中查找某学生(学号由基本表中查找某学
45、生(学号由give给出)的学习成绩信息给出)的学习成绩信息 (S,C,GRADE),下面是该查询的),下面是该查询的C语言函数定义:语言函数定义:#define NOM!(strcmp(SQLSTATE,“02000”)void sel()EXEC SQL BEGIN DECLARE SECTION;Char sno5,cno6,give5;Int g;Char SQLSTATE6;EXEC SQL END DECLARE SECTION;EXEC SQL DECLARE SCX CURSOR FOR SELECT S,C,grade FROM SC WHERE S=:give;EXEC SQ
46、L 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;第第3章章 课外练习题课外练习题 班级:班级:姓名:姓名:学号:学号:一一.填空题填空题 1.语与语与SQL中术语存在如下对应关系中术语存在如下对应关系,关系模式在关系模式在SQL中称为中称为_;存储模式称为存储模式称为_;子模式称为子模式称为_。2.视图是一个虚表,它是一个从视图是一个虚表,它是一个从_中导出的表。中导出的表。3.SELECT语句中,语
47、句中,_子句用于选择满足给定条件的元组子句用于选择满足给定条件的元组,使用使用_子子句可按指定的列的值分组句可按指定的列的值分组,同时使用同时使用_子句提取满足条件的元组。子句提取满足条件的元组。4.SQL语言的数据定义功能包括语言的数据定义功能包括_,_,_和和_。5.SQL语言有两种使用方式语言有两种使用方式,分别是分别是_方式和方式和_方式。方式。二二.已知关系已知关系R:ABC134aac154R1.请写出下列请写出下列SELECT语句对语句对R执行的结果。执行的结果。SELECT A,CFROM RWHERE B=a;2.将上题中的将上题中的SELECT语句执行的功能,用关系代数表达
48、式写出。语句执行的功能,用关系代数表达式写出。3.已知对已知对R运算的关系代数表达式:运算的关系代数表达式:A,B(A2C=5(R):(1)将将关系代数表达式用等价的关系代数表达式用等价的SELECT语句写出。语句写出。(2)写出关系代数表达式运算结果。写出关系代数表达式运算结果。三三.已知已知DBS中包含了三个基本表中包含了三个基本表商品表:商品表:GOODS(G,GNAME,PRICE,TYPE,FACT),其中,其中G:商品号:商品号,GNAME:商品名,商品名,PRICE:单价,单价,TYPE:型号,型号,FACT:制造商;:制造商;商场表:商场表:SHOPS(S,SNAME,ADDR
49、,MANAG)。)。其中分别为:商场号、其中分别为:商场号、商场名、地址和经理名;商场名、地址和经理名;销售表:销售表:SALES(S,G,QTY)其中其中QTY为数量。为数量。1.试用试用SQL语句完成下列查询语句完成下列查询(1)查询所有电视机的生产厂商、型号、单价;查询所有电视机的生产厂商、型号、单价;(2)查询同时生产电视机和电冰箱的制造商查询同时生产电视机和电冰箱的制造商;(3)查询查询“吉利吉利”商场所销售的各种商品的商品号和数量;商场所销售的各种商品的商品号和数量;(4)查询销售量最高的商场号和所销售的商品号。查询销售量最高的商场号和所销售的商品号。2.试用试用SQL对基本表做创建和更新操作对基本表做创建和更新操作(1)创建销售表:创建销售表:SALES(S,G,QTY)(类型、长度自定,定义主键);类型、长度自定,定义主键);(2)将将“南华南华”厂的所有产品的名称、型号和单价插到一个已存在的基本表厂的所有产品的名称、型号和单价插到一个已存在的基本表 A(GN,GTYPE,PRICE)中;中;(3)将总销售量低于将总销售量低于1000的所有商品的价格降低的所有商品的价格降低10%。