为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

数据库语言SQL

2011-03-30 50页 ppt 263KB 54阅读

用户头像

is_546863

暂无简介

举报
数据库语言SQLnull3 数据库语言SQL3 数据库语言SQL Elelen Enmi胶原蛋白口服液买四赠一 品牌正品情侣装 亲子装全场包邮 淘宝:http://li370286038.taobao.com/ 或者拍拍:http://shop.paipai.com/370286038本章目标本章目标 本章主要介绍SQL语言的基本语法和使用方式,要求熟练掌握SQL语言的使用规则,能够根据实际需求写出能够准确完成操作的SQL语句。3.1 概述3.1 概述SQL的发展 1974年,由Boyce和Chamberlin提出...
数据库语言SQL
null3 数据库语言SQL3 数据库语言SQL Elelen Enmi胶原蛋白口服液买四赠一 品牌正品情侣装 亲子装全场包邮 淘宝:http://li370286038.taobao.com/ 或者拍拍:http://shop.paipai.com/370286038本章目标本章目标 本章主要介绍SQL语言的基本语法和使用方式,要求熟练掌握SQL语言的使用规则,能够根据实际需求写出能够准确完成操作的SQL语句。3.1 概述3.1 概述SQL的发展 1974年,由Boyce和Chamberlin提出 1975~1979,IBM San Jose Research Lab的关系数据库管理系统原型System R实施了这种语言 SQL-86是第一个SQL SQL-89、SQL-92(SQL2)、SQL-99(SQL3) 现状 大部分DBMS产品都支持SQL,成为操作数据库的标准语言 有特殊性,支持程度不同null 数据定义(DDL) 定义、删除、修改关系模式(基本表) 定义、删除视图(View) 定义、删除索引(Index) 数据操纵(DML) 数据查询 数据增、删、改 数据控制(DCL) 用户访问权限的授予、收回3.1.1 SQL的功能null 交互式SQL 一般DBMS都提供联机交互工具 用户可直接键入SQL命令对数据库进行操作 由DBMS来进行解释 嵌入式SQL 能将SQL语句嵌入到高级语言(宿主语言) 使应用程序充分利用SQL访问数据库的能力、宿主语言的过程处理能力 一般需要预编译,将嵌入的SQL语句转化为宿主语言编译器能处理的语句3.1.2 SQL的形式null数据定义 Create、Drop、Alter 数据操纵 数据查询:Select 数据修改:Insert、Update、Delete 数据控制 Grant、Revoke3.1.3 SQL的动词null数据查询是数据库应用的核心功能。 基本结构: Select A1, A2, ..., An From r1, r2, ..., rm Where P3.2 数据查询πA1, A2, ..., An(p(r1×r1×...×rm))3.2.1 Select语句的含义 3.2.1 Select语句的含义 对 From 子句中的各关系,作笛卡儿积(×) 对 Where 子句中的逻辑表达式进行选择(σ)运算,找出符合条件的元组。 根据 Select 子句中的属性列表,对上述结果作投影( π)操作。 查询操作的对象是关系,结果还是一个关系,是一个结果集,是一个动态数据集。3.2.2 Select子句 对应于关系代数的投影(π)运算,用以列出查询结果集中的期望属性。null 重复元组 SQL 具有包的特性 Select子句的缺省情况是保留重复元组(ALL),可用 Distinct去除重复元组 Select Distinct sdept From Student Select All sdept From Student 去除重复元组:费时 需要临时表的支持null *与属性列表 星号 * 表示所有属性 星号 * :按关系模式中属性的顺序排列,并具有一定的逻辑数据独立性 显式列出属性名:按用户顺序排列 Select * From Student Select Student.*,cno,grade From Student,SC Where Student.sno = SC.snonull 更名 为结果集中的某个属性改名 使结果集更具可读性 Select sno as stu_no,cno as course_no, grade From SC Select sno,sname,2001 - sage as birthday From Student3.2.3 where子句3.2.3 where子句where子句对应与关系代数中的选择(σ)。 查询满足指定条件的元组可以通过Where子句来实现。 使where子句中的逻辑表达式返回True值的元组,是符合要求的元组,将被选择出来。null 运算符 比较:<、<=、>、>=、=、<>、not + ~ 确定范围: Between A and B、Not Between A and B 确定集合:IN、NOT IN 字符匹配:LIKE,NOT LIKE 空值:IS NULL、IS NOT NULL 多重条件:AND、OR、NOT null like 字符匹配:Like、Not Like 通配符: % —— 匹配任意字符串 _ —— 匹配任意一个字符 大小写敏感null列出姓张的学生的学号、姓名。 Select sno,sname From Student Where sname LIKE ‘张%’ 列出张姓且单名的学生的学号、姓名。 Select sno,sname From Student Where sname LIKE ‘张_ _’null 转义符 escape 例:列出课程名称中带有‘_’的课号及课名。 Select cno,cname From Course Where cname LIKE ‘%\_%’ escape ‘\’3.2.4 from子句3.2.4 from子句From子句对应与关系代数中的笛卡儿积(×) 列出将被扫描的关系(表) 例:列出所有学生的学号、姓名、课号、成绩。 Select Sudent.sno,sname,SC.cno,grade From Student,SC Where Student.sno = SC.snonull 元组变量 为 From 子句中的关系定义元组变量 方便关系名的引用 在同一关系的笛卡儿积中进行辨别 例:列出与95001同岁的同学的学号,姓名,年龄。 Select T.sno,T.sname,T.sage From Student as T,Student as S Where S.sno = ‘95001’ AND T.sage = S.sage3.2.5 Order By子句3.2.5 Order By子句指定结果集中元组的排列次序 耗时 ASC(缺省)、DESC、未选中的属性 例:列出CS系中的男生的学号、姓名、年龄,并按年龄进行排列(升序)。 Select sno,sname, sage From Student Where sdept = ‘CS’ Order By sage ASC 3.3 数据定义语言3.3 数据定义语言数据定义语言(Data Definition Language) Create、Drop、Alter 定义一组关系(基本表)、说明各关系的信息 各关系的模式 各属性的值域 完整性约束 索引 安全性和权限 3.3.1 SQL中的域类型3.3.1 SQL中的域类型 字符型 char(n) 、varchar(n) 数值型 integer、smallint numeric(p,d) real、double、float(n) 日期/时间型 date time3.3.2 SQL中的域定义3.3.2 SQL中的域定义 域定义语句(SQL-92支持) 需重复使用的 Create Domain stu_name varchar(20) Create Domain zip_code char(6) 域的删除 Drop Domain datelog 各DBMS的方法是不同的Restrict/Cascade 使用该域的属性的处理 3.3.3 SQL中的模式定义3.3.3 SQL中的模式定义 Create Table r (A1D1, A2D2,…, AnDn, <表级完整性约束1>, … <表级完整性约束n>) 其中: r 关系名(表名)、 Ai 关系 r 的一个属性名 Dn 属性Ai域值的域类型 主键声明: primary key (Aj1 ,Aj2 ,…,Ajvm )null Create Domain stu_name varchar(20) Create Table Student ( sno char(10) primary key(sno) , sname stu_name , sage smallint, ssex char(1), sdept char(2))null Create 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胶原蛋白口服液买四赠一 品牌正品情侣 装 亲子装全场包邮 淘宝:http://li370286038.taoba o.com/ 或者拍拍:http://shop.paipai.com/3702860383.3.4 删除表结构3.3.4 删除表结构用SQL删除关系(表) 将整个关系模式(表结构)彻底删除 表中的数据也将被删除 Drop Table r Drop Table student3.3.5 修改表结构3.3.5 修改表结构 删除表中的某属性 去除属性及相应的数据 Alter Table r Drop A 增加表中的属性 向已经存在的表中添加属性 allow null 已有的元组中该属性的值被置为Null Alter Table r Add A D Alter Table student phone char(16)3.3.6 Default Value3.3.6 Default Value属性的默认值 用户不提供某属性的值时,默认值被使用 初始值 DDL中: ModifyDate char(30) Default TimeStamp Alter Table student Add ID integer Default 10013.3.7 索引Index3.3.7 索引Index索引是一种数据结构,是对照表、指针表 索引是为了加速对表中元组的检索而创建的一种分散存储结构(B树) 索引是对表而建立的,由除存放表的数据页面以外的索引页面组成 索引是把双刃剑,减慢更新的速度 索引不是SQL标准的要求 索引的种类 聚簇索引(Clustered Index) 非聚簇索引(Non-Clustered Index) null 聚簇索引(Clustered Index) 表中的元组按聚簇索引的顺序物理地存放 根级页面---中间层页面---叶级页面(数据页面) 一个表中只能有一个聚簇索引 更新的复杂性,需要大量的临时空间 非聚簇索引(Non-Clustered Index) 表中的元组按聚簇索引的顺序物理地存放 根级页面---中间层页面---叶级页面(数据页面) 一个表中只能有一个聚簇索引 更新的复杂性,需要大量的临时空间null CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED] INDEX index-name On TableName(Column,Column,…) Create Index YearIndex On Movie(year) Create Clustered Index SnoIndex On student(sno) Drop Index YearIndex3.4 数据添加3.4 数据添加用SQL的插入语句,向数据库表中添加数据 按关系模式的属性顺序 Insert Into Student Values ( ‘0095001’, ‘张三’,27, ‘M’, ‘CS’ ) 按指定的属性顺序,也可以只添加部分属性(非Null属性为必需) Insert Into Student ( sno, sname, sage) Values ( ‘0095002’, ‘李四’, 26 ) 3.5 聚合函数 3.5 聚合函数 把一列中的值进行聚合运算,返回单值的函数。 五个预定义的聚合函数: 平均值:Avg 总和: Sum 最小值:Min 最大值:Max 计数:Count Count(*)、Count(Distinct…) 3.5.1 Group By3.5.1 Group By将查询结果集按某一列或多列的值分组,值相等的为一组,一个分组以一个元组的形式出现。 只有出现在Group By子句中的属性,才可出现在Select子句中。 例:统计各系学生的人数。 Select sdept,count(*) as stu_count From Student Group By sdept 3.5.2 Having3.5.2 Having针对聚合函数的结果值进行筛选(选择),它作用于分组计算结果集。 跟在Group By子句的后面,没有Group By则针对全表。 例:列出具有两门(含)以上不及格的学生的学号、不及格的课目数。 Select sno,count(sno) From SC Where grade < 60 Group By sno Having count(sno) >= 2 3.5.3 Having与Where的区别 3.5.3 Having与Where的区别 Where 决定哪些元组被选择参加运算,作用于关系中的元组。 Having 决定哪些分组符合要求,作用于分组。 聚合函数的条件关系必须用Having,Where中不应出现聚合函数。3.5.4 聚合函数忽略Null3.5.4 聚合函数忽略NullCount:不计 Sum:不将其计入 Avg:具有 Null 的元组不参与 Max / Min:不参与 例:Select count(sdept) From Student Select Avg(sage) From Student 3.6 子查询 3.6 子查询 子查询是嵌套在另一查询中的 Select-From-Where 表达式(Where/Having)。 SQL允许多层嵌套,由内而外地进行分析,子查询的结果作为父查询的查找条件。 可以用多个简单查询来构成复杂查询,以增强SQL的查询能力。 子查询中不使用 Order By 子句,Order By子句只能对最终查询结果进行排序。3.6.1 单值比较 3.6.1 单值比较 返回单值的子查询,只返回一行一列 父查询与单值子查询之间用比较运算符进行连接 运算符:>、>=、=、<=、<、 <> 例:找出与95001同龄的学生 Select * From Student Where sage = ( Select sage From Student Where sno = ‘95001’ )3.6.2 多值3.6.2 多值 子查询返回多行一列 运算符:In、All、Some(Any)、Exists null in 标量值与子查询返回集中的某一个相等,true in 被用来测试多值中的成员。 例:查询选修‘C01’课程的学生的学号、姓名。 Select sno,sname From Student Where sno IN (Select sno From SC Where cno = ‘C01’ )null例:查询选修了 ‘数据库’的学生的学号和姓名 Select sno,sname From Student Where sno IN ( Select sno From SC Where cno IN ( Select cno From Course Where cname = ‘数据库’))null all 多值比较:多行一列 父查询与多值子查询之间的比较需用All来连接 标量值s比子查询返回集R中的每个都大时,s>All R 为 True All 表示所有 > all、< all、<=all、>=all、<> all<> all 等价于 not in 例:找出年龄最小的学生 Select * From Student Where sage < all ( Select sage From Student ) null some、any 多值比较:多行一列 父查询与多值子查询之间的比较需用Some/Any来连接 标量值s比子查询返回集R中的某一个都大时,s > Some R为True 或 s > Any R为True Some(早期用Any)表示某一个,只要有一个即返回真 > some、< some、<=some、>=some、<> some = some 等价于 in、<> some 不等价于 not in null例:找出不是最小年龄的学生 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 )null exists Exists + 子查询用来判断该子查询是否返回元组 当子查询的结果集非空时,Exists为True 当子查询的结果集为空时,Exists为False 不关心子查询的具体内容,因此用 Select * null例:列出选修了C01课程的学生的学号、姓名 Select sno,sname From Student Where Exists ( Select * From SC Where SC.sno = Student.sno And cno = ‘C01’) null例:列出得过100分的学生的学号、姓名 Select sno,sname From Student Where Exists ( Select * From SC Where SC.sno = Student.sno And grade = 100 ) null例:查询选修了‘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’))null例:列出没有选C01课程的学生的学号、姓名 Select sno,sname From Student Where Not Exists ( Select * From SC Where SC.sno = Student.sno And cno = ‘C01’) Elelen Enmi胶原蛋白口服液买四赠一 品牌正品情侣装 亲子装全场包邮 淘宝:http://li370286038.taobao.co m/ 或者拍拍:http://shop.paipai.com/370286038null例:查询选修了所有课程的学生的姓名( ForAll ) Select sname From Student Where Not Exists ( Select * From Course Where Not Exists ( Select * From SC Where Student.sno = SC.sno And SC.cno = Course.cno))3.6.3 多列元组的比较3.6.3 多列元组的比较 SQL-92支持多列的成员资格测试(ASA7.0不支持) 例:找出同系、同年龄、同性别的学生 Select * from Student as T Where(T.sdept,T.sage,T.ssex) IN ( Select sdept,sage,ssex From student as S Where S.sno <> T.sno ) 3.6.4 派生关系3.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.sno = S.stu_no And avg_grade > 753.7 空值与连接3.7 空值与连接 3.7.1 NULL 表示数据的缺失 一个确实存在,但我们不知道的值 对本实体此数值无意义,可能是上的失误 是SQL的关键字,用于任何类型描述缺失的值 3.7.3 NULL的运算法则3.7.3 NULL的运算法则对NULL值和其他任何值作算术运算时,结果为NULL 对NULL值和其他任何值作比较时,结果为UNKOWN Is Null / Is Not Null3.7.4 Unkown的运算规则3.7.4 Unkown的运算规则视True为1,False为0,Unkown为1/2 AND:取小 OR:取大 NOT:取1的补 真值表不必死记硬背3.8 数据库的修改 3.8 数据库的修改 数据库修改包括插入数据、修改数据、删除数据。3.8.1 数据删除3.8.1 数据删除只能对整个元组操作,不能只删除某些属性上的值。 只能对一个关系起作用,若要从多个关系中删除元组,则必须对每个关系分别执行删除命令。 Delete From r Where P 从关系 r 中删除满足P的元组,只是删除数据,而不是定义。null删除单个元组 例:删除学号为95001的学生的选课信息 Delete From SC Where sno = ‘95001’ 删除多个元组 例:删除选课而未参加考试的学生的选课信息 Delete From SC Where grade is null 删除整个关系中的所有数据 例:删除所有学生的选课信息 Delete From SC3.8.2 数据插入3.8.2 数据插入 单行插入:一次只插入一个元组 例:新增一个学生信息 Insert Into Student Values ( ‘98001’, ‘Gloria’,25, ‘F’, ‘CS’)null 多行插入:插入一个集合 例:给CS系的学生开设必修课C05,建立选课信息 Insert Into SC Select sno,cno,null From Student,Course Where sdept = ‘CS’ and cno = ‘C05’3.8.3 数据更新3.8.3 数据更新改变符合条件的某个(某些)元组的属性值 例:将95001学生转入MA系 Update Student Set sdept = ‘MA’ Where sno = ‘95001’ 例:所有学生年龄加1 Update Student Set sage = sage + 1 null例:将选修C05课程的学生的成绩改为该课的平均成绩 Update SC Set grade = ( Select avg(grade ) From SC Where cno = ‘C05’) Where cno = ‘C05’3.9 视图3.9 视图是从一个或几个基本表(或视图)中导出的虚表 数据库中只保存它的定义 是RDBMS提供给用户以多种角度观察数据库中数据的重要机制 创建视图、删除 Create View v as Drop View v null例:计算机系的花名册 Create View CS_Stu as Select sno, sname, ssex From Student Where sdept = ‘CS’3.9.1 视图(View)3.9.1 视图(View)视图名可以出现在任何关系名可以出现的地方 例:列出计算机系的男生 Select sno,sname From CS_Stu Where ssex = ‘M’ null例:建立学生平均成绩视图 Create View avg_grade(sno,avg) as Select sno,avg(grade) From SC Group By sno 例:找出平均成绩大于等75的学生 Select * From avg_grade Where avg >= 75 注意:此例的使用方法是非标准的。 null视图的更新:单表、原始属性构成的视图可以更新(像基本表那样更新) 由多表构成的视图由很大的限制 视图中的非原始属性也不能更新 例:Update avg_grade Set avg = 100 Where sno = ‘95001’ 3.9.2 视图的作用 3.9.2 视图的作用 简化用户的操作 不同的用户可从不同的角度看待同一数据 支持一定的逻辑数据独立性 数据的安全性3.9.3 综合示例3.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’)))nullCreate Table Course ( cno char(10) not null , cname varchar(20) , credit 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))3.10 嵌入式SQL3.10 嵌入式SQL 前面所介绍的SQL语言作为一种独立的自含式语言,是联机终端用户在交互环境下使用的,称为交互式SQL(INTERACTIVE SQL),简称ISQL。null在实际应用当中,常常还需要解决这样两个问题: 有许多应用是过程化的,要求根据不同的条件来完成不同的任务; 有许多应用不仅需要读出数据,还必须读查询得到的数据进行处理。null 对于上述问题,单独使用SQL语言是很难满足实际需求的。为了解决这些问题,SQL还提出了另外一种使用方式,即可以作为一种数据子语言嵌入某些主语言中,利用高级语言的过程性结构来弥补SQL语言实现复杂应用方面的不足。这种将SQL嵌入COBOL, C, C++, FORTRAN,中使用,称为嵌入式SQL(EMBEDDED SQL),简称ESQL;而接受SQL嵌入的高级语言,称为主语言或者宿主语言。null对于宿主语言中的嵌入式SQl,DBMS通常采用两种方法处理。 一是预编译方法; 一是修改和扩充主语言方法,使之能够处理SQL。 当前主要采用第一种方法。其过程是,有DBMS的预处理程序对源程序进行扫描,识别出SQL语句,然后将它们转换为主语言调用语句,从而使得主语言能过识别它们,最后由主语言的编译程序将整个源程序编译成目标代码。null所有在终端交互方式下使用的SQL均能在嵌入方式下使用。由于使用方式的差异,存在着具体操作方式上的不同。但无论是怎样的使用方式,都需要解决下面三个主要问题: 应用程序中主语言的语句和SQL的语句,这两种语句; 应用程序中既有主语言变量又有SQL列变量,如何区分这两种变量; 主语言变量一般均为标量,而SQL中的列变量一般均为集合量,如何建立由集合量到标量的转换。3.10.1 主语言语句和SQL语句的区分3.10.1 主语言语句和SQL语句的区分在嵌入方式下,所有SQL语句在嵌入主语句的程序时几乎都必须在其前缀加EXEC SQL,而结束标志可以因主语言不同而不同,一般是在语句结束处用END-EXEC 或用分号“;”。 在程序中所使用的SQL中的表,包括基表和视图都要用EXEC SQL DECLEAR语句加以说明。 SQL语句执行后,系统要反馈给程序以信息,这些信息均送入SQL通讯区(SQL Communication Area)SQLCA。 SQLCA是一个数据结构,在应用程序中用EXEC SQL INCLUDE SQLCA 语句加以定义。nullSQLCA中有一个存放每次执行SQL语句后返回代码的变量SQLCODE,这是一个整型变量,反映SQL语句执行后的结果状态。 应用程序每执行一条SQl语句之后都应测试一次SQLCODE的值。 当它为0时表示正常结束,即SQL语句成功; 非0时为非正常结束,SQL语句不成功。 即使说,SQLCODE的基本功用是DBMS向宿主程序执行SQL语句的情况。Elelen Enmi胶原蛋白口服液买四赠一 品牌正品情侣装 亲子装全场包邮 淘宝:http://li370286038.taobao.com/ 或者拍拍:http://shop.paipai.com/370286038null 例:在一些高级语言中使用嵌入式SQL语言的与删除S的情况。 在C中使用SQL语言使以EXEC SQL开始,以分号“;”结束,其格式为: EXEC SQL; 删除关系S的命令为: EXEC SQL DROP TABLE S;null在COBLE 中以EXEC SQL开始,以END_EXEC结束,格式为: EXEC SQLEND_EXEC 删除S的语句为: EXEC SQL DROP TABLE S END_EXEC 在Power Builder中使用SQL与通常SQL没有任何区别,语句前不需要加任何EXEC SQL,只需用分号作为语句结束标记,即删除S的语句为: DROP TABLE Snull 嵌入式SQL语句根据其作用的不同,可以分为可执行语句和说明性语句两类。可执行语句又分为数据定义、数据控制和数据操作三种。在宿主语言编写的程序(宿主程序)中任何允许出现执行高级语言语句的地方,都可以嵌入可执行SQL语句;任何允许出现说明性高级语句的地方,都可以写说明性SQL语句。3.10.2 主语言变量与SQL变量的区别3.10.2 主语言变量与SQL变量的区别主变量与指示变量 主变量 在嵌入方式下,程序中的SQL语句段内可使用主语言的程序变量来输入和输出数据。SQL中使用主语言程序定义的变量称为主变量。null主变量根据其作用的不同,分为输入主变量和输出主变量。 输入主变量由应用程序对其赋值,SQL加以引用; 输出主变量由SQL语句对其赋值或设置状态信息,返回给应用程序。 一个主变量可以既是输入主变量,又是输出主变量。null利用输入主变量,我们可以完成以下功能: 指定向数据库中插入的数据; 把数据库中的数据修改为指定值; 指定WHERE子句或HAVING子句中的条件。 利用输出主变量,我们可以得到SQL语句的执行结果和状态信息。null 指示变量 一个主变量可以附带一个任选的指示变量(indicator variable)。 指示变量是一个整型变量,用来“指示”所述主变量的值或者条件。 指示变量可以指示输入主变量是否为空值,可以检测输出主变量是否为空值,值是否被截断等。null主变量与指示变量的说明 所有SQL语句中用到的主变量和指示变量都必须加以说明。 说明的开头行与结尾行分别为: EXEC SQL BEGIN DECLEAR SECTION EXEC SQL END DECLEAR SECTION。 说明了之后的主变量和指示变量,可以在SQL语句中任何一个能够使用表达式的地方调用。nullSQL语句中的主变量名称前必须添加冒号(∶)作为标志,这是为了与数据库中的对象名(表名,视图名,属性名等)向区别。同样,SQL语句中的指示变量之前也必须加有冒号,同时紧跟在所指的主变量之后。 在SQL语句之外的其它地方,说明之后的主变量和指示变量可以直接引用,不必添加冒号。 在主程序内,一般不出现SQL变量。能够使用表达式的地方调用。3.10.3.游标语句的使用3.10.3.游标语句的使用 1. 概念 SQL语言与主语言在数据处理有着不同方式。SQL是面向集合的,一条SQL语句原则上可以产生或处理多条。主语言使面向记录的,一组主变量一次只能存放一条记录,仅仅使用主变量并不能够完全满足SQL语句向应用程序输出数据的要求。这里基本的问题是,在嵌入方式下,SQL的变量是集合型的,主变量为标量型的, SQL变量不能够直接提供给主程序使用。为了解决这个问题,就需要有一种机制,将SQL变量中的集合量逐个取出送入主变量内,进而提供给主程序使用。解决问题的基本思路是在嵌入式SQL中引入“游标”的概念,用游标来协调SQL和主语言的两种不同数据处理方式。null 游标本质上是系统为用户开设的一个数据缓冲区,用以存放SQL语句的结果数据集。 每个游标区都有一个名字。用户可以通过游标逐一读取数据记录,然后赋值给主变量 ,再交由主语言程序作进一步的处理。 利用游标概念提供上述协调机制的基本方法是在嵌入式SQL中增加一组游标(cursor)语句。null游标语句 游标定义语句 有为某一种语句的结果定义一个命名的游标。其语句为: EXEC SQL DECLARE <游标名>CURSOR FOR<映像语句>null游标打开语句 游标定义后再使用时需要打开游标,此时游标处于活动状态并指向集合的第一个记录。其一般形式为: EXEC SQL OPEN <游标名> 游标关闭语句 游标使用完后需要关闭。其一般形式为: EXEC SQL CLOSE <游标名>null游标推进语句 该语句读出当前记录,并将游标推向集合中的下一个记录,此语句常用于循环,其一般形式为: EXEC SQL FETCH <游标名>null例:查询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; EXEC SQL CLOSE SX;null作业: 课本习题3的:2,13Elelen Enmi胶原蛋白口服液买四赠一 品牌正品情侣装 亲子装全场包邮 淘宝:http://li370286038.taobao.com/ 或者拍拍:http://shop.paipai.com/370286038本章小结本章小结简单查询:选择条件、排序输出、聚合运算以及分组处理。 连接查询:查询的并、交、差;连接与笛卡尔积;元组变量。 嵌套查询:产生单值的子查询;涉及到关系的选择条件;涉及到元组的选择条件;相关子查询。 数据库更新:插入、删除、修改。 定义关系模式:定义表、撤消表;更改关系模式;建立和撤消索引。 视图:定义视图、查询视图、更新视图、撤消视图。
/
本文档为【数据库语言SQL】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索