机会总是留给有准备的人。
3. 建立上述教师工资表teacher的按编号的索引,索引名称为teach
Create index teach on teacher(bh); 唯一索引 unique index ,聚族索引 clustered index
4. 建立上述教师工资表teacher的视图,视图包括姓名、基本工资、实发工资,名称为BMV,条件
是部门是“经管系”。 Cteate view BMV as Select XM,JBGZ,SFGZ From teacher Where bm=’经管系’;
5. 删除基本表教师工资表teacher。
Drop table teacher;
七、综合题(本题15分)
针对第五题所用的三张表,用SQL语言进行下列各项操作: 设有关系模式为:
学生(学号,姓名,性别,年龄,所在系) 课程(课程号,课程名,先行课) 选课(学号,课程号,成绩)
1. 查询年龄在18到22之间的学生的姓名,年龄,所在系;(2分)
Select 姓名,年龄,所在系 From 学生
Where 年龄 between 18 and 22; 2. 查询所有姓“李”的学生的成绩;(2分)
Selecct 成绩 From 选课
Where 学号 IN( Select 学号 From 学生 Where 姓名 like ‘李%’
);
3. 查询选修了5门以上课程的学生学号;(2分)
Select 学号 From 选课 Group by 学号 Having count(*)>=5
4. 查询选修了“数据库原理”这门课的学生的姓名;(2分)
Selecct 姓名 From 学生
Where 学号 IN( Select 学号 From选课 Where 课程号 IN(
第 5 页 共 29 页
机会总是留给有准备的人。
Select课程号 From 课程 Where 课程名=’数据库原理’ ) );
5. 查询其他系中比“经管系“所有学生年龄都大的学生名单(2分)
Select From学生
Where 年龄>=(select max(年龄) from 学生 where 所在系=’经管系’); 6. 查询选修了全部课程的学生学号和姓名。(2分)
Selecct 学号,姓名 From 学生
Where not exists( Select * From 选课 Where 课程号 not exists( Select * From 课程 Where 学生.学号=选课.学号 and 选课.课程号=课程.课程号
) );
参考:
思路:学号未知,科目未知,说明有两个未知变量。应该有两个EXISTS。我们可以扫描 student 和 course共有 s * c 中组合,将这些组合与SC的每一项进行匹配,注意s*c组合已经包含所
有可能。如果全部找到 ,就说明已经选修了全部课程。找不到就说明有课程没选修 。再将没选修的的
提交给上一exists 循环 。若上一exists 不存在的再提交给外循环。 select Sname from student where NOT exists // (select * from course