义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。视图在概念上与 表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图。 7.试述视图的优点。 答案:
①视图能够简化用户的操作。
②视图使用户能以多种角度看待同一数据。
③视图对重构数据库提供了一定程度的逻辑独立性。 ④视图能够对机密数据提供安全保护。
9.有三个表即学生表 S、课程表 C 和学生选课表 SC,它们结构如下: S(S#,SN,SEX,AGE,DEPT) C(C#,CN) SC(S#,C#,GRADE)
其中:S#为学号,SN 为姓名,SEX 为姓名,AGE 为年龄,DEPT 为系别,C#为课程号,C课程名,GRADE 为成绩。
(1)检索所有比“王华”年龄大的学生姓名、年龄和性别。 答案:
SELECT SN,AGE,SEX FROM S WHERE AGE>(SELECT AGE FROM S WHERE SN=”王华”)
(2)检索学生姓名及其所选修课程的课程号和成绩。 答案:
SELECT S.SN,SC.C#,SC.GRADE FROM S, SC
WHERE S.S#=SC.S#
11.设有关系模式:S:学生信息,T:教师信息,C:课程信息,SC 成绩信息 S(NO, NAME, SEX, BIRTHDAY, CLASS(班号)); T(TNO, NAME,SEX,BIRTHDAY,PROF(职称),DEPART(所在系)) C(CNO,CNAME,TNO) SC(NO,CNO,DEGREE)
(1)列出 S 中所有记录的 NAME、SEX 和 CLASS 列; 答案:
SELECT NAME, SEX, CLASS FROM S (2)取出教师所有的单位(不重复的 DEPART); 答案:
SELECT DISTINCT DEPART FROM T (3)取出 S 中所有记录; 答案:
SELECT * FROM S
(4)取出 SC 中成绩在 60 到 80 之间所有记录; 答案:
SELECT * FROM SC
WHERE DEGREE BETWEEN 60 AND 80 (5)取出 SC 中成绩为 85,86 或 88 的记录; 答案:
SELECT * FROM SC
WHERE DEGREE IN (85, 86, 88)
(6)取出 S 中“95031”班或性别为“女”的同学记录; 答案:
SELECT * FROM S
WHERE CLASS=‘95031’OR SEX=‘女’ (7)以 CLASS 降序取出 S 中的所有记录; 答案:
SELECT * FROM S ORDER BY CLASS DESC
(8)以 CNO 升序、DEGREE 降序取出 SC 中所有记录; 答案:
SELECT * FROM SC ORDER BY CNO, DEGREE DESC (9)统计“95031”班的学生人数; 答案:
SELECT COUNT(*) FROM SWHERE CLASS=‘95031’ (10)取出 SC 表中最高分的学生学号和课程号; 答案:
SELECT NO,CNO,MAX(DEGREE)FROM SC (11)取出‘3-105’号课程的平均分;
答案:
SELECT AVG(DEGREE)FROM SC WHERE CNO=‘3-105’
(12)取出 SC 表中至少有 5 名学生选修的并以 3 课程号的平均分数; 答案:
SELECT CNO,AVG(DEGREE)FROM SC WHERE CON LIKE ‘3%’
GROUP BY CNO HAVING COUNT(*)>5 (14)取出所有学生的 NAME、CNO 和 DEGREE; 答案:
SELECT NAME, CNO, DEGREE FROM S, SC
WHERE S.NO=SC.NO
(15)取出所有学生的 NO、CNAME 和 DEGREE; 答案:
SELECT NO,CNAME,DEGREE FROM SC,C WHERE SC.CNO=C.CNO
(16)取出所有学生的 NAME、CNAME 和 DEGREE 答案:
SELECT NAME,CNAME,DEGREE FROM S,C,SC
WHERE S.NO=SC.NO AND SC.CNO=C.CNO (23)取出由教师“张旭”任课的学生成绩; 答案:
SELECT NO,CNO,DEGREE FROM SC WHERE CNO= (SELECT CNO FROM C,T
WHERE C.TNO=T.TNO AND T.NAME=’张旭’)
12.有两个数据库文件“客户.dbf”和“订单.dbf”如下: 客户(客户号、公司名、城市、地址、电话)
订单(订单号、客户号、订货日期、预付订金、交通(运输方式)、发货日期) 现用 SQL 语句进行以下查询:
(1)查询在上海所有客户的公司名、地址和电话 答案:
SELECT DISTINCT 公司名、地址、电话 FROM 客户
WHERE 城市=’上海’
(2)查询订单中每笔订货的公司名、订货日期、预付的订金和发货日期 答案:
SELECT A.公司名,B.订货日期,B.预付订金,B.发货日期 FROM 客户 A,订单 B WHERE A.客户号=B.客户号
(3)查询预付金降序排列输出每笔订单的订单号、客户名和预付的订金 答案:
SELECT DISTINCT A.订单号,B.公司名,A.预付订金 FROM 订单 A,客户 B WHERE A.客户号=B.客户号 ORDER BY A.预付订金 DESC
(4)列出预付金取多订单号、该笔订货的公司名和预付的金额 答案:
SELECT A.订单号,B.公司名,A.预付订金 FROM 订单 A,客户 B
WHERE A.预付订金(SELECT MAX(A.预付订金) FROM 订单 A)AND A.客户号=B. 客户号
(5)列出所有付的总金额 答案:
SELECT SUM(预付订金) FROM 订单
(6)从订单表中分组列出订货的公司名及该公司所订货物的有关信息 答案:
SELECT A.订单号,B.公司名,A.订货日期,A.发货日期,A.交通 FROM 订单 A,客户 B WHERE A.客户号=B.客户号 GROUP BY A.客户号
13.设有如下关系表 R: R(NO,NAME,SEX,AGE,CLASS)写出实现下列功能的 SQL 语句。
(1)插入一个记录(25,’李明’,21,’95031’) 答案:
INSERT INTO R VALUES(25,’李明’,21,’95031’)
(2)插入“95031”班学号为 30、姓名为“郑和”的学生记录 答案:
INSERT INTO R (NO,NAME,CLASS) VALUES (30,’郑和’,’95031’) (3)将学号为 10 的学生姓名改为“王华” 答案:
UPDATE R SET NAME=’王华’ WHERE NO=10 (4)将所有“95101”班号改为’95091’ 答案:
UPDATE R SET CLASS=’95091’ WHERE CLASS=’95101’ (5)删除学号为 20 的学生记录 答案:
DELETE FROM R WHERE NO=20 (6)删除姓“王”的学生记录 答案:
DELETE FROM R WHERE NAME LIKE ‘王%’ 20.设职工---社团数据库有三个基本表: 职工(职工号,姓名,年龄,性别);
社会团体(编号,名称,负责人,活动地点); 参加(职工号,编号,参加日期);
其中:
1)职工表的主关键字为职工号。
2)社会团体表的主关键字为编号;外关键字为负责人,被参照表为职工表,对应属性为职 工号。
3)参加表的职工号和编号为主关键字;职工号为外关键字,其被参照表为职工表,对应属 性为职工号;编号为外关键字,其被参照表为社会团体表,对应属性为编号。试用 SQL 语 句表达下列操作:
(1)定义职工表、社会团体表和参加表,并说明其主关键字和参照关系。 答案:
CREATE TABLE 职工(职工号 CHAR(10) primary key, 姓名 CHAR(8)NOT NULL, 年龄 SMALLINT, 性别 CHAR(2), )
CREATE TABLE 社会团体(编号 CHAR(8) primary key,
名称 CHAR(12)NOT NULL, 负责人 CHAR(10),
活动地点 VARCHAR(50),
FOREIGN KEY(负责人)REFERENCES 职工(职工号)); CREATE TABLE 参加(职工号 CHAR(10),
编号 CHAR(8), 参加日期 datetime,
PRIMARY KEY(职工号,编号),
FOREIGN KEY(职工号)REFERENCES 职工(职工号));
(2)建立下列两个视图。
社团负责人(编号,名称,负责人职工号,负责人姓名,负责人性别); 参加人情况(职工号,姓名,社团编号,社团名称,参加日期) 答案:
CREATE VIEW 社团负责人(编号,名称,负责人职工号,负责人姓名,负责人性别) AS SELECT 编号,名称,负责人,姓名,性别 FROM 社会团体,职工
WHERE 社会团体.负责人=职工.职工号
CREATE VIEW 参加人情况(职工号,姓名,社团编号,名称,参加日期) AS SELECT 参加.职工号,姓名,社会团体.编号,名称,参加日期 FROM 职工,社会团体,参加
WHERE 职工.职工号=参加.职工号 AND 参加.编号=社会团体.编号;