有下列关于运动会管理系统的ER图,如图10所示。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体之间的关系。假定已通过下列SQL语言建立了基本表。 CREATE TABLE ATHLETE ANAME CHAR(20), ASEX

admin2009-02-15  32

问题 有下列关于运动会管理系统的ER图,如图10所示。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体之间的关系。假定已通过下列SQL语言建立了基本表。 CREATE TABLE ATHLETE
   ANAME CHAR(20),
   ASEX CHAR(1),
   ATEAM CHAR(20));
   CREATE TABLE |TEM
   (INO CHAR(6)NOT NULL,
   INAME CHAR(20),
   ITIME CHAR(12),
   IPLACE CHAR(20);
   CREATE TABLE GAMES
   (ANO CHAR(6)NOTNULL,
   INO CHAR(6)NOT NULL,
   SCORRE CHAR(10));
   为了答题的方便,图中的实体和属性同时给出了中英文两种文字,回答问题时只需写出英文名即可。
   【E-R图】

【问题】
   填充下列SQL程序1~4中的(1)~(7),使它们分别完成相应的功能:
   程序1:统计参加比赛时男运动员人数。
   SELECT  (1)  
   FROM ATHLETE
   WHERE ASEX=’M’;
   程序2:查100872号运动员参加的所有项目及其比赛时间和地点。
   SELECT ITEM,INO,IN A ME,ITIME,IPLACE
   FROM GAMES,ITEM
   WHERE  (2);
   AND  (3);
   程序3:查参加100035项目的所有运动员名单。
   SELECT ANO,ANAME,ATEAM
   FROM ATHLETE
   WHERE  (4);
   (SELECT  (4)    (5)  
   FROM GAMES
   WHERE GAMES ANO=ATHLETE.ANO AND INO=’100035’);
   程序4:建立运动员成绩视图。
     (6)  ATHLETE-SCORE
   AS SELECT ATHLETE,ANO,ANAME,ATEAM,INAME,SCORE
   FORM  (7)  WHERE ATHLETE.ANO=GAMES. ANO AND GAMES.INO=ITEM.INO;

选项

答案(1)COUNT(*)(若答COUNT或COUNT,得2分) (2)GAMES.INO=IFEM.INO (3)GAMES.ANO=‘100872’(注:(2)、(3)可互换、无前缀得1分) (4)EXISTS (5)*或ANO或INO或SCORE或后3个列名的任意组合 (6)CREATEVIEW (7)ATHLETE,ITEM,GAMES(3项可交换。) 注:(4)、(5)也可为 (4)ANOIN (5)ANO

解析 本题是关于系数据库标准语言——SQL(Structured Query Language)语言的题目,由题目中给出的ER图可知3个表中,ATH- LETE和ITEM是基本表,表ATHETE的主键是运动员编号ANO,表I-TEM的主键是项目编号INO,表GAMES是一个视图,以ANO、INO为外键。
   程序1统计参加比赛的男运动员人数,也就是表ATHLETE中, AEX=’M’的记录的个数,所以要用到库函数COUNT(*)。这里要注意的是COUNT与COUNT(*)区别,COUNT的功能是对一列中的值计算个数,而COUNT(*)才是计算数据库中记录的个数。所以填空①的答案为“COUNT(*)”。
   程序的2统计100872号运动员参加的所有项目及比赛时间和地点,所以SELECT后面的内容是项目编号ITEM.INO、项目名称INAME时间ITIME及地点IPLACE。统计涉及比赛表GAMES和项目表ITEM,所以FROM后面的内容为GAMES、ITEM。本题考的是连接查询,所谓连接查询指的是涉及两个以上的表的查询。由于是统计100872号运动员参加的所有项目及比赛时间和地点,所以查询条件中必然有 GAMES.INO=’100872’(程序中引用到字段时,若字段名在各个表中是惟一的,则可以把字段名前的表名去掉,否则,应当加上表名作为前缀,以免引起混淆)。由于GAMES表中只有比赛的成绩,那些关于项目的数据必须从项目表ITEM中取得,所以还应该有两个表之间的关联,即 GAMES.INO=TYEM.INO。所以填空②和③可交换,不影响查询结果。
   程序3要求查参加100035项目的所有运动员名单。分析查询表达式,必首先查询GAMES表,找出参加100035项目的那些运动员的编号ANO,即GAMES.ANO=ATHLETE.ANO AND INO=’100035’,然后再根据查询到的运动员号ANO从ATHLETE表中抽取运动员的数据。所以填空④的答案为“EXISTS”或“ANOIN”,填空⑤的答案为“ANO”。
   程序4要求建立运动员成绩视图。建立视图的命令为CREATE- VIEW,所以填空⑥的答案一定是“CREATEVIEW”。建立的是运动员成绩视图,那么一定涉及运动员情况、运动员参加的项情况和该项目的成绩,所以要用到ATHLETE、ITEM和GAMES这3个表,因此FROM子句后为ATHLETE、GAMES、ITEM,3个表可以是任意次序,不影响结果。
转载请注明原文地址:https://kaotiyun.com/show/8MDZ777K
0

最新回复(0)