数据库语言SQL

上传人:公**** 文档编号:570121280 上传时间:2024-08-02 格式:PPT 页数:95 大小:172KB
返回 下载 相关 举报
数据库语言SQL_第1页
第1页 / 共95页
数据库语言SQL_第2页
第2页 / 共95页
数据库语言SQL_第3页
第3页 / 共95页
数据库语言SQL_第4页
第4页 / 共95页
数据库语言SQL_第5页
第5页 / 共95页
点击查看更多>>
资源描述

《数据库语言SQL》由会员分享,可在线阅读,更多相关《数据库语言SQL(95页珍藏版)》请在金锄头文库上搜索。

1、3 数据库语言数据库语言SQLElelen Enmi胶原蛋白口服液买四赠一胶原蛋白口服液买四赠一 品牌正品情侣装品牌正品情侣装 亲子装全场包邮亲子装全场包邮 淘宝:淘宝: 或者拍拍:或者拍拍:1本章目标本章目标 本章主要介绍本章主要介绍SQL语言的基本语法和语言的基本语法和使用方式,要求熟练掌握使用方式,要求熟练掌握SQL语言的使用语言的使用规则,能够根据实际需求写出能够准确完规则,能够根据实际需求写出能够准确完成操作的成操作的SQL语句。语句。23.1 概述概述1.SQL的发展的发展1974年,由年,由Boyce和和Chamberlin提出提出19751979,IBM San Jose Re

