AnIntroductiontoDatabaseSystem数据库系统概论AnIntroductiontoDatabaseSystem中国人民大学信息学院第三章关系数据库标准语言SQL(续2)AnIntroductiontoDatabaseSystem第三章关系数据库标准语言SQL3.1SQL概述3.2学生-课程数据库3.3数据定义3.4数据查询3.5数据更新3.6空值的处理3.7视图3.8小结AnIntroductiontoDatabaseSystem3.5数据更新3.5.1插入数据3.5.2修改数据3.5.3删除数据AnIntroductiontoDatabaseSystem3.5.1插入数据两种插入数据方式插入元组插入子查询结果可以一次插入多个元组AnIntroductiontoDatabaseSystem1.插入元组语句格式INSERTINTO表名[(属性列1[,属性列2…)]VALUES(常量1[,常量2]…);功能将新元组插入指定表中AnIntroductiontoDatabaseSystem插入元组(续)INTO子句指定要插入数据的表名及属性列属性列的顺序可与表定义中的顺序不一致没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致指定部分属性列:插入的元组在其余属性列上取空值AnIntroductiontoDatabaseSystem插入元组(续)VALUES子句提供的值必须与INTO子句匹配值的个数值的类型AnIntroductiontoDatabaseSystem插入元组(续)[例3.69]将一个新学生元组(学号:201215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。INSERTINTOStudent(Sno,Sname,Ssex,Sdept,Sage)VALUES('201215128','陈冬','男','IS',18);AnIntroductiontoDatabaseSystem插入元组(续)[例3.71]插入一条选课记录('200215128','1')。INSERTINTOSC(Sno,Cno)VALUES('201215128','1');关系数据库管理系统将在新插入记录的Grade列上自动地赋空值。或者:INSERTINTOSCVALUES('201215128','1',NULL);AnIntroductiontoDatabaseSystem插入元组(续)[例3.70]将学生张成民的信息插入到Student表中。INSERTINTOStudentVALUES('201215126','张成民','男’,18,'CS');AnIntroductiontoDatabaseSystem2.插入子查询结果语句格式INSERTINTO表名[(属性列1[,属性列2…)]子查询;INTO子句子查询SELECT子句目标列必须与INTO子句匹配值的个数值的类型AnIntroductiontoDatabaseSystem插入子查询结果(续)[例3.72]对每一个系,求学生的平均年龄,并把结果存入数据库第一步:建表CREATETABLEDept_age(SdeptCHAR(15)/*系名*/Avg_ageSMALLINT);/*学生平均年龄*/第二步:插入数据INSERTINTODept_age(Sdept,Avg_age)SELECTSdept,AVG(Sage)FROMStudentGROUPBYSdept;AnIntroductiontoDatabaseSystem插入子查询结果(续)关系数据库管理系统在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则实体完整性参照完整性用户定义的完整性NOTNULL约束UNIQUE约束值域约束AnIntroductiontoDatabaseSystem3.5数据更新3.5.1插入数据3.5.2修改数据3.5.3删除数据AnIntroductiontoDatabaseSystem3.5.2修改数据语句格式UPDATE表名SET列名=表达式[,列名=表达式]…[WHERE条件];功能修改指定表中满足WHERE子句条件的元组SET子句给出表达式的值用于取代相应的属性列如果省略WHERE子句,表示要修改表中的所有元组AnIntroductiontoDatabaseSystem修改数据(续)三种修改方式修改某一个元组的值修改多个元组的值带子查询的修改语句AnIntroductiontoDatabaseSystem1.修改某一个元组的值[例3.73]将学生201215121的年龄改为22岁UPDATEStudentSETSage=22WHERESno='201215121';AnIntroductiontoDatabaseSystem2.修改多个元组的值[例3.74]将所有学生的年龄增加1岁。UPDATEStudentSETSage=Sage+1;AnIntroductiontoDatabaseSystem3.带子查询的修改语句[例3.75]将计算机科学系全体学生的成绩置零。UPDATESCSETGrade=0WHERESnoIN(SELETESnoFROMStudentWHERESdept='CS');AnIntroductiontoDatabaseSystem修改数据(续)关系数据库管理系统在执行修改语句时会检查修改操作是否破坏表上已定义的完整性规则实体完整性主码不允许修改用户定义的完整性NOTNULL约束UNIQUE约束值域约束AnIntroductiontoDatabaseSystem3.5数据更新3.5.1插入数据3.5.2修改数据3.5.3删除数据AnIntroductiontoDatabaseSystem3.5.3删除数据语句格式DELETEFROM表名[WHERE条件];功能删除指定表中满足WHERE子句条件的元组WHERE子句指定要删除的元组缺省表示要删除表中的全部元组,表的定义仍在字典中AnIntroductiontoDatabaseSystem删除数据(续)三种删除方式删除某一个元组的值删除多个元组的值带子查询的删除语句AnIntroductiontoDatabaseSystem1.删除某一个元组的值[例3.76]删除学号为201215128的学生记录。DELETEFROMStudentWHERESno=201215128';AnIntroductiontoDatabaseSystem2.删除多个元组的值[例3.77]删除所有的学生选课记录。DELETEFROMSC;AnIntroductiontoDatabaseSystem3.带子查询的删除语句[例3.78]删除计算机科学系所有学生的选课记录。DELETEFROMSCWHERESnoIN(SELETESnoFROMStudentWHERESdept='CS');AnIntroductiontoDatabaseSystem第三章关系数据库标准语言SQL3.1SQL概述3.2学生-课程数据库3.3数据定义3.4数据查询3.5数据更新3.6空值的处理3.7视图3.8小结AnIntroductiontoDatabaseSystem3.6空值的处理空值就是“不知道”或“不存在”或“无意义”的值。一般有以下几种情况:该属性应该有一个值,但目前不知道它的具体值该属性不应该有值由于某种原因不便于填写AnIntroductiontoDatabaseSystem1.空值的产生空值是一个很特殊的值,含有不确定性。对关系运算带来特殊的问题,需要做特殊的处理。空值的产生[例3.79]向SC表中插入一个元组,学生号是”201215126”,课程号是”1”,成绩为空。INSERTINTOSC(Sno,Cno,Grade)VALUES('201215126','1',NULL);/*该学生还没有考试成绩,取空值*/或INSERTINTOSC(Sno,Cno)VALUES('201215126','1');/*没有赋值的属性,其值为空值*/AnIntroductiontoDatabaseSystem空值的产生(续)[例3.80]将Student表中学生号为”201215200”的学生所属的系改为空值。UPDATEStudentSETSdept=NULLWHERESno='201215200';AnIntroductiontoDatabaseSystem2.空值的判断判断一个属性的值是否为空值,用ISNULL或ISNOTNULL来表示。[例3.81]从Student表中找出漏填了数据的学生信息SELECT*FROMStudentWHERESnameISNULLORSsexISNULLORSageISNULLORSdeptISNULL;AnIntroductiontoDatabaseSystem3.空值的约束条件属性定义(或者域定义)中有NOTNULL约束条件的不能取空值加了UNIQUE限制的属性不能取空值码属性不能取空值AnIntroductiontoDatabaseSystem4.空值的算术运算、比较运算和逻辑运算空值与另一个值(包括另一个空值)的算术运算的结果为空值空值与另一个值(包括另一个空值)的比较运算的结果为UNKNOWN。有UNKNOWN后,传统二值(TRUE,FALSE)逻辑就扩展成了三值逻辑AnIntroductiontoDatabaseSystem空值的算术运算、比较运算和逻辑运算(续)xyxANDyxORyNOTxTTTTFTUUTFTFFTFUTUTUUUUUUUFFUUFTFTTFUFUTFFFFTT表示TRUE,F表示FALSE,U表示UNKNOWN表3.8逻辑运算符真值表AnIntroductiontoDatabaseSystem空值的算术运算、比较运算和逻辑运算(续)[例3.82]找出选修1号课程的不及格的学生。SELECTSnoFROMSCWHEREGrade60ANDCno='1';查询结果不包括缺考的学生,因为他们的Grade值为null。AnIntroductiontoDatabaseSystem空值的算术运算、比较运算和逻辑运算(续)SELECTSnoFROMSCWHEREGrade60ANDCno='1'UNIONSELECTSnoFROMSCWHEREGradeISNULLANDCno='1'或者SELECTSnoFROMSCWHERECno='1'AND(Grade60ORGradeISNULL);[例3.83]选出选修1号课程的不及格的学生以及缺考的学生。AnIntroductiontoDatabaseSystem第三章关系数据库标准语言SQL3.1SQL概述3.2学生-课程数据库3.3数据定义3.4数据查询3.5数据更新3.6空值的处理3.7视图3.8小结AnIntroductiontoDatabaseSystem3.7视图视图的特点虚表,是从一个或几个基本表(或视图)导出的表只存放视图的定义,不存放视图对应的数据基表中的数据发生变化,从视图中查询出的数据也随之改变AnIntroductiontoDatabaseSystem3.7视图3.7.1定义视图3.7.2查询视图3.7.3更新视图3.7.4视图的作用AnIntroductiontoDatabaseSystem3.7.1定义视图1.建立视图2.删除视图AnIntroductiontoDatabaseSystem1.建立视图语句格式CREATEVIEW视图名[(列名[,列名]…)]AS子查询[WITHCHECKOPTION];AnIntroductiontoDatabaseSystem建立视图(续)WITHCHE