1.设有学生表S(SNO,SN)(SNO为学生号,SN为姓名)和学生选修课程表SC(SN,CNO, G)(CNO为课程号,G为成绩),试用SQL语言完成以下各题:
(1)创建学生表、学生选修课程表。
(2)建立一个视图V-SSC(SNO,SN,CNO,CN,G),并按CNO升序排序;
(3)从视图V-SSC上查询平均成绩在90分以上的SN、CN和G。
参考答案:
(1)
(2)CREATE SQL VIEW V-SSC(SNO,SN,CNO,CN,G)
AS SELECT S.SNO,SSN,CNO,SC.CN,SC.G
FROM S,SC
WHERE S.SNO=SC.SNO
ORDER BY CNO
(3)SELECT SN,CN,G
FROM V-SSC
GROUP BY SNO
HAVING AVG(G)>90
2. 已知学生表S和学生选课表SC。其关系模式如下:
S(SNO,SN,SD,PROV)
SC(SNO,CN,GR)
其中,SNO为学号,SN为姓名,SD为系名,PROV为省区,CN为课程名,GR为分数。
试用SQL语言实现下列操作:
(1)创建学生表S和学生选课表SC。
(2)查询“信息系”的学生来自哪些省区。
(3)按分数降序排序,输出“英语系”学生选修了“计算机”课程的学生的姓名和分数。
参考答案:
(1)
(2)SELECT DISTINCT PROV
FROM S
WHERE SD="信息系"
(3)SELECT SN,GR
FROM S,SC
WHERE SD="英语系" AND CN="计算机" AND S.SNO=SC.SNO
ORDER BY GR DESCZ
3. 某保险公司关于汽车保险涉及以下查询和登录:
·查询投保人:输入保险号,输出投保人姓名、投保的汽车、型号;
·事故登录:登录事故编号、出事汽车牌照、车主、赔偿金、稽查人。
根据上述用户需求,要求作出:
(1)实体联系模型(E-R图)。
(2)从E-R图导出关系模型。
(3)用SQL语言创建用(2)中的关系模型。
参考答案:
1)查询投保人数据流图,如图4-l所示。
(3)关系模型
车主(保险号,姓名,地址)
汽车(牌照,车型,保险金,保险号)
事故(编号,牌照,日期,驾驶员,赔偿金,稽查)
4.试各举三例说明两个实体型之间具有的一对一联系,一对多联系,多对多联系。
5.设有如图3.2所示的三个关系,并假定这三个关系框架组成的数据模型就是用户子模式。其中各个属性的含义如下:A#(商店代号)、ANAME(商店名)、WQTY(店员人数)、CITY(所在城市)、B#(商品号)、BNAME(商品名称)、PRICE(价格)、QTY(品数量)。试用SQL语言写出下列查询,并给出执行结果:
(1)出店员人数不超过100人或者在长沙市的所有商店的代号和商店名。
(2)出供应书包的商店名。
(3)出至少供应代号为256的商店所供应的全部商品的商店名和所在城市。
参考答案:
1、SELECT A#,ANAME FROM A WHERE WQTY<=100 OR CITY="长沙"
2、SELECT A.ANAME FROM A,B,AB WHERE A.A#=AB.A# AND B.B#=AB.B# AND B.BNAME="书包"
3、SELECT A.ANAME,A.CITY FROM A,B WHERE A.A#=AB.A# AND AB.B# IN(SELECT AB.B# FROM AB WHERE A#="256")
6.设有如图2.12所示的关系R,S和T,计算:
(1)R1=RS
(2)R2=R-S
(3)R3=RT
(4)R4=R
A<C
(5)R5=A(R)
(6)R6=σA=C(R×T)
参考答案:
本题各小题的结果如图2.13所示。
7.设有如图2.8所示的关系R和S,计算:
(1)R1=R-S
(2)R2=RUS
(3)R3=R ∩ S
(4)R4=R×S
参考答案:
本题各小题的结果如图2.9所示。
8.要建立关于系、学生、班级、研究会诸信息的一个关系数据库。规定:一个系有若干专业,
每个专业每年只招一个班,每个班有若干学生。一个系的学生住在同一个宿舍区。每个学生可参加若干研究会,每个研究会有若干学生。
    描述学生的属性有:学号、姓名、出生年月、系名、班号、宿舍区。
    描述班级的属性有:班号、专业名、系名、人数、入校年份。
    描述系的属性有:系号、系名、系办公室地点、人数。
    描述研究会的属性有:研究会名、成立年份,地点、人数。
    学生参加某研究会,有一个入会年份。
