NEFU数据库实验题。若有版权问题,版权归NEFU。如果侵犯了版权,请及时联系我。这里仅供学习参考。
实验的设计实在是太棒了,三次实验基本涉及了SQL数据库经常用到的操作。方便同学熟悉SQL操作,准备相关面试环节或工作之用。
数据库SQL的基本操作1:建立表、修改表、删除表、建立索引、删除索引、数据增删改查
数据库SQL的基本操作2:单表查找、多表查找、嵌套查询、视图等
数据库SQL的基本操作3:模糊查询、oracle的安全性和完整性控制
1 已经创建的 SQL 数据表
Student 表:
Course 表:
SC 表:
2 单表查询操作
2.1 求数学系学生的学号和姓名
select Sno,Sname from Student where Sdept='MA';
结果:
2.2 求选修了课程的学生学号
select Sno from SC where Cno is not null;
结果:
2.3 求选修课程号为‘2’的学生号和成绩
select Sno,Grade from SC where Cno=2;
结果:
2.4 求选修课程号为’2’且成绩在 80 ~ 90 之间的学生学号和成绩,并将成绩乘以 0.8 输出
select Sno,Grade*0.8 from SC where Cno=2 and Grade>=80 and Grade<=90;
结果:
2.5 求数学系或计算机系姓张的学生的信息
select * from Student where Sname like '张%' and (Sdept='CS' or Sdept='MA');
结果:
2.6 求缺少了成绩的学生的学号和课程号
select SC.Sno,SC.Cno from SC where SC.Grade=null;
结果:
2.7 查询各个课程号与相应的选课人数
select SC.Cno,COUNT(Cno) from SC Group by Cno;
结果:
3 多表查询操作
3.1 查询每个学生的情况以及他所选修的课程
select * from Student left join SC on Student.Sno=Sc.Sno;
结果:
3.2 求学生的学号、姓名、选修的课程及成绩
select Student.Sno,Student.Sname,SC.Cno,SC.Grade from Student left join SC on Student.Sno=Sc.Sno;
结果:
3.3 求选修课程号为‘1’且成绩在 90 分以上的学生学号、姓名和成绩。
select Student.Sno,Student.Sname,SC.Grade from Student join SC on Student.Sno=Sc.Sno where SC.CNO=1 and SC.GRADE>90;
结果:
3.4 查询每一门课程的间接先行课
select c1.Cname,c3.Cname from Course c1,Course c2,Course c3 where c1.Cpno=c2.Cno and c2.Cpno=c3.cno;
结果:
3.5 查询与’刘晨’在同一个系学习的学生
select s1.Sname from Student s1,Student s2 where s1.Sdept=s2.Sdept and s2.Sname='刘晨';
结果:
3.6 查询选修了课程名为‘信息系统’的学生学号和姓名
select Student.Sno,Student.Sname from Student,Course,SC where Student.Sno=SC.Sno and SC.Cno=Course.Cno and Course.CNAME='信息系统';
结果:
3.7 查询平均成绩在 80 分以上的学生学号和平均成绩
select Sno,Avg(Grade) from SC group by Sno having Avg(Grade)>80;
结果:
3.8 查询选修了 1 门以上课程的学生的学号
select Sno from SC group by Sno having count(Cno)>1;
结果:
3.9 写一个外查询的语句
select SC.Sno,Student.Sname,SC.Cno,Sc.Grade from Student,SC where STUDENT.SNO=SC.SNO;
结果:
4 嵌套查询
4.1 求选修了信息系统的学号和姓名
select Student.Sno,Student.Sname from Student join SC on Student.SNO = SC.SNO where Cno=(select Cno from Course where Cno=3);
结果:
4.2 查询与刘晨在同一个系学习的学生
select * from Student where Sdept=(select Sdept from Student where Sname='刘晨');
结果:
4.3 3. 求选修 1 号课程的成绩高于刘晨的成绩(指刘晨选修的所有的课程的成绩)的学生学号及成绩
select Student.Sno,SC.Grade from Student join SC on Student.SNO = SC.SNO where SC.Grade>
(select MAX(SC.Grade) from Student join SC on Student.SNO = SC.SNO where SC.SNO=Student.SNO and Student.SNAME='刘晨');
结果:
4.4 求其他系中比计算机系某一学生年龄小的学生(即年龄小于计算机系年龄最大者的学生)
select * from Student where SAGE<(select MAX(Sage) from Student);
结果:
4.5 求其他系中比计算机系学生年龄都小的学生姓名及年龄
select * from Student where SAGE<(select MIN(Sage) from Student where Sdept='CS');
结果:
4.6 求没有选修 3 号课程的学生姓名
select Sno,Sname from Student where Sno in (select Sno from SC where Cno!=3);
结果:
4.7 查询选修了全部课程的学生姓名
select Sno,Sname from student where Sno IN (select Sno from SC group by Sno having count(*)=(select count(*) from course ));
结果:
4.8 求至少选修了学号为“20021522”的学生所选修全部课程的学生学号和姓名
select Sno,Sname from Student where Sno in(select Sno from SC where Cno in (select Cno from SC where Sno=200215122));
结果:
4.9 求选修课程超过 2 门的学生的学号和姓名
select Sno,Sname from Student where Sno in(select Sno from SC group by Sno having count(Cno)>2);
结果:
5 带子查询的修改语句
5.1 将计算机科学系全体学生的成绩置零
update SC set Grade=0 where Sno in(select Sno from Student where Sdept='CS');
结果:5 行已更新。
6 视图
6.1 建立信息系学生的视图
create view stu_info
as
select * from Student where SDEPT='CS';
结果:View STU_INFO 已创建。
6.2 (在视图上建立)建立信息系选修了 1 号课程的学生的视图
create view stu_course_1
as
select * from STU_INFO where Sno in(select Sno from SC where Cno=1);
结果:View STU_COURSE_1 已创建。
6.3 将学生的学号及其平均成绩定义为一个视图
create view sno_and_avggrade
as
select Sno,avg(Grade)AVG_GRADE from SC group by Sno;
结果:View SNO_AND_AVGGRADE 已创建。
6.4 将 Student 表中所有女生记录定义为一个视图 m_stu(sno,sname,dept),并设置其更新限制
create view m_stu
as
select Sno,Sname,Sdept from Student;
结果:View M_STU 已创建。
6.5 对 4 中的视图进行 insert,update,delete 操作观察其执行情况
insert into m_stu values(200215129,'李百','CS');
结果:1 行已插入。
update m_stu set Sno=123456789 where Sno=200215129;
结果:1 行已更新。
delete from m_stu where Sno=123456789;
结果:1 行已删除。
7 其他
7.1 Where 子句中能否用聚集函数作为条件表达式。
答:不能。Where 是条件语句,后面应该跟着的是条件。
7.2 多表连接查询中如果显示的某一属性不止一个表中出现,应如何处理。
答:将多个表进行连接。
7.3 在嵌套查询中,什么情况下用“IN”和“=”都可以。
答:当 in 后面的子查询语句只返回一行的时候,“IN”和“=”都可以。
0
Hello! I simply would like to give a huge thumbs up for the nice information you’ve got here on this post. I will likely be coming back to your blog for extra soon.
very nice submit, i actually love this web site, keep on it
WONDERFUL Post.thanks for share..extra wait .. ?