NEFU数据库实验题。若有版权问题,版权归NEFU。如果侵犯了版权,请及时联系我。这里仅供学习参考。

实验的设计实在是太棒了,三次实验基本涉及了SQL数据库经常用到的操作。方便同学熟悉SQL操作,准备相关面试环节或工作之用。

数据库SQL的基本操作1:建立表、修改表、删除表、建立索引、删除索引、数据增删改查

数据库SQL的基本操作2:单表查找、多表查找、嵌套查询、视图等

数据库SQL的基本操作3:模糊查询、oracle的安全性和完整性控制

Contents

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
Posted in Database

Leave a Comment:

电子邮件地址不会被公开。