数据库基础第三章sql语句(编辑修改稿)内容摘要:

EXEC SQL GRANT SELECT ON TABLE Student TO U1。 四、查询结果为单记录的 SELECT语句  语句格式 EXEC SQL SELECT [ALL|DISTINCT] 目标列表达式 [,目标列表达式 ]... INTO 主变量 [指示变量 ] [,主变量 [指示变量 ]]... FROM 表名或视图名 [,表名或视图名 ] ... [WHERE 条件表达式 ] [GROUP BY 列名 1 [HAVING 条件表达式 ]] [ORDER BY 列名 2 [ASC|DESC]]。 查询结果为单记录的 SELECT语句(续)  对交互式 SELECT语句的扩充就是多了一个 INTO子句 把从数据库中找到的符合条件的记录,放到INTO子句指出的主变量中去。 查询结果为单记录的 SELECT语句(续)  使用注意事项  1. 使用主变量  INTO子句  WHERE子句的条件表达式  HAVING短语的条件表达式 查询结果为单记录的 SELECT语句(续)  2. 使用指示变量 指示变量只能用于 INTO子句中 如果 INTO子句中主变量后面跟有指示变量,则当查询得出的某个数据项为空值时,系统会自动将相应主变量后面的指示变量置为负值,但不向该主变量执行赋值操作,即主变量值仍保持执行 SQL语句之前的值 当发现指示变量值为负值时,不管主变量为何值,均应认为主变量值为 NULL 查询结果为单记录的 SELECT语句(续)  3. 查询结果为空集 如果数据库中没有满足条件的记录,即查询结果为空,则 DBMS将 SQLCODE的值置为 100  4. 查询结果为多条记录 程序出错, DBMS会在 SQLCA中返回错误信息 查询结果为单记录的 SELECT语句(续) 例 3 根据学生号码查询学生信息。 假设已将要查询的学生的学号赋给了主变量 givensno EXEC SQL SELECT Sno, Sname, Ssex, Sage, Sdept INTO :Hsno, :Hname, :Hsex, :Hage, :Hdept FROM Student WHERE Sno=:givensno。  Hsno, Hname, Hsex, Hage, Hdept和 givensno均是主变量,并均已在前面的程序中说明过了。 查询结果为单记录的 SELECT语句(续) 例 4 查询某个学生选修某门课程的成绩。 假设已将要查询的学生的学号赋给了主变量givensno,将课程号赋给了主变量 giveno。 EXEC SQL SELECT Sno, Cno, Grade INTO :Hsno, :Ho, :Hgrade:Gradeid FROM SC WHERE Sno=:givensno AND Cno=:giveno。 查询结果为单记录的 SELECT语句(续) 从提高应用程序的数据独立性角度考虑,SELECT语句在任何情况下都应该使用游标  对于仅返回一行结果数据的 SELECT语句虽然可以不使用游标  但如果以后数据库改变了,该 SELECT语句可能会返回多行数据,这时该语句就会出错 五、非 CURRENT形式的 UPDATE语句 非 CURRENT形式的 UPDATE语句  使用主变量  SET子句  WHERE子句  使用指示变量  SET子句 非 CURRENT形式的 UPDATE语句可以操作多条元组 非 CURRENT形式的 UPDATE语句(续) 例 5 将全体学生 1号课程的考试成绩增加若干分。 假设增加的分数已赋给主变量 Raise EXEC SQL UPDATE SC SET Grade=Grade+:Raise WHERE Cno=39。 139。 非 CURRENT形式的 UPDATE语句(续) 例 6 修改某个学生 1号课程的成绩。 假设该学生的学号已赋给主变量 givensno, 修改后的成绩已赋给主变量 newgrade。 EXEC SQL UPDATE SC SET Grade=:newgrade WHERE Sno=:givensno。 非 CURRENT形式的 UPDATE语句(续) 例 7 将计算机系全体学生年龄置 NULL值 Sageid=1。 EXEC SQL UPDATE Student SET Sage=:Raise:Sageid WHERE Sdept=39。 CS39。 非 CURRENT形式的 UPDATE语句(续)  将指示变量 Sageid赋一个负值后,无论主变量Raise为何值, DBMS都会将 CS系所有记录的年龄属性置空值。 它等价于: EXEC SQL UPDATE Student SET Sage=NULL WHERE Sdept=39。 CS39。 六、非 CURRENT形式的 DELETE语句 非 CURRENT形式的 DELETE语句  使用主变量  WHERE子句 非 CURRENT形式的 DELETE语句可以操作多条元组 非 CURRENT形式的 DELETE语句(续) 例 8 某个学生退学了,现要将有关他的所有选课记录删除掉。 假设该学生的姓名已赋给主变量 stdname EXEC SQL DELETE FROM SC WHERE Sno= (SELECT Sno FROM Student WHERE Sname=:stdname)。 七、 INSERT语句 非 CURRENT形式的 INSERT语句  使用主变量  VALUES子句  使用指示变量  VALUES子句 非 CURRENT形式的 INSERT语句一次只能输入一条元组 INSERT语句(续) 例 9 某个学生新选修了某门课程,将有关记录插入 SC表 假设学生的学号已赋给主变量 stdno,课程号已赋给主变量couno。 gradeid=1。 EXEC SQL INSERT INTO SC(Sno, Cno, Grade) VALUES(:stdno, :couno, :gr:gradeid)。  由于该学生刚选修课程,尚未考试,因此成绩列为空。 所以本例中用指示变量指示相应的主变量为空值。 使用游标的 SQL语句  必须使用游标的 SQL语句  查询结果为多条记录的 SELECT语句  CURRENT形式的 UPDATE语句  CURRENT形式的 DELETE语句 一、 查询结果为多条记录的 SELECT语句 使用游标的步骤  1. 说明游标  2. 打开游标  3. 移动游标指针,然后取当前记录  4. 关闭游标 1. 说明游标 使用 DECLARE语句 语句格式 EXEC SQL DECLARE 游标名 CURSOR FOR SELECT语句。 功能  是一条说明性语句,这时 DBMS并不执行SELECT指定的查询操作。 2. 打开游标 使用 OPEN语句 语句格式 EXEC SQL OPEN 游标名。 功能  打开游标实际上是执行相应的 SELECT语句,把所有满足查询条件的记录从指定表取到缓冲区中  这时游标处于活动状态,指针指向查询结果集中第一条记录之前 3. 移动游标指针,然后取当前记录 使用 FETCH语句 语句格式 EXEC SQL FETCH [[NEXT|PRIOR| FIRST|LAST] FROM] 游标名 INTO 主变量 [指示变量 ] [,主变量 [指示变量 ]]...。 移动游标指针,然后取当前记录(续) 功能  指定方向推动游标指针,然后将缓冲区中的当前记录取出来送至主变量供主语言进一步处理。  NEXT|PRIOR|FIRST|LAST:指定推动游标指针的方式。  NEXT:向前推进一条记录  PRIOR:向回退一条记录  FIRST:推向第一条记录  LAST:推向最后一条记录  缺省值为 NEXT 移动游标指针,然后取当前记录(续) 说明  (1) 主变量必须与 SELECT语句中的目标列表达式具有一一对应关系  (2) FETCH语句通常用在一个循环结构中,通过循环执行 FETCH语句逐条取出结果集中的行进行处理  (3) 为进一步方便用户处理数据,现在一些关系数据库管理系统对 FETCH语句做了扩充,允许用户向任意方向以任意步长移动游标指针 4. 关闭游标 使用 CLOSE语句 语句格式 EXEC SQL CLOSE 游标名。 功能。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。