当前位置:首页 > 数据库第一章实验报告
软件131-么红帅-132935
实验1.6空值和空集的处理
一、实验目的
认识NULL值在数据库中的特殊含义,了解空值和空集对于数据库的数据查询操作,特别是空值在条件表达式中与其他的算术运算符或逻辑运算符的运算中,空集作为嵌套查询的子查询返回结果的时候的特殊性,能够熟练使用SQL语句来进行与空值,空集相关的操作。 二、实验内容
(1)查询所有课程记录的上课学时(数
如果有,在什么位置?
SELECTsid,score FROMCHOICES
WHEREcid=(SELECTcidFROMCOURSESWHEREcname='C++') ORDERBYscore;
据库中为每星期学时),以一学期十八个星期计算每个课程的总学时,注意HOUR取NULL值的情况。
SELECTcid,hour*18 FROMCOURSES;
(2)通过查询选修课程C++的学生的人
数,其中成绩合格的学生人数,不合格的学生人数,讨论NULL值得特殊含义。
查询选修C++的学生人数:
SELECTCOUNT(*) FROMCOURSES,CHOICES
WHERECHOICES.cid=COURSES.cid
ANDcname='C++';
NULL的项出现在结果中,被当作最小值处理。
(4)在上面的查询的过程中,如果加上保留字DISTINCT会有什么效果呢?
SELECTDISTINCTscore FROMCHOICES
WHEREcid=(SELECTcid FROMCOURSES WHEREcname='C++') ORDERBYscore;
运行结果为:95
成绩合格的学生人数:
SELECTCOUNT(*) FROMCOURSES,CHOICES
WHERECHOICES.cid=COURSES.cid
ANDcname='C++'ANDscore<60;
成绩为NULL的学生被合并
(5)按年级对所有的学生进行分组,能
得到多少个组?与现实的情况有什么不同?
SELECTgrade FROMSTUDENTS GROUPBYgrade;
运行结果为:86
成绩不合格的学生人数:
SELECTCOUNT(*) FROMCOURSES,CHOICES
WHERECHOICES.cid=COURSES.cid
ANDcname='C++'ANDscore>=60;
得到9个分组,现实中有8个年级。 (6)结合分组,使用集合函数求每个课
运行结果为:0
NULL与比较运算符的运算都返回FALSE值,都不会出现在结果的统计之中。
(3)查询选修课程C++的学生的编号和
程选修的学生的平均分,总的选课记录数,最高成绩,最低成绩,讨论考察取空值的项对集合函数的作用的影响。
SELECTAVG(score),COUNT(*),MAX(score),MIN(score) FROMCHOICES GROUPBYcid;
13
成绩,使用ORDER BY按成绩进行排序时,取NULL的项是否出现在结果中?
软件131-么红帅-132935
在集合函数中,除了使用COUNT(*)计算元组时要把取空值的项计算进去,其他的集合函数都忽略了取空值的项。
(7)采用嵌套查询的方式,利用比较运
O=3
SELECTSNAME,TNAME FROMS,T
WHERET.TID=S.SID
算符和谓词ALL的结合来查询表STUDENTS中最晚入学的学生年级。当存在GRADE取空值的项时,考虑可能出现的情况,并解释原因。
SELECTgrade FROMSTUDENTS
WHEREgrade>=ALL(SELECTgradeFROMSTUDENTS);
运行结果:无
等值连接时,值为NULL的项被忽略。
(8)将操作步骤中的表的数据进行更新,
使得表S中,NO为2和3的记录的SID列取NULL值,T表的NO为4的记录的TID取NULL值,NO为3的TID取0129871005。然后对这两个表按T.TID=S.SID作等值连接运算,找出编号相同的学生和教师的姓名,并分析原因。
CREATETABLES
(NOSMALLINTPRIMARYKEY, SIDVARCHAR(10), SNAMEVARCHAR(10)) CREATETABLET
(NOSMALLINTPRIMARYKEY, TIDVARCHAR(10), TNAMEVARCHAR(10))
INSERTINTOSVALUES(1,'0129871001','王小明'),
(2,'0129871002','李兰'), (3,'0129871003',NULL), (4,'0129871004','关红')
INSERTINTOTVALUES(1,'100189','王小明'),
(2,'100180','李小'), (3,'100121',NULL), (4,'100128',NULL)
UPDATESSETSID=NULLWHERENO=2 ORNO=3
UPDATETSETTID=NULLWHERENO=4 UPDATETSETTID='0129871005'WHEREN
14
共分享92篇相关文档