2、search Lab的关系数据的关系数据库管理系统原型库管理系统原型System R实施了这种语言实施了这种语言SQL-86是第一个是第一个SQL标准标准SQL-89、SQL-92(SQL2)、SQL-99(SQL3)2.现状现状大部分大部分DBMS产品都支持产品都支持SQL,成为操作数据库的标,成为操作数据库的标准语言准语言有特殊性,支持程度不同有特殊性,支持程度不同3q 数据定义(数据定义(DDL)定义、删除、修改关系模式(基本表)定义、删除、修改关系模式(基本表)定义、删除视图(定义、删除视图(View)定义、删除索引(定义、删除索引(Index)q 数据操纵(数据操纵(DML)数据查询

3、数据查询数据增、删、改数据增、删、改q 数据控制(数据控制(DCL)用户访问权限的授予、收回用户访问权限的授予、收回3.1.1 SQL的功能的功能4q 交互式交互式SQL一般一般DBMS都提供联机交互工具都提供联机交互工具用户可直接键入用户可直接键入SQL命令对数据库进行操作命令对数据库进行操作由由DBMS来进行解释来进行解释q 嵌入式嵌入式SQL能将能将SQL语句嵌入到高级语言(宿主语言)语句嵌入到高级语言(宿主语言)使应用程序充分利用使应用程序充分利用SQL访问数据库的能力、访问数据库的能力、宿主语言的过程处理能力宿主语言的过程处理能力一般需要预编译,将嵌入的一般需要预编译,将嵌入的SQL

4、语句转化为宿语句转化为宿主语言编译器能处理的语句主语言编译器能处理的语句3.1.2 SQL的形式的形式5q数据定义数据定义Create、Drop、Alterq数据操纵数据操纵数据查询:数据查询:Select数据修改:数据修改:Insert、Update、Deleteq数据控制数据控制Grant、Revoke3.1.3 SQL的动词的动词6数据查询数据查询是数据库应用的核心功能。是数据库应用的核心功能。v 基本结构:基本结构:Select A1, A2, ., AnFrom r1, r2, ., rmWhere P3.2 数据查询数据查询SelectWhereFromA1, A2, ., An(

5、 p(r1r1.rm)73.2.1 Select语句的含义语句的含义 对对 From 子句中的各关系,作笛卡儿积(子句中的各关系,作笛卡儿积()对对 Where 子句中的逻辑表达式进行选择(子句中的逻辑表达式进行选择()运算,找出符合条件的元组。运算,找出符合条件的元组。根据根据 Select 子句中的属性列表,对上述结果作子句中的属性列表,对上述结果作投影(投影( )操作。)操作。查询操作的对象是关系,结果还是一个关系,查询操作的对象是关系,结果还是一个关系,是一个结果集,是一个动态数据集。是一个结果集,是一个动态数据集。3.2.2 Select子句子句 对应于关系代数的投影(对应于关系代数

6、的投影()运算,用以)运算,用以列出查询结果集中的期望属性。列出查询结果集中的期望属性。8q 重复元组重复元组SQL 具有包的特性具有包的特性Select子句的缺省情况是保留重复元组子句的缺省情况是保留重复元组(ALL),可用可用 Distinct去除重复元组去除重复元组Select Distinct sdept From StudentSelect All sdept From Student去除重复元组去除重复元组:费时费时需要临时表的支持需要临时表的支持9q *与属性列表与属性列表v 星号星号 * * 表示所有属性表示所有属性星号星号 * * :按关系模式中属性的顺序排列,按关系模式中属

7、性的顺序排列,并具有一定的逻辑数据独立性并具有一定的逻辑数据独立性显式列出属性名:显式列出属性名:按用户顺序排列按用户顺序排列Select * From StudentSelect Student.*,cno,grade From Student,SC Where Student.sno = SC.sno10q 更名更名为结果集中的某个属性改名为结果集中的某个属性改名使结果集更具可读性使结果集更具可读性Select sno as stu_no,cno as course_no, grade From SCSelect sno,sname,2001 - sage as birthday From

8、 Student113.2.3 where子句子句where子句对应与关系代数中的选择子句对应与关系代数中的选择()。查询满足指定条件的元组可以通过查询满足指定条件的元组可以通过Where子句来实现。子句来实现。使使where子句中的逻辑表达式返回子句中的逻辑表达式返回True值值的元组,是符合要求的元组,将被选择出的元组,是符合要求的元组,将被选择出来。来。12q 运算符运算符比较:比较: 、= 、=、= =、not + not + 确定范围:确定范围:Between A and B、Not Between A and B 确定集合:确定集合:IN、NOT IN字符匹配:字符匹配:LIKE,

9、NOT LIKE空空值:IS NULL、IS NOT NULL多重条件:多重条件:AND、OR、NOT 13q like字符匹配:字符匹配:Like、Not Like通配符:通配符:% 匹配任意字符串匹配任意字符串_ 匹配任意一个字符匹配任意一个字符大小写敏感大小写敏感14列出姓张的学生的学号、姓名。列出姓张的学生的学号、姓名。Select sno,sname From Student Where sname LIKE 张张%列出张姓且单名的学生的学号、姓名。列出张姓且单名的学生的学号、姓名。Select sno,sname From Student Where sname LIKE 张张_

10、_15q 转义符转义符 escape 例:例:列出课程名称中带有列出课程名称中带有_ _的课号及课的课号及课名。名。Select cno,cnameFrom CourseWhere cname LIKE %_% escape 163.2.4 from子句子句From子句对应与关系代数中的笛卡儿积(子句对应与关系代数中的笛卡儿积()列出将被扫描的关系(表)列出将被扫描的关系(表)例:例:列出所有学生的学号、姓名、课号、成绩。列出所有学生的学号、姓名、课号、成绩。 Select Sudent.sno,sname,SC.cno,grade From Student,SC Where Student.

11、sno = SC.sno17q 元组变量元组变量为为 From 子句中的关系定义元组变量子句中的关系定义元组变量方便关系名的引用方便关系名的引用在同一关系的笛卡儿积中进行辨别在同一关系的笛卡儿积中进行辨别例:例:列出与列出与95001同岁的同学的学号,姓名,年龄。同岁的同学的学号,姓名,年龄。 SelectT.sno,T.sname,T.sage FromStudent as T,Student as S WhereS.sno = 95001 ANDT.sage = S.sage183.2.5 Order By子句子句指定结果集中元组的排列次序指定结果集中元组的排列次序耗时耗时ASC(缺省)、

12、(缺省)、DESC、未选中的属性、未选中的属性例:例:列出列出CS系中的男生的学号、姓名、年龄,系中的男生的学号、姓名、年龄,并按年龄进行排列(升序)。并按年龄进行排列(升序)。Select sno,sname, sage From Student Where sdept = CS Order By sage ASC 193.3 数据定义语言数据定义语言数据定义语言(数据定义语言(Data Definition Language)Create、Drop、Alter定义一组关系(基本表)、说明各关系的信息定义一组关系(基本表)、说明各关系的信息各关系的模式各关系的模式各属性的值域各属性的值域完整

13、性约束完整性约束索引索引安全性和权限安全性和权限 203.3.1 SQL中的域类型中的域类型q 字符型字符型char(n) 、varchar(n)q 数值型数值型integer、smallintnumeric(p,d)real、double、float(n)q 日期日期/时间型时间型datetime213.3.2 SQL中的域定义中的域定义q 域定义语句(域定义语句(SQL-92支持)支持)需重复使用的需重复使用的Create Domain stu_name varchar(20)Create Domain zip_code char(6) q 域的删除域的删除Drop Domain date

14、log各各DBMS的方法是不同的的方法是不同的Restrict/Cascade使用该域的属性的处理使用该域的属性的处理 223.3.3 SQL中的模式定义中的模式定义 Create Table r (A1D1, A2D2, AnDn, , )其中:其中:r 关系名(表名)、关系名(表名)、 Ai 关系关系 r 的一个属性名的一个属性名Dn 属性属性Ai域值的域类型域值的域类型主键声明:主键声明:primary key (Aj1 ,Aj2 ,Ajvm )23Create Domain stu_name varchar(20)Create Table Student (sno char(10) p

15、rimary key(sno) ,sname stu_name ,sage smallint,ssex char(1),sdept char(2)24Create 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 ,grade smallint,primary key (sno, cno)Elelen Enmi胶原蛋白口服液买四赠一胶原蛋白口服液买四赠一 品牌

16、正品情侣品牌正品情侣装装 亲子装全场包邮亲子装全场包邮 淘宝:淘宝: 或者拍拍:或者拍拍:253.3.4 删除表结构删除表结构用用SQL删除关系(表)删除关系(表)将整个关系模式(表结构)彻底删除将整个关系模式(表结构)彻底删除表中的数据也将被删除表中的数据也将被删除Drop Table rDrop Table student263.3.5 修改表结构修改表结构q 删除表中的某属性删除表中的某属性去除属性及相应的数据去除属性及相应的数据Alter Table r Drop A q 增加表中的属性增加表中的属性向已经存在的表中添加属性向已经存在的表中添加属性allow null已有的元组中该属性

17、的值被置为已有的元组中该属性的值被置为NullAlter Table r Add A DAlter Table student phone char(16)273.3.6 Default Value属性的默认值属性的默认值用户不提供某属性的值时,默认值被使用用户不提供某属性的值时,默认值被使用初始值初始值DDL中:中:ModifyDate char(30) Default TimeStampAlter Table student Add ID integer Default 1001283.3.7 索引索引Index索引是一种数据结构,是对照表、指针表索引是一种数据结构,是对照表、指针表索引是

18、为了加速对表中元组的检索而创建索引是为了加速对表中元组的检索而创建的一种分散存储结构(的一种分散存储结构(B树)树)索引是对表而建立的,由除存放表的数据索引是对表而建立的,由除存放表的数据页面以外的索引页面组成页面以外的索引页面组成索引是把双刃剑,减慢更新的速度索引是把双刃剑,减慢更新的速度索引不是索引不是SQL标准的要求标准的要求q 索引的种类索引的种类聚簇索引(聚簇索引(Clustered Index)非聚簇索引(非聚簇索引(Non-Clustered Index) 29q 聚簇索引(聚簇索引(Clustered Index)表中的元组按聚簇索引的顺序物理地存放表中的元组按聚簇索引的顺序物

19、理地存放根级页面根级页面-中间层页面中间层页面-叶级页面(数据页面)叶级页面(数据页面)一个表中只能有一个聚簇索引一个表中只能有一个聚簇索引更新的复杂性,需要大量的临时空间更新的复杂性,需要大量的临时空间q 非聚簇索引(非聚簇索引(Non-Clustered Index) 表中的元组按聚簇索引的顺序物理地存放表中的元组按聚簇索引的顺序物理地存放根级页面根级页面-中间层页面中间层页面-叶级页面(数据页面)叶级页面(数据页面)一个表中只能有一个聚簇索引一个表中只能有一个聚簇索引更新的复杂性,需要大量的临时空间更新的复杂性,需要大量的临时空间30CREATE UNIQUE CLUSTERED | N

20、ONCLUSTEREDINDEX index-name On TableName(Column,Column,)Create Index YearIndex On Movie(year)Create Clustered Index SnoIndex On student(sno) Drop Index YearIndex313.4 数据添加数据添加v用用SQL的插入语句,向数据库表中添加数据的插入语句,向数据库表中添加数据按关系模式的属性顺序按关系模式的属性顺序Insert Into Student Values ( 0095001, 张三张三,27, M, CS )按指定的属性顺序,也可以只

21、添加部分属性(非按指定的属性顺序,也可以只添加部分属性(非Null属性为必需)属性为必需)Insert Into Student ( sno, sname, sage) Values ( 0095002, 李四李四, 26 ) 323.5 聚合函数聚合函数 把一列中的值进行聚合运算,返回单值的函数。把一列中的值进行聚合运算,返回单值的函数。v五个预定义的聚合函数五个预定义的聚合函数:平均值:平均值:Avg总和:总和: Sum最小值:最小值:Min最大值:最大值:Max计数:计数:CountCount(*)、Count(Distinct) 数值数值333.5.1 Group By将查询结果集按某

22、一列或多列的值分组,值相将查询结果集按某一列或多列的值分组,值相等的为一组,一个分组以一个元组的形式出现。等的为一组,一个分组以一个元组的形式出现。只有出现在只有出现在Group By子句中的属性,才可出现子句中的属性,才可出现在在Select子句中。子句中。例:例:统计各系学生的人数。统计各系学生的人数。 Select sdept,count(*) as stu_count From Student Group By sdept 343.5.2 Having针对聚合函数的结果值进行筛选(选择),针对聚合函数的结果值进行筛选(选择),它作用于分组计算结果集。它作用于分组计算结果集。跟在跟在Gr

23、oup By子句的后面,没有子句的后面,没有Group By则则针对全表。针对全表。例:例:列出具有两门(含)以上不及格的学生列出具有两门(含)以上不及格的学生的学号、不及格的课目数。的学号、不及格的课目数。 Select sno,count(sno) From SC Where grade = 2 353.5.3 Having与与Where的区别的区别 Where 决定哪些元组被选择参加运算,决定哪些元组被选择参加运算,作用于关系中的元组。作用于关系中的元组。Having 决定哪些分组符合要求,作用决定哪些分组符合要求,作用于分组。于分组。聚合函数的条件关系必须用聚合函数的条件关系必须用Ha

24、ving,Where中不应出现聚合函数。中不应出现聚合函数。363.5.4 聚合函数忽略聚合函数忽略NullCount:不计不计Sum:不将其计入不将其计入Avg:具有具有 Null 的元组不参与的元组不参与Max / Min:不参与不参与例:例:Select count(sdept) From Student Select Avg(sage) From Student 373.6 子查询子查询 子查询是嵌套在另一查询中的子查询是嵌套在另一查询中的 Select-From-Where 表达式(表达式(Where/Having)。)。SQL允许多层嵌套,由内而外地进行分析,允许多层嵌套,由内而外

25、地进行分析,子查询的结果作为父查询的查找条件。子查询的结果作为父查询的查找条件。可以用多个简单查询来构成复杂查询,以增可以用多个简单查询来构成复杂查询,以增强强SQL的查询能力。的查询能力。子查询中不使用子查询中不使用 Order By 子句,子句,Order By子句只能对最终查询结果进行排序。子句只能对最终查询结果进行排序。383.6.1 单值比较单值比较 返回单值的子查询,只返回一行一列返回单值的子查询,只返回一行一列父查询与单值子查询之间用比较运算符进行连接父查询与单值子查询之间用比较运算符进行连接运算符:运算符:、=、=、=、 例:例:找出与找出与95001同龄的学生同龄的学生 Se

26、lect * From Student Where sage = ( Select sage From Student Where sno = 95001 )393.6.2 多值多值 子查询返回多行一列子查询返回多行一列 运算符:运算符:In、All、Some(Any)、Exists 40q in标量值与子查询返回集中的某一个相等,标量值与子查询返回集中的某一个相等,true in 被用来测试多值中的成员。被用来测试多值中的成员。例:例:查询选修查询选修C01课程的学生的学号、姓名。课程的学生的学号、姓名。 Select sno,sname From Student Where sno IN

27、(Select sno From SC Where cno = C01 )子查询子查询多行一列多行一列41例:例:查询选修了查询选修了 数据库数据库的学生的学号和姓名的学生的学号和姓名 Select sno,sname From Student Where sno IN ( Select sno From SC Where cno IN ( Select cno From Course Where cname = 数据数据库)42q all多值比较:多值比较:多行一列多行一列父查询与多值子查询之间的比较需用父查询与多值子查询之间的比较需用All来连接来连接标量值标量值s比子查询返回集比子查询返

28、回集R中的每个都大时,中的每个都大时,sAll R 为为 True All 表示所有表示所有 all、 all、=all、 all all 等价于等价于 not in 例:例:找出年龄最小的学生找出年龄最小的学生 Select * From Student Where sage Some R为为True 或或 s Any R为为True Some(早期用早期用Any)表示某一个,只要有一个即返回真表示某一个,只要有一个即返回真 some、 some、=some、 some = some 等价于等价于 in、 some 不等价于不等价于 not in 44例:例:找出不是最小年龄的学生找出不是最

29、小年龄的学生 Select * From student Where sage some ( 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 )45q existsExists + 子查询用来判断该子查询是否返回元组子查询用来判断该子查询是否返回元组当子查询的结果集非空时,当子查询的结果集非空时

30、,Exists为为True当子查询的结果集为空时,当子查询的结果集为空时,Exists为为False不关心子查询的具体内容,因此用不关心子查询的具体内容,因此用 Select * 46例:例:列出选修了列出选修了C01课程的学生的学号、姓名课程的学生的学号、姓名 Select sno,sname From Student Where Exists ( Select * From SC Where SC.sno = Student.sno And cno = C01)47例:例:列出得过列出得过100分的学生的学号、姓名分的学生的学号、姓名 Select sno,sname From Stude

31、nt Where Exists ( Select * From SC Where SC.sno = Student.sno And grade = 100 )48例:例:查询选修了查询选修了C01课程的学生的系主任课程的学生的系主任 Select manager From department Where Exists ( Select * From student Where sdept = department.depid And Exists ( Select * From SC Where SC.sno = student.sno And cno = C01)49例:例:列出没有选列出

32、没有选C01课程的学生的学号、姓名课程的学生的学号、姓名 Select sno,sname From Student Where Not Exists ( Select * From SC Where SC.sno = Student.sno And cno = C01)Elelen Enmi胶原蛋白口服液买四赠一胶原蛋白口服液买四赠一 品牌正品情侣装品牌正品情侣装 亲子装全场包邮亲子装全场包邮 淘宝:淘宝:m/ 或者拍拍:或者拍拍:50例:例:查询选修了所有课程的学生的姓名查询选修了所有课程的学生的姓名( ForAll ) Select sname From Student Where No

33、t Exists ( Select * From Course Where Not Exists ( Select * From SC Where Student.sno = SC.sno And SC.cno = Co)这门课他没选这门课他没选这样的课是不存在的这样的课是不存在的51 SQL-92支持多列的成员资格测试(支持多列的成员资格测试(ASA7.0不支持)不支持)例:例:找出同系、同年龄、同性别的学生找出同系、同年龄、同性别的学生 Select * from Student as T Where(T.sdept,T.sage,T.ssex) IN ( Select sdept,sag

34、e,ssex From student as S Where S.sno T.sno ) 3.6.3 多列元组的比较多列元组的比较523.6.4 派生关系派生关系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

35、.sno = S.stu_no And avg_grade 75533.7 空值与连接空值与连接3.7.1 NULL表示数据的缺失表示数据的缺失一个确实存在,但我们不知道的值一个确实存在,但我们不知道的值对本实体此数值无意义,可能是设计上的失误对本实体此数值无意义,可能是设计上的失误是是SQL的关键字,用于任何类型描述缺失的值的关键字,用于任何类型描述缺失的值 543.7.3 NULL的运算法则的运算法则对对NULL值和其他任何值作算术运算时,值和其他任何值作算术运算时,结果为结果为NULL对对NULL值和其他任何值作比较时,结果值和其他任何值作比较时,结果为为UNKOWNIs Null /

36、Is Not Null553.7.4 Unkown的运算规则的运算规则视视True为为1,False为为0,Unkown为为1/2AND:取小:取小OR:取大:取大NOT:取:取1的补的补真值表不必死记硬背真值表不必死记硬背563.8 数据库的修改数据库的修改 v数据库修改包括插入数据、修改数数据库修改包括插入数据、修改数据、删除数据。据、删除数据。573.8.1 数据删除数据删除只能对整个元组操作,不能只删除某些属性上的只能对整个元组操作,不能只删除某些属性上的值。值。只能对一个关系起作用,若要从多个关系中删除只能对一个关系起作用,若要从多个关系中删除元组,则必须对每个关系分别执行删除命令。

37、元组,则必须对每个关系分别执行删除命令。 Delete From r Where P从关系从关系 r 中删除满足中删除满足P的元组,只是删除数据,的元组,只是删除数据,而不是定义。而不是定义。58删除单个元组删除单个元组例:例:删除学号为删除学号为95001的学生的选课信息的学生的选课信息 Delete From SCWhere sno = 95001删除多个元组删除多个元组例:例:删除选课而未参加考试的学生的选课信息删除选课而未参加考试的学生的选课信息 Delete From SCWhere grade is null删除整个关系中的所有数据删除整个关系中的所有数据例:例:删除所有学生的选课

38、信息删除所有学生的选课信息 Delete From SC593.8.2 数据插入数据插入q 单行插入:一次只插入一个元组单行插入:一次只插入一个元组例:例:新增一个学生信息新增一个学生信息 Insert Into Student Values ( 98001, Gloria,25, F, CS)60q 多行插入:插入一个集合多行插入:插入一个集合例:例:给给CS系的学生开设必修课系的学生开设必修课C05,建立选课信息,建立选课信息 Insert Into SC Select sno,cno,null From Student,Course Where sdept = CS and cno =

39、C05613.8.3 数据更新数据更新改变符合条件的某个(某些)元组的属性值改变符合条件的某个(某些)元组的属性值例:例:将将95001学生转入学生转入MA系系 Update Student Set sdept = MA Where sno = 95001 例:例:所有学生年龄加所有学生年龄加1 Update Student Set sage = sage + 1 62例:例:将选修将选修C05课程的学生的成绩改为该课的平均成绩课程的学生的成绩改为该课的平均成绩 Update SC Set grade = ( Select avg(grade ) From SC Where cno = C05

40、) Where cno = C05先计算先计算avg,再做,再做Update633.9 视图视图是从一个或几个基本表(或视图)中导出的虚表是从一个或几个基本表(或视图)中导出的虚表数据库中只保存它的定义数据库中只保存它的定义是是RDBMS提供给用户以多种角度观察数据库中提供给用户以多种角度观察数据库中数据的重要机制数据的重要机制创建视图、删除创建视图、删除 Create View v as Drop View v 64例:例:计算机系的花名册计算机系的花名册 Create View CS_Stu as Select sno, sname, ssex From Student Where sde

41、pt = CS653.9.1 视图(视图(View)视图名可以出现在任何关系名可以出现的地方视图名可以出现在任何关系名可以出现的地方例:例:列出计算机系的男生列出计算机系的男生 Select sno,sname From CS_Stu Where ssex = M 66例:例:建立学生平均成绩视图建立学生平均成绩视图 Create View avg_grade(sno,avg) as Select sno,avg(grade) From SC Group By sno例:例:找出平均成绩大于等找出平均成绩大于等75的学生的学生 Select * From avg_grade Where avg

42、 = 75注意:注意:此例的使用方法是非标准的。此例的使用方法是非标准的。 67avg不是不是原始属性原始属性视图的更新:单表、原始属性构成的视视图的更新:单表、原始属性构成的视图可以更新(像基本表那样更新)图可以更新(像基本表那样更新)由多表构成的视图由很大的限制由多表构成的视图由很大的限制视图中的非原始属性也不能更新视图中的非原始属性也不能更新例:例:Update avg_grade Set avg = 100 Where sno = 95001 683.9.2 视图的作用视图的作用 简化用户的操作简化用户的操作不同的用户可从不同的角度看待同一数据不同的用户可从不同的角度看待同一数据支持一

43、定的逻辑数据独立性支持一定的逻辑数据独立性数据的安全性数据的安全性693.9.3 综合示例综合示例Create Domain 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)70Create Table Course ( cno char(10) not null , cname varchar(20) , cred

44、it smallint, primary key (cno)Create Table SC ( sno char(10) not null , cno char(10) not null , grade smallint, primary key (sno, cno), check(grade =0 and grade =100)713.10 嵌入式嵌入式SQL 前面所介绍的前面所介绍的SQL语言作为一种独语言作为一种独立的自含式语言,是联机终端用户在交立的自含式语言,是联机终端用户在交互环境下使用的,称为交互式互环境下使用的,称为交互式SQL(INTERACTIVE SQL),简称),简称I

45、SQL。72v在实际应用当中,常常还需要解决这样在实际应用当中,常常还需要解决这样两个问题:两个问题:有许多应用是过程化的,要求根据不同的有许多应用是过程化的,要求根据不同的条件来完成不同的任务;条件来完成不同的任务;有许多应用不仅需要读出数据,还必须读有许多应用不仅需要读出数据,还必须读查询得到的数据进行处理。查询得到的数据进行处理。73 对于上述问题,单独使用对于上述问题,单独使用SQL语言是很难满语言是很难满足实际需求的。为了解决这些问题,足实际需求的。为了解决这些问题,SQL还提出还提出了另外一种使用方式,即可以作为一种数据子语了另外一种使用方式,即可以作为一种数据子语言嵌入某些主语言

46、中,利用高级语言的过程性结言嵌入某些主语言中,利用高级语言的过程性结构来弥补构来弥补SQL语言实现复杂应用方面的不足。这语言实现复杂应用方面的不足。这种将种将SQL嵌入嵌入COBOL, C, C+, FORTRAN,中使中使用,称为嵌入式用,称为嵌入式SQL(EMBEDDED SQL),简称,简称ESQL;而接受;而接受SQL嵌入的高级语言,称为主语嵌入的高级语言,称为主语言或者宿主语言。言或者宿主语言。74v对于宿主语言中的嵌入式对于宿主语言中的嵌入式SQl,DBMS通常采用两种方法处理。通常采用两种方法处理。一是预编译方法;一是预编译方法;一是修改和扩充主语言方法,使之能够一是修改和扩充主

47、语言方法,使之能够处理处理SQL。 当前主要采用第一种方法。其过程当前主要采用第一种方法。其过程是,有是,有DBMS的预处理程序对源程序进的预处理程序对源程序进行扫描,识别出行扫描,识别出SQL语句,然后将它们语句,然后将它们转换为主语言调用语句,从而使得主语转换为主语言调用语句,从而使得主语言能过识别它们,最后由主语言的编译言能过识别它们,最后由主语言的编译程序将整个源程序编译成目标代码。程序将整个源程序编译成目标代码。75v所有在终端交互方式下使用的所有在终端交互方式下使用的SQL均能在嵌入方均能在嵌入方式下使用。由于使用方式的差异,存在着具体操式下使用。由于使用方式的差异,存在着具体操作

48、方式上的不同。但无论是怎样的使用方式,都作方式上的不同。但无论是怎样的使用方式,都需要解决下面三个主要问题:需要解决下面三个主要问题:应用程序中主语言的语句和应用程序中主语言的语句和SQL的语句,这两种的语句,这两种语句;语句;应用程序中既有主语言变量又有应用程序中既有主语言变量又有SQL列变量,如列变量,如何区分这两种变量;何区分这两种变量;主语言变量一般均为标量,而主语言变量一般均为标量,而SQL中的列变量一中的列变量一般均为集合量般均为集合量,如何建立由集合量到标量的转换。如何建立由集合量到标量的转换。763.10.1 主语言语句和主语言语句和SQL语句的区分语句的区分在嵌入方式下,所有

49、在嵌入方式下,所有SQL语句在嵌入主语句的程语句在嵌入主语句的程序时几乎都必须在其前缀加序时几乎都必须在其前缀加EXEC SQL,而结束,而结束标志可以因主语言不同而不同,一般是在语句结标志可以因主语言不同而不同,一般是在语句结束处用束处用END-EXEC 或用分号或用分号“;”。在程序中所使用的在程序中所使用的SQL中的表,包括基表和视图中的表,包括基表和视图都要用都要用EXEC SQL DECLEAR语句加以说明。语句加以说明。SQL语句执行后,系统要反馈给程序以信息,这语句执行后,系统要反馈给程序以信息,这些信息均送入些信息均送入SQL通讯区(通讯区(SQL Communication

50、Area)SQLCA。SQLCA是一个数据结构,在应用程序中用是一个数据结构,在应用程序中用EXEC SQL INCLUDE SQLCA 语句加以定义。语句加以定义。77SQLCA中有一个存放每次执行中有一个存放每次执行SQL语句后返回语句后返回代码的变量代码的变量SQLCODE,这是一个整型变量,这是一个整型变量,反映反映SQL语句执行后的结果状态。语句执行后的结果状态。应用程序每执行一条应用程序每执行一条SQl语句之后都应测试一次语句之后都应测试一次SQLCODE的值。的值。当它为当它为0时表示正常结束,即时表示正常结束,即SQL语句成功;语句成功;非非0时为非正常结束,时为非正常结束,S

51、QL语句不成功。语句不成功。即使说,即使说,SQLCODE的基本功用是的基本功用是DBMS向宿主向宿主程序报告执行程序报告执行SQL语句的情况。语句的情况。Elelen Enmi胶原蛋白口服液买四赠一胶原蛋白口服液买四赠一 品牌正品情侣装品牌正品情侣装 亲子装全场包邮亲子装全场包邮 淘宝:淘宝: 或者拍拍:或者拍拍:78例:例:在一些高级语言中使用嵌入式在一些高级语言中使用嵌入式SQL语语言的格式与删除言的格式与删除S的情况。的情况。v在在C中使用中使用SQL语言使以语言使以EXEC SQL开始,开始,以分号以分号“;”结束,其格式为:结束,其格式为:EXEC SQL;删除关系删除关系S的命令

52、为:的命令为:EXEC SQL DROP TABLE S;79v在在COBLE 中以中以EXEC SQL开始,以开始,以END_EXEC结束,格式为:结束,格式为: EXEC SQLEND_EXEC删除删除S的语句为:的语句为: EXEC SQL DROP TABLE S END_EXECv在在Power Builder中使用中使用SQL与通常与通常SQL没没有任何区别,语句前不需要加任何有任何区别,语句前不需要加任何EXEC SQL,只需用分号作为语句结束标记,即,只需用分号作为语句结束标记,即删除删除S的语句为:的语句为: DROP TABLE S80 嵌入式嵌入式SQL语句根据其作用的不

53、同,可以语句根据其作用的不同,可以分为可执行语句和说明性语句两类。可执行语分为可执行语句和说明性语句两类。可执行语句又分为数据定义、数据控制和数据操作三种。句又分为数据定义、数据控制和数据操作三种。在宿主语言编写的程序(宿主程序)中任何允在宿主语言编写的程序(宿主程序)中任何允许出现执行高级语言语句的地方,都可以嵌入许出现执行高级语言语句的地方,都可以嵌入可执行可执行SQL语句语句;任何允许出现说明性高级语句任何允许出现说明性高级语句的地方,都可以写说明性的地方,都可以写说明性SQL语句。语句。813.10.2 主语言变量与主语言变量与SQL变量的区别变量的区别1.主变量与指示变量主变量与指示

54、变量v主变量主变量 在嵌入方式下,程序中的在嵌入方式下,程序中的SQL语句语句段内可使用主语言的程序变量来输入和段内可使用主语言的程序变量来输入和输出数据。输出数据。SQL中使用主语言程序定义中使用主语言程序定义的变量称为主变量。的变量称为主变量。82主变量根据其作用的不同,分为输入主主变量根据其作用的不同,分为输入主变量和输出主变量。变量和输出主变量。输入主变量由应用程序对其赋值,输入主变量由应用程序对其赋值,SQL加以引用;加以引用;输出主变量由输出主变量由SQL语句对其赋值或设置语句对其赋值或设置状态信息,返回给应用程序。状态信息,返回给应用程序。一个主变量可以既是输入主变量,又是一个主

55、变量可以既是输入主变量,又是输出主变量。输出主变量。83v利用输入主变量,我们可以完成以下功能:利用输入主变量,我们可以完成以下功能:指定向数据库中插入的数据;指定向数据库中插入的数据;把数据库中的数据修改为指定值;把数据库中的数据修改为指定值;指定指定WHERE子句或子句或HAVING子句中的条件。子句中的条件。利用输出主变量,我们可以得到利用输出主变量,我们可以得到SQL语句的语句的执行结果和状态信息。执行结果和状态信息。84v 指示变量指示变量一个主变量可以附带一个任选的指示变量一个主变量可以附带一个任选的指示变量(indicator variable)。)。指示变量是一个整型变量,用来

56、指示变量是一个整型变量,用来“指示指示”所所述主变量的值或者条件。述主变量的值或者条件。指示变量可以指示输入主变量是否为空值,指示变量可以指示输入主变量是否为空值,可以检测输出主变量是否为空值,值是否被可以检测输出主变量是否为空值,值是否被截断等。截断等。852.主变量与指示变量的说明主变量与指示变量的说明 所有所有SQL语句中用到的主变量和指语句中用到的主变量和指示变量都必须加以说明。示变量都必须加以说明。v说明的开头行与结尾行分别为说明的开头行与结尾行分别为:EXEC SQL BEGIN DECLEAR SECTIONEXEC SQL END DECLEAR SECTION。说明了之后的主

57、变量和指示变量,可以在说明了之后的主变量和指示变量,可以在SQL语句中任何一个能够使用表达式的地语句中任何一个能够使用表达式的地方调用。方调用。86SQL语句中的主变量名称前必须添加冒号语句中的主变量名称前必须添加冒号( )作为标志,这是为了与数据库中的对)作为标志,这是为了与数据库中的对象名(表名,视图名,属性名等)向区别。象名(表名,视图名,属性名等)向区别。同样,同样,SQL语句中的指示变量之前也必须语句中的指示变量之前也必须加有冒号,同时紧跟在所指的主变量之后。加有冒号,同时紧跟在所指的主变量之后。在在SQL语句之外的其它地方,说明之后的语句之外的其它地方,说明之后的主变量和指示变量可

58、以直接引用,不必添主变量和指示变量可以直接引用,不必添加冒号。加冒号。在主程序内,一般不出现在主程序内,一般不出现SQL变量。能够变量。能够使用表达式的地方调用。使用表达式的地方调用。873.10.3游标语句的使用游标语句的使用1. 概念概念 SQL语言与主语言在数据处理有着不同方语言与主语言在数据处理有着不同方式。式。SQL是面向集合的,一条是面向集合的,一条SQL语句原则上语句原则上可以产生或处理多条记录。主语言使面向记录可以产生或处理多条记录。主语言使面向记录的,一组主变量一次只能存放一条记录,仅仅的,一组主变量一次只能存放一条记录,仅仅使用主变量并不能够完全满足使用主变量并不能够完全满

59、足SQL语句向应用语句向应用程序输出数据的要求。这里基本的问题是,在程序输出数据的要求。这里基本的问题是,在嵌入方式下,嵌入方式下,SQL的变量是集合型的,主变量的变量是集合型的,主变量为标量型的,为标量型的, SQL变量不能够直接提供给主程变量不能够直接提供给主程序使用。为了解决这个问题,就需要有一种机序使用。为了解决这个问题,就需要有一种机制,将制,将SQL变量中的集合量逐个取出送入主变变量中的集合量逐个取出送入主变量内,进而提供给主程序使用。解决问题的基量内,进而提供给主程序使用。解决问题的基本思路是在嵌入式本思路是在嵌入式SQL中引入中引入“游标游标”的概念,的概念,用游标来协调用游标

60、来协调SQL和主语言的两种不同数据处和主语言的两种不同数据处理方式。理方式。88 游标本质上是系统为用户开设的一游标本质上是系统为用户开设的一个数据缓冲区,用以存放个数据缓冲区,用以存放SQL语句的结语句的结果数据集。果数据集。 每个游标区都有一个名字。用户可每个游标区都有一个名字。用户可以通过游标逐一读取数据记录,然后赋以通过游标逐一读取数据记录,然后赋值给主变量值给主变量 ,再交由主语言程序作进一,再交由主语言程序作进一步的处理。步的处理。 利用游标概念提供上述协调机制的利用游标概念提供上述协调机制的基本方法是在嵌入式基本方法是在嵌入式SQL中增加一组游中增加一组游标(标(cursor)语

61、句。)语句。892.游标语句游标语句v游标定义语句游标定义语句有为某一种语句的结果定义一个命名有为某一种语句的结果定义一个命名的游标。其语句为:的游标。其语句为:EXEC SQL DECLARE CURSOR映像语句映像语句90游标打开语句游标打开语句游标定义后再使用时需要打开游标,此时游标定义后再使用时需要打开游标,此时游标处于活动状态并指向集合的第一个记游标处于活动状态并指向集合的第一个记录。其一般形式为:录。其一般形式为:EXEC SQL OPEN 游标关闭语句游标关闭语句游标使用完后需要关闭。其一般形式为:游标使用完后需要关闭。其一般形式为:EXEC SQL CLOSE 91游标推进语

62、句游标推进语句该语句读出当前记录,并将游标推该语句读出当前记录,并将游标推向集合中的下一个记录,此语句常向集合中的下一个记录,此语句常用于循环,其一般形式为:用于循环,其一般形式为:EXEC SQL FETCH 92例:例:查询查询DEPT变量中给出的某个系的全体学生的信变量中给出的某个系的全体学生的信息。息。 EXEC SQL DECLARE SX CURSOR FOR SELECT S#,Sn,Sa FROM S WHERE Sd=:DEPT; EXEC SQL OPEN SX; DO WHILE EXEC SQL FETCH SX; INTO S# ,SNAME,AGE . END; E

63、XEC SQL CLOSE SX;93作业:作业:课本习题课本习题3的:的:2,13Elelen Enmi胶原蛋白口服液买四赠一胶原蛋白口服液买四赠一 品牌正品情侣装品牌正品情侣装 亲子装全场包邮亲子装全场包邮 淘宝:淘宝: 或者拍拍:或者拍拍:94本章小结本章小结简单查询:简单查询:选择条件、排序输出、聚合运算以及分选择条件、排序输出、聚合运算以及分组处理。组处理。连接查询:连接查询:查询的并、交、差;连接与笛卡尔积;查询的并、交、差;连接与笛卡尔积;元组变量。元组变量。嵌套查询:嵌套查询:产生单值的子查询;涉及到关系的选择产生单值的子查询;涉及到关系的选择条件;涉及到元组的选择条件;相关子查询。条件;涉及到元组的选择条件;相关子查询。数据库更新:数据库更新:插入、删除、修改。插入、删除、修改。定义关系模式:定义关系模式:定义表、撤消表;更改关系模式;定义表、撤消表;更改关系模式;建立和撤消索引。建立和撤消索引。视图:视图:定义视图、查询视图、更新视图、撤消视图。定义视图、查询视图、更新视图、撤消视图。 95

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号