软件C122彭静126226-1-实验1.6空值和空集的处理软件C122彭静1262261.实验目的认识NULL值在数据库中的特殊含义,了解空值和空集对于数据库的数据查询操作,特别是空值在条件表达式中与其它的算术运算符或逻辑运算符的运算中,空集作为嵌套查询的子查询的返回结果时候的特殊性,能够熟练使用SQL语句来进行与空值,空集相关的操作。2.实验内容通过实验验证在原理解析中分析过的SQLSERVER对NULL的处理,包括:在查询的目标表达式中包含空值的运算。在查询条件中空值与比较运算符的运算结果。使用“ISNULL”或“ISNOTNULL”来判断元组该列是否为空值。对存在取空值的列进行ORDERBY排序。使用保留字DISTINCT对空值的处理,区分数据库的多种取值与现实中的多种取值的不同。使用GROUPBY对存在取空值的列进行分组,结合分组考察空值对各个集合函数的影响,特别注意对COUNT(*)COUNT和(列名)的不同影响。验证嵌套查询中返回空集的情况下与各个谓词的运算结果。进行与空值有关的等值连接运算。3.实验步骤要求:(1)查询所有选课记录的成绩并将它换算为五分制(满分为5分,合格为3分),注意SCORE取NULL值的情况。实验代码实验截图(2)通过查询选修编号10028的课程的学生的人数,其中成绩合格的学生人数,不合格的学生人数,讨论NULL值的特殊含义。实验代码1)查询‘10028’的人数软件C122彭静126226-2-实验截图2)查询成绩合格的人数实验截图3)查询成绩不及格的人数实验截图4)成绩为空的人数实验截图软件C122彭静126226-3-由前三个查询语句可知175+26!=218,因为存在空值(3)通过实验检验在使用ORDERBY进行排序时,取NULL的项是否出现在结果中?取如果有,在什么位置?实验代码成绩从小到大排序实验截图成绩从大到小排序实验截图(4)在上面的查询的过程中如果加上保留字DISTINCT会有什么效果呢?实验代码实验截图软件C122彭静126226-4-V从DBMS角度上分析,所有取NULL值的项都看成是一样的(5)通过实验说明使用分组GROUPBY对取值为NULL的项的处理。按成绩对表CHOICES进行分组实验代码实验截图实验证明,查询的结果存在取值为NULL的项,这说明在使用分组时候取NULL值被当作一个分组(6)结合分组,使用集合函数求每个同学的平均分,总的选课记录,最高成绩,最低成绩,总成绩。实验代码实验截图软件C122彭静126226-5-可以得出结论:在集合函数中,除了使用Count(*)计算元组时取空值的项计算进去,其他的集合函数都忽略了取空值的项,取平均分的函数也是取非空值的项的平均,而不是所有项的平均(7)查询成绩小于0的选课记录,统计总数,平均分,最大值和最小值。实验代码实验截图查询结果为空集,对于一个空集合使用集合函数进行统计,得到运行结果,COUNT(*),返回值为0,其余的返回值均为0(8)采用嵌套查询的方式,利用比较运算符和谓词ALL的结合来查询表COURSES中最少的课时。假设数据库中只有一个记录的时候,使用前面的方法会得到什么结果,为什么?实验代码软件C122彭静126226-6-实验截图(9)创建一个学生表S(NO,SID,SNAME),教师表T(NO,TID,TNAME)作为实验用的表。其中,NO分别是这两个表的主键,其他键允许为空。向S插入元组(1,0129871001,王小明)(2,0129871002,李兰),(3,0129871005,NULL)(4,0129871004,关红);向T插入元组(1,100189,王小明)(2,100180,李小),(3,100121,NULL)(4,100128,NULL)。对这两个表作对姓名的等值连接运算,找出既是老师又是学生的人员的学生编号和教师编号。建立ST表向T中加入4个元组实验代码查询语句实验截图软件C122彭静126226-7-向S中加入四个元组插入元组语句实验截图查询语句实验截图对这两个表作对姓名的等值连接运算实验代码实验截图软件C122彭静126226-8-4.习题按下列要求,写出SQL语句,通过实验验证SQLServer对NULL值和空集的处理方式。(1)查询所有课程记录的上课节时(数据库中为每周节时),以一学期十八周记算每个课程的总学时,注意HOUR取NULL值的情况。实验截图实验代码(2)通过查询选修课程c++的学生的人数,其中成绩合格的学生人数,不合格的学生的人数,讨论NULL值的特殊含义。实验截图同实验步骤(2)(3)查询选修课程c++的学生的编号和成绩,使用ORDERBY按成绩进行排序时,取NULL的项是否出现在结果中?如果有,在什么位置?实验代码实验截图软件C122彭静126226-9-NULL项出现在结果中作为最小项(4)在上面的查询的过程中如果加上保留字DISTINCT会有什么效果呢?实验代码实验截图(5)按年级对所有的学生进行分组,能得到多少个组?与现实的情况有什么不同?实验代码实验截图共15个组,有一个NULL项,现实中有14个年级(6)结合分组,使用集合函数求每个课程选修的学生的平均分,总的选课记录数,最高成绩,最低成绩,讨论考察取空值的项对集合函数的作用的影响。实验代码软件C122彭静126226-10-实验截图(7)采用嵌套查询的方式,利用比较运算符和谓词ALL的结合来查询表STUDENTS中最晚入学的学生年级。当存在GRAND取空值的项时,考虑可能出现的情况,并解释原因。实验代码实验截图(8)将操作步骤中的表的数据进行更新,使得表S中,NO为2,3的记录的SID列取NULL值,T表的NO为4的记录的TID取NULL值,NO为3的TID取0129871005。然后,对这两个表按T.TID=S.SID作等值连接运算,找出编号相同的学生和教师的姓名,并分析原因。实验代码