内容发布更新时间 : 2024/12/23 1:50:29星期一 下面是文章的全部内容请认真阅读。
3-5讨论当对一个视图进行更新的时候可能会出现什么样的问题? 答:
1) 若视图的属性来自属性表达式或常数,则不允许对视图执行INSERT和UPDATE操作,
但允许执行DELETE操作。
2) 若视图的属性来自库函数,则不允许对此视图更新。
3) 若视图定义中有GROUP BY子句,则不允许对此视图更新。 4) 若视图定义中有DISTINCT任选项,则不允许对此视图更新。
5) 若视图定义中有嵌套查询,并且嵌套查询的FROM子句涉及导出该视图的基本表,
则不允许对此视图更新。
6) 若视图由两个以上的基本表导出,则不允许对此视图更新。
7) 如果在一个不允许更新的视图上再定义一个视图,这种二次视图是不允许更新的。
3-6设有两个基本表R(A,B,C) 和 S(A,B,C)试用SQL查询语句表达下列关系代数表达式:
⑴ R∩S ⑵ R-S ⑶R∪S ⑷ R×S
(1) (select * from R) INTERSECT (select * from S) (2) (select * from R) EXCEPT (select * from S) (3) (select * from R) UNION (select * from S) (4) select * from R,S
3-7对于教学数据库的三个基本表:
S(学号,姓名 ,年龄,性别) SC(学号 ,课程号,成绩)
C(课程号 ,课程名,任课教师姓名) 试用SQL语句表达下列查询:
⑴ 查询“刘某”老师所授课程的课程号和课程名。 ⑵ 查询年龄大于23岁的男同学的学号和姓名。
⑶ 查询学号为S3的学生所学课程的课程号、课程名和任课教师姓名。 ⑷ 查询“张小飞”没有选修的课程号和课程名。 ⑸ 查询至少选修了3门课程的学生的学号和姓名。 ⑹ 查询全部学生都选修了的课程编号和课程名称。 ⑺ 在SC中删除尚无成绩的选课元组。
⑻ 把“高等数学”课的所有不及格成绩都改为60。 ⑼ 把低于总评均成绩的女同学的成绩提高5%。 ⑽ 向C中插入元组(‘C8’,‘VC++’,‘王昆’)。 3-7
(1) 查询“刘某”老师所授课程的课程号和课程名; SELECT课程号, 课程名 FROM C
WHERE任课教师姓名LIKE '刘*'
(2) 查询年龄大于23岁的男同学的学号和姓名; SELECT 学号,姓名 FROM S
WHERE 年龄>23 AND 性别='男'
16
(3) 查询学号为S3的学生所学课程和课程号,课程名和任课教师姓名 SELECT C.课程号, 课程名, 任课教师姓名 FROM C, SC
WHERE SC.学号='S3' And C.课程号=SC.课程号
(4) 查询“张小飞”同学没有选修的课程的课程号和课程名; SELECT C.课程号, C.课程名 FROM C
WHERE 课程号 NOT IN (SELECT 课程号 FROM SC
WHERE 学号 IN
(SELECT 学号 FROM S WHERE 姓名='张小飞')); 或者 SELECT * FROM C
WHERE NOT EXISTS (SELECT SC.课程号 FROM SC,S
WHERE SC.课程号=C.课程号 AND S.学号=SC.学号 AND S.姓名='张小飞') 或者 SELECT * FROM C
WHERE 课程号 NOT IN (SELECT 课程号 FROM SC,S
WHERE S.学号=SC.学号 AND S.姓名='张小飞')
(5) 查询至少选修了3门课程的学生的学号和姓名; SELECT 学号, 姓名 FROM S
WHERE 学号 IN (SELECT 学号 FROM SC
GROUP BY 学号
HAVING COUNT (课程号)>=3)
(6) 查询全部学生都选修了的课程号和课程名; SELECT 课程号,课程名 FROM C
WHERE NOT EXISTS (SELECT 学号
17
FROM S
WHERE NOT EXISTS (SELECT 学号 FROM SC
WHERE SC.课程号=C.课程号 AND S.学号=SC.学号)) 或者
SELECT 课程号, 课程名 FROM C
WHERE NOT EXISTS ((SELECT 学号 FROM S) EXCEPT (SELECT 学号 FROM SC
WHERE SC.课程号=C.课程号))
(7) 在SC表中删除无成绩的选课纪录; DELETE * FROM SC
WHERE GRADE is null;
(8) 把“高等数学”的所有不及格成绩都改为60分; UPDATE SC SET 成绩 = 60
WHERE GRADE< 60 AND 课程号 = (SELECT 课程号 FROM C
WHERE 课程名='高等数学')
(9) 把低于总平均成绩的女同学的成绩提高5% UPDATE sc
SET 成绩 = 成绩*(1+0.05) WHERE 学号 in
(select 学号 from s where 性别='女') and 成绩 < (select avg(成绩) from sc);
(10) 向C中插入元组(“C8”,“VC++”,“王昆”) INSERT INTO c
VALUES ('C8', 'VC++', '王昆');
3-8图3-2中显示的数据库模式Library,用来记录书籍、借书人和书籍借出的情况,参照完整性在图中用有向弧来表示,请用SQL语言建立图中的关系模式,并完成下列操作:
18
图3-2 Library数据库模式
⑴ 查询“高等教育出版社”出版的所有图书名称和编号; ⑵ 查询所有作者是“郭雨辰”的图书的编号和名称; ⑶ 查询“李明”借过的所有图书的名称;
⑷ 查询“李明”从2008年1月1日到2009年1月1日期间借过的图书名称;
⑸ 列出从2008年1月1日到2009年1月1日期间没有被人借过的图书名称和编号; ⑹ 列出从2008年1月1日到2009年1月1日期间借出次数最多的10本图书名称; ⑺ 将“高等教育出版社”的电话改为“010-64054588”; 3-8 (1)
SELECT BookID , Title FROM Book
WHERE PublishName=’高等教育出版社’ (2)
SELECT BookID, Title FROM BookID, Book
WHERE Book.BookID=Author.BookID AND Author=’郭雨辰’ (3)
SELECT Title
FROM Book, Borrow, Borrower WHERE Borrow.CardID=Borrower.CardID AND Borrow.BookID=Book.BookID AND Borrower.Name=’李明’ (4)
SELECT Title
FROM Book, Borrow, Borrower
WHERE Borrow.CardID=Borrower.CardID AND Borrow. BookID=Book.BookID AND Borrower.Name=’李明’ AND DateOut BETWEEN 2008-1-1 AND.2009-1-1 (5)
SELECT Title
19
FROM Book
WHERE NOT EXISTS (SELECT *
FROM Borrow,Book
WHERE Borrow. BookID=Book.BookID AND Dateout Between 2008-1-1 AND 2009-1-1) (6)
SELECT top 10 Title FROM Book, Borrow
WHERE Borrow. BookID=Book.BookID AND Dateout Between 2008-1-1 AND 2009-1-1 GROUP BY Book.BookID
ORDER BY Book.BookID DESC (7)
UPDATE Publisher
SET Phone=’010-64054588’
WHERE Name=’高等教育出版社’
3-9 针对3.8建立的表,用SQL语言完成下列操作: ⑴ 把对所有表的INSERT权限授予“张丽”,并允许她将此权限授予其他用户; Grant INSERT to ‘张丽’ with grant option
⑵ 把查询和修改BORROWER的权限受给用户“王伟”。 Grant select, update on BORROWER to ‘王伟’
20