第三章 关系数据库标准语言SQL

第一节 第二节 第三节 第四节

第四节 视 图    (1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)
    使用注意事项:
    1. 使用主变量:INTO子句;WHERE子句的条件表达式;HAVING短语的条件表达式。
    2. 使用指示变量:指示变量只能用于INTO子句中,如果INTO子句中主变量后面跟有指示变量,则当查
询得出的某个数据项为空值时,系统会自动将相应主变量后面的指示变量置为负值,但不向该主变量执行赋
值操作,即主变量值仍保持执行SQL语句之前的值。当发现指示变量值为负值时,不管主变量为何值,均应
认为主变量值为NULL。
    3. 查询结果为空集:如果数据库中没有满足条件的记录,即查询结果为空,则DBMS将SQLCODE的值置为
100。
    4. 查询结果为多条记录:程序出错,DBMS会在SQLCA中返回错误信息。
    例 根据学生号码查询学生信息。
    假设已将要查询的学生的学号赋给了主变量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均是主变量,并均已在前面的程序中说明过了。
    例 查询某个学生选修某门课程的成绩。
    假设已将要查询的学生的学号赋给了主变量givensno,将课程号赋给了主变量givencno。
        EXEC SQL SELECT Sno, Cno, Grade
        INTO :Hsno, :Hcno, :Hgrade:Gradeid
        FROM SC        
        WHERE Sno=:givensno AND Cno=:givencno;
    从提高应用程序的数据独立性角度考虑,SELECT语句在任何情况下都应该使用游标,对于仅返回一行结
果数据的SELECT语句虽然可以不使用游标。但如果以后数据库改变了,该SELECT语句可能会返回多行数据,
这时该语句就会出错。
五、非CURRENT形式的UPDATE语句
    非CURRENT形式的UPDATE语句,使用主变量、SET子句、WHERE子句、使用指示变量、SET子句、非CURRENT
形式的UPDATE语句可以操作多条元组。
    例 将全体学生1号课程的考试成绩增加若干分。
    假设增加的分数已赋给主变量Raise
        EXEC SQL UPDATE SC
        SET Grade=Grade+:Raise
        WHERE Cno='1';
六、非CURRENT形式的DELETE语句
    非CURRENT形式的DELETE语句, 使用主变量、WHERE子句、非CURRENT形式的DELETE语句可以操作多条元
组。
    例 某个学生退学了,现要将有关他的所有选课记录删除掉。
    假设该学生的姓名已赋给主变量stdname
        EXEC SQL DELETE
        FROM SC
        WHERE Sno = ( SELECT Sno
        FROM Student
        WHERE Sname=:stdname);
七、INSERT语句
    非CURRENT形式的INSERT语句,使用主变量, VALUES子句、使用指示变量, VALUES子句、非CURRENT形式
的INSERT语句一次只能输入一条元组。
    例 某个学生新选修了某门课程,将有关记录插入SC表。
    假设学生的学号已赋给主变量stdno,课程号已赋给主变量couno。
        gradeid=-1;
        EXEC SQL INSERT INTO SC(Sno, Cno, Grade)
        VALUES(:stdno, :couno, :gr:gradeid);
    由于该学生刚选修课程,尚未考试,因此成绩列为空。所以本例中用指示变量指示相应的主变量为空值。

吉林大学网络教育学院 版权所有