5—单元5 数据查询与维护(8)

2019-08-30 18:07

说明:若要删除已被其它表引用的记录,即有主、外键约束的记录时,会出现禁止删除的提示。如图5-18中,从系部表中删除“计算机系”的记录,但由于系部表与班级表之间存在着参照完整性关系,出现了冲突,所以无法删除。

图5-18 删除记录时与外键约束发生冲突

【例5-39】在学生成绩表XA05中,删除指定学年('2001-2002')、学期('1')与班级编码('100121')的学生成绩记录。

Delete From XA05

Where XA0502='3001231' And

XA0504='2004-2005' And XA0505='1'

【例5-40】在学生成绩表XA05中,删除“周明明”学生的所有成绩。 Delete From XA05

Where XA0501 In (Select XA0101

From XA01

Where XA0104='周明明')

5.4.2 使用Truncate语句清除表中全部数据

在SQL Server 2000提供了一种快速删除表中所有行的方法。它比不用WHERE子句的DELECT语句要快,因为DELETE 语句要记录删除的每个改变以用来备份。

语句格式:Truncate Table <数据表名>

【例5-41】 在学生成绩表XA05中清除所有记录。 Truncate Table XA05

说明:用Truncate语句清除数据表内容时,系统不进行日志记录,所以在进行清除数据表内容前,先应对数据库进行备份,防止由于错误操作引起数据的丢失。

5.5 数据修改语句

修改语句用于更新数据表中满足条件记录的字段值,语句格式如下: Update <数据表名 | 视图名>

- 171 -

Set <字段名1>=<表达式值1> [, <字段名2>=<表达式值2>, …<字段名n>=<表达式值n>] Where <条件表达式>

该语句执行时,先在数据表或视图找到满足条件记录,然后将表达式值赋给字段。 【例5-42】从系部编码表TB06中,将“计算机系”改为“信息工程系”。 Update TB06

Set TB0602='信息工程系' Where TB0602='计算机系'

说明:若不加Where 条件,则对表中所有记录进行替换操作。

【例5-43】在学生成绩表XA05中,将指定学年('2001-2002')、学期('1')、学生编码('0000000404')与课程名('JAVA程序设计')的学生成绩改为90分。

Update XA05 Set XA0509='90' Where XA0501='0000000404' And

XA0504='2004-2005' And XA0505='1' And

XA0506=(Select TB0101 From TB01 Where TB0103= ' JAVA程序设计')

【例5-44】用学生档案表XA01统计出的学生人数,更新班级编码表TB03中的学生人数字段TB0306。

Update TB03 Set TB0306=(Select Count(XA0101) From XA01 Where XA0114= TB0301)

该语句执行过程为,从班级编码表TB03的第1条记录开始,先取出该记录的班级编码TB0301,然后执行相关子查询语句:

Select Count(XA0101) From XA01 Where XA0114= TB0301

子查询语句从学生档案表XA01中统计出由TB0301指定班级的学生人数,结果返回给父查询,父查询将结果值赋给班级人数TB0306字段。然后父查询再从班级编码表TB03中取第2条记录的班级编码TB0301,按上述步骤依次计算每班学生人数,并赋给TB0306,直到最后1 条记录为止。

本章小结

1.Select查询语句

Select语句可完成对数据表的投影、选择、连接、排序、统计汇总等运算。一般格式为: Select Distinct <目标表达式> (投影运算)

From <表1>

<连接方式> Join <表2> On 表1.列名=表2.列名 … … …

- 172 -

<连接方式> Join <表n> On 表1.列名=表n.列名

Where <条件表达式> (选择运算) Order By <表达式> [Asc | Desc] (排序运算) Group By <分组字段> Having <条件表达式> (分组运算)

在语句中,Select子句为投影运算,子句的目标表达式有4种表达方式,如图5-19(a)所示;From子句中的连接方式有7种表达方式,如图5-19(b)所示;Where子句为选择运算,子句中的条件表达式有6种表达方式,如图5-19(c)所示,在Where 子句中还允许进行嵌套子查询与相关子查询;Oder By子句完成排序运算;Group By子句完成分组统计运算。

列名 As 别名 * 目标表达式 表达式 As 别名 统计函数 As 别名 统计函数为:Sum、Avg、Max、 Min、Count (a)目标表达式的4种表达方式 内连接 :Inner

左外连接:Left 右外连接:Right 连接方式 全外连接:Full 自连接 :A.列=B.列 交叉连接:Cross (b)连接方式的7种表达方式 关系查询:>、>=、=、<、<=、<> 逻辑查询:And、Or、 Not 范围查询:Between 下界 and 上界 集合查询:In (集合元素表) 条件表达式 空值查询:Is Null 或 Is Not Null 模糊查询:Like ‘d字符串d’ ,其中通配符d=%、_等 (c)条件表达式的6种表达方式 图5-19目标表达式、连接方式、条件表达式的表达方式

2.嵌套子查询语句

Select <目标表达式>

From <表名> Where <字段表达式> <运算符> (