36数据控制(编辑修改稿)内容摘要:

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