资源描述
SQL语句练习
1.设学生选课数据库有关系S(sno,sname,age,sex)、SC(sno,cno,grade)和C(cno,cname,teacher),分别表示学生、选课和课程,sno代表学号,sname代表学生姓名,age代表年龄,sex代表性别,grade代表成绩,cno代表课程号,teacher代表任课教师。试完成表示下列查询。
S
sno
sname
age
sex
1
李强
23
男
2
刘丽
22
女
5
张友
22
男
SC
sno
cno
grade
1
k1
83
2
k1
85
5
k1
92
2
k5
90
5
k5
84
5
k8
80
C
cno
cname
teacher
k1
C语言
王华
k5
数据库原理
程军
k8
编译原理
程军
(1)检索年龄大于21的男学生学号(sno)和姓名(sname)。
(2)建立性别只能为“男”、“女”的约束。
(3)创建一个视图v1,该视图用来查询学生的选课情况,要求包含:学生姓名(sname),课程名(cname),任课教师teacher和成绩grade。
(4)检索选修课程号为k1和k5的学生学号(sno)。
(5)检索全部学生都选修的课程的课程号(cno)和课程名(cname)。
(6)删除所有男同学的选课记录。
1.(1)select sno,snae from s where sex=’男’ and age>21
(2)alter table s add constraint c1 check sex in (‘男’,’女’)
(3)create view v1 as select sname,cname,teacher,grade from s,sc,c where s.sno=sc.sno and o=o
(4)select sno from sc sc1 where cno=’k1’ and exists (select * from sc sc2 where sc1.sno =sc2.sno and o=’k5’)
(5)select cno,cnam from c where not exists (select * from s where not exists (select * from sc where o=o and s.sno=sc.sno)
(6)delete from sc where sno in (select sno from s where sex=’ 男’)
或 delete sc from sc,s where s.sno=sc.sno and sex=’ 男’
2.设图书借阅数据库有关系图书(图书编号,书名,作者,出版社,出版时间,图书类别)、读者(读者编号,姓名,读者类别)和借阅(读者编号, 图书编号, 借阅日期,还期)。其中,读者类别为字符型,可以取值‘学生’和‘教师’,图书类别为字符型,取值为‘经济类’、‘管理类’、‘外语类’、‘计算机类’等。试用SQL语句完成下列查询。
对图书借阅数据库完成以下操作:
(1)查询借阅了作者为“张强”的图书的读者编号和图书编号。
(2)创建一个视图v1,该视图用来查询教师的借阅情况,要求包含:教师姓名、书名、借阅日期、还期。
(3)查询所借的书名中包含“程序设计”这四个字的读者的读者编号和借阅日期。
(4)根据图书类别统计各类图书的借书数量并按数量由大到小排序。
(5)删除出版社是“电子出版社”的借书记录。
(6)查询借阅了“电子出版社”和“机械出版社”出版的图书的读者编号。
3.现有关系数据库如下:
学生(学号,姓名,性别,专业、奖学金)
课程(课程号,课程名,学分)
选课(学号,课程号,分数)
(1)列出学号为“98001”的已有成绩的各门课名称与成绩。
(2)删除姓名为“陈红”的所有选课记录。
(3)检索获得奖学金、并且至少有一门课程成绩在90分以上的学生信息,包括学号、姓名和专业。
(4)将对选课表的全部权限授予用户王平,并且王平可以授权给其它用户。
(5)求学号为“785222”的学生所选课程的总学分。
(6)将课程名为 “数据库”的成绩置为0。
(7)在选课情况表中插入各门课的选课信息。
参考答案:
1.(1)select sno,snae from s where sex=’男’ and age>21
(2)alter table s add constraint c1 check sex in (‘男’,’女’)
(3)create view v1 as select sname,cname,teacher,grade from s,sc,c where s.sno=sc.sno and o=o
(4)select sno from sc sc1 where cno=’k1’ and exists (select * from sc sc2 where sc1.sno =sc2.sno and o=’k5’)
(5)select cno,cnam from c where not exists (select * from s where not exists (select * from sc where o=o and s.sno=sc.sno)
(6)delete from sc where sno in (select sno from s where sex=’ 男’)
或 delete sc from sc,s where s.sno=sc.sno and sex=’ 男’
2.(1)select 读者编号,图书编号 from 借阅,图书 where 借阅.图书编号=图书.图书编号 and 作者 =’张强’
(2)create ciew v1 as select 教师姓名,书名,借阅日期,还期 from 读者,图书,借阅 where 读者.读者编号=借阅. 读者编号 and借阅.图书编号=图书.图书编号 and 读者类别=’教师’
(3)select读者编号, 借阅日期 from图书,借阅 where 借阅.图书编号=图书.图书编号 and 书名 like ‘%程序设计%’
(4)select 图书类别,count(图书编号) from 图书,借阅 where 借阅.图书编号=图书.图书编号 group by图书类别 order by count(图书编号) desc
(5)delete 借阅 from 图书,借阅 where 借阅.图书编号=图书.图书编号 and 出版社=
‘电子出版社’
或 delete from 借阅 where 图书编号 in (select 图书编号 from 图书 where出版社=
‘电子出版社’)
(6)select 读者编号 from 读者 a where exists (select * from借阅 w1 where a. 读者编号=w. 读者编号 and 图书编号 in (select图书编号 from图书 where出版社=‘电子出版社’) and exists (select * from 借阅 w2 where 图书编号 in (select图书编号 from图书 where出版社=‘机械出版社’ and a.读者编号=w2. 读者编号)
3. (1)SELECT 课程名,成绩 FROM 课程,选课 WHERE 课程.课程号=选课.课程号 AND 学号=“98001” AND 成绩 IS NOT NULL
(2)DELETE FROM 选课 WHERE 学号 IN (SELECT 学号 FROM 学生 WHERE 姓名=’陈红’)
(3)SELECT 学号,姓名,专业 FROM 学生 WHERE 奖学金>0 AND EXISTS
(SELECT * FROM 选课 WHERE 学生.学号=选课.学号 AND 成绩>95)
(4)GRANT ALL PRIVILEGES ON 选课 TO 王平 WITH GRANT OPTION
(5)SELECT SUM(学分) FROM 学生,选课,课程 WHERE 学生.学号=选课.学号 AND
选课.课程号=课程.课程号 AND 学号=“785222”
(6)UPDATE 选课 SET 成绩=0 WHERE 课程号=(SELECT 课程号 FROM 课程
WHERE 课程名=“数据库”
(7)INSERT INTO选课情况 SELECT 课程号,课程名,COUNT(*) FROM 选课
GROUP BY 课程号
展开阅读全文