要求作出:
(1)实体联系模型(E-R图)。
(2)从E-R图导出关系模式。
(3)用SQL语言创建用(2)中的关系模式。
参考答案:
(1)学生关系
学生(学号、姓名、出生年月、系名、班号、宿舍区)
候选码:学号。
外部码:系名、班号。
最小依赖集:
    学号->姓名,    学号->出生年月,
    学号->班号,    系名->宿舍区,
    班号->系名。
存在传递函数依赖:
学号->系名->宿舍区,故:学号->宿舍区(传递依赖);
班号->系名->宿舍区,故:班号->宿舍区(传递依赖);
学号->班号->系名,故:学号->系名(传递依赖)。
汽车牌照选号(2)班级关系
班(班号、专业名、系名、人数、入校年月)
候选码:班号。
外部码:系名。
最小依赖集:
    班号->专业名,班号->人数,
    班号->入校年月,专业名->系名。
存在传递函数依赖:
班号->专业名->系名,故:班号->系名(传递依赖)。
(3)系关系
系(系号、系名、办公室地点、人数)
      侯选码:系号,系名。
      无外部码。
      最小依赖集:
      系号<-->系名,系号->办公室地点,
      系号->人数,系名->办公室地点,系名->人数。
      (4)研究会关系
      研究会(研究会名,成立年份,地点,人数)
      候选码:研究会名。
      无外部码
      最小依赖集:
        研究会名->成立年份,
        研究会名->地点,
        研究会名->人数。
(5) 学生参加研究会关系
    学生----研究会(学生号、研究会名,入会年份)
    候选码:(学生号,研究会名)。
    外部码:学生号,研究会名。
    最小依赖集:
        (学生号,研究会名)->(f)入会年份,是完全函数依赖。
  以上各关系无全码存在。
9. 写出完成下列操作的SQL命令:
已知关系S、SC、C的关系模式为:
S(S#,SN,SA,SEX,SD)
SC(C#,S#,G)
C(C#,CN,PC#)
其中:S#为学号,SN为学生名,SA为年龄,SEX为性别,SD为系别,C#为课程号,G为成绩,CN为课程名称,PC#先行课程号
(1)求选修了先行课号为‘C2’的课程的学生的名字,系别及人数
(2)求选修了‘C1’课程且成绩(G)在90分以上的学生的学号,姓名
(3)求至少被N人以上的学生选修的课程
(4)求数学系学生选修‘C1’课程的平均成绩(数学系:MA)
(5)求在下列各系的学生:MA(数学系),CS(计算机科学系)
参考答案:
(1).SELECT S.SN,S.SD,count(S.*)
  FROM S,SC,C
  WHELE S.S#=SC.S#  AND SC.C#=C.C#  AND C.PC#=‘C2’;
(2). SELECT S.S#,S.SN
  FROM S,SC,C
  WHELE S.S#=SC.S#  AND SC.G>90  AND (SC.C#=C.C#  AND C.C#=‘C2’);
(3). SELECT SC.C#
  FROM S,SC
  WHELE S.S#=SC.S#  AND count(DISTINCT S#)>=20;
(4). SELECT SC.AVG(G)
  FROM S,SC
  WHELE S.S#=SC.S#  AND S.SD=‘MA’  AND SC.C#=‘C1’;
(5). SELECT *
  FROM S
  WHELE SD=‘MA’ OR SD=‘CS’;
10.在著书工作中,一位作者可以编写多本图书,一本书也可由多位作者编写。设作者的属性有:作者号,姓名,单位,电话;书的属性有:书号,书名,出版社,日期。试完成以下两题:
(1)根据这段话的意思,画出其E-R图。
(2)将这个E-R图转换为关系模式,并给出各关系模式中的主关键字。
(3)用SQL语言创建用(2)中的关系模式。
参考答案:
(1)E-R图如图8.4所示。
(2)转换的关系模型为:
作者(作者号,姓名,单位,电话),关键字是“作者号”。
书(书号,书名,出版社,日期),关键字是“书号”。
编写(作者号,书号),关键字是“作者号”,“书号”。