数据库---实验三 嵌套查询和视图操作

(一)	嵌套查询
1.	求选修了’MA’的学号和姓名。
SQL> select sno,sname from student where sno in(select sno from sc where cno=(select cno from course where cname='数学'));
2.	查询与刘明在同一个系学习的学生。
SQL> select * from student where sdept=(select sdept from student where sname='刘明');
3.	求选修1号课程的成绩高于刘晨的成绩(指刘明选修的所有的课程的成绩)的学生学号及成绩。
   SQL> select  sno,grade from sc where cno='1' and grade>all(select grade from sc where sno=(select sno from student where sname='刘明'));
4.	求其他系中比计算机系某一学生年龄小的学生(即年龄小于计算机系年龄最大者的学生)。
   SQL> select * from student where sdept!='CS' and sage<any(select sage from student where sdept='CS');
5.	求其他系中比计算机系学生年龄都小的学生姓名及年龄。
   SQL> select sname,sage from student where sdept!='CS' and sage<all(select sage from student where sdept='CS');
6.	求没有选修3号课程的学生姓名。
   SQL> select sname from student where sno not in(select sno from sc where cno='3');
7.	查询选修了全部课程的学生姓名。
       SQL> select sname from student where not exists(select * from course where not exists (select * from sc where sno=student.sno and cno=course.cno));
SQL语言中没有全称量词∨(,all)。但是可以把带有全称量词的谓词转换为等价的带有存在量词的谓词。(∨x)P≡∟(exists x(∟P))
试做:查询所有学生都选修的课程名
SQL> select cname from course where not exists(select * from student where not exists(select * from sc where sc.sno=student.sno and sc.cno=course.cno));
8.	求至少选修了学号为“20070002”的学生所选修全部课程的学生学号和姓名。
       SQL> select sno,sname from student where sno in(select distinct sno from sc scx where not exists(select * from sc scy where   scy.sno='20070002' and not exists(select * from sc scz where scz.sno=scx.sno and scz.cno=scy.cno)));
9.	求选修课程超过2门的学生的学号和姓名。
      SQL> select sno,sname from student where sno in(select sno from sc group by sno having count(*)>=2);

二、数据更新
1.插入数据
1)向Student表中插入2行数据,1行为你的信息,另一行自定。
 insert into student(sno,sname,ssex,sage,sdept) values(20143985,'陈健军','男',20,'CS');
insert into student(sno,sname,ssex,sage,sdept) values(20144065,'徐诚武','男',20,'CS');
截图如下:
 
2)向Course表中插入数据,1行为本门课程的信息,另一行自定。
SQL> insert into course(cno,cname,cpno,ccredit) values(8,'数据库系统概论',5,5);
SQL> insert into course(cno,cname,cpno,ccredit) values(9,'JAVA',7,6);
截图如下
  
3)向SC表中插入数据,插入你的这门课程的选课信息。
SQL> insert into sc(sno,cno,grade) values(20143985,5,98);
截图如下:
 
2.修改数据
1)将姓刘的同学删除。
  SQL> delete from student where sname like '刘%';
截图如下:
 
2)将’CS’系同学的选课信息中的成绩置0。
 SQL> update sc set grade=0 where sno in(select sno from student where sdept='CS');
截图如下:
 
3.删除数据
1)删除和’李佳’在同一个系的学生的信息。
SQL> delete from student where sdept=(select sdept from student where sname='李佳');
截图如下:

 
2)删除’CS’系同学的选课信息。
SQL> delete from sc where sno in(select sno from student where sdept='CS');
截图如下:
 

 

实验分析:

在本次数据库实验中,我完成了实验要求。本次实验内容是关于嵌套查询,在课堂上,老师讲授了嵌套查询相关知识,我也用笔练习写了sql语句,但是感觉印象还不是很深刻,有些不太理解。在实验课中我练习了sql语句,对课堂上所学的知识有了更深的理解,收获很多。实验中,我遇到了一些问题,通过查询资料和老师同学帮助最终解决了。遇到的问题如下:

1、在嵌套查询时,我感觉有点混乱,不知道怎么写,然后我后来一步步分析,先写好一个小的查询作为另一个查询的查询条件,一步步编写,查询就完成了。

2、在写关于exists的嵌套查询时,我感觉很难,查阅相关的资料后,明白了除法经常用exists实现。一般像至少、包括这样的题意时,关系代数要用除法实现,然后除法在sql语句中可以转化为两重not  exists实现。

在本次实验中感觉收获很多,很开心。

 

posted @ 2016-12-08 16:43  茶飘香~  阅读(2166)  评论(0编辑  收藏  举报