1、1. 熟悉SQL的数据定义、数据操纵功能;2. 掌握利用SQL语句进行多表内/外连接查询和嵌套查询的方法;3. 掌握GROUP BY子句、HAVING子句、ORDER BY子句的用法;4. 掌握(NOT)IN、(NOT)EXISTS等谓词的用法;5. 掌握SUM、AVG、COUNT、MAX、MIN等集合函数的用法;6. 掌握SQL语句中数据更新相关操作;7. 熟悉视图基本操作:定义、查询、更新视图。二. 实验内容及要求本实验的表结构如下所示:Student (sno, sname, sex,sage,dept, oldgrade, advisor)Teacher (tno, tname, de
2、pt, salary, title)Course (cno, cname, descry, dept, credit)SC (sno, cno, grade)以上数据库表的含义为: Student学生:sno(学号),sname(学生姓名),sex(性别),sage(年龄),dept(所在院系),oldgrade(高考成绩),advisor(导师) Teacher教师:tno(教师编号),tname(教师姓名),dept(所在院系),salary(工资),title(职称) Course课程:cno(课程号),cname(课程名),descry(课程说明),dept(开课院系),credits
3、(学分) SC成绩:sno(学号),cno(课程号),grade(成绩)根据上述情况完成:1. 使用SQL语句定义上述各表。2. 查询选修了105323号课程的学生姓名。3. 查询所有的学生及其选课信息。4. 分别利用内连接、左连接和右连接实现上题,观察异同。5. 查询工资不在2000到3000的教师姓名,按工资排序。6. 查询高考平均成绩大于700分的学生所在院系。7. 查询所有院系的平均高考成绩,并按平均成绩排序。8. 查询所有学生的学号及成绩,并计算总成绩。9. 查询每个院系教师的最高工资。10. 把Teacher表中dept字段值为“计算机科学系”的记录修改为“信息科学与工程学院”。1
4、1. 新建一个视图,并依此查询课程编号为205323,成绩大于80分的学生名。12. 为 Teacher表增加一个字段,电话(Phone),数据类型char(12),允许空。三. 实验过程及结果1. 定义上述各表的SQL语句是:CREATE TABLE teacher(tno char(3) primary key,tname char(8),dept varchar(20),salary int,title char(6); CREATE TABLE student(sno char(7) primary key,sname char(8),sex char(2),dept varchar(
5、20),oldgrade int,tno char(3);CREATE TABLE Course(cno char(6) primary key,cname varchar(20),descry varchar(50),dept varchar(20),credit float);CREATE TABLE SC(sno char(7),cno char(6) ,grade int,primary key (sno,cno); 各表创建完成后执行结果如下图1所示: 图1 引入脚本,将各表数据信息录入,以便完成以下的要求。2. 查询选修了105323号课程的学生姓名,SQL语句是:select s
6、name from student,course where cno = 105323;或者:select sname from student,course where cno like105323;运行结果如图2所示: 图23. 查询所有的学生及其选课信息,SQL语句是:select student.*,sc.* from student,sc where student.sno = sc.sno;运行结果如图3所示: 图3内连接:相比等值连接,内链接把目标列中重复的属性列去掉啦。用内连接查询所有的学生及其选课信息,SQL语句是:select student.sno,sname,sex,d
7、ept,oldgrade,tno,cno,grade from student,sc where student.sno = sc.sno;运行结果如图4所示: 图4左连接:列出左边关系中所有的元祖,运行结果如下图5所示: 图5右连接:列出右边关系中所有的元祖,运行结果如下图6所示:select sc.sno,cno,grade,sname,sex,dept,oldgrade,tno from student right outer join sc on (student.sno = sc.sno); 图65. 查询工资不在2000到3000的教师姓名,按工资排序,SQL语句是:Select
8、tname from teacher where salary 3000 order by salary;Select tname from teacher where salary not between 2000 and 3000 order by salary;运行结果如下图7所示: 图76. 查询高考平均成绩大于700分的学生所在院系,SQL语句及运行结果如下图8所示: 图87. 查询所有院系的平均高考成绩,并按平均成绩排序,SQL语句是: select dept,avg(oldgrade) from student group by dept order by avg(oldgrad
9、e); 运行结果如下图9所示: 图98. 查询所有学生的学号及成绩,并计算总成绩,SQL语句是:Select student.sno,count(grade)from student,sc where student.sno=sc.sno group by student.sno;运行结果如下图10所示: 图109. 查询每个院系教师的最高工资,SQL语句是:select dept,MAX(salary) from teacher group by dept;运行结果如下图11所示: 图1110. 把Teacher表中dept字段值为“计算机科学系”的记录修改为“信息科学与工程学院”,SQL语
10、句是:update teacher set dept = 信息科学与工程学院 where dept = 计算机科学;查询修改后的运行结果如下图12所示: 图12新建视图ISstudent的SQL语句是:create view ISstudent as select sname , cno, grade from student,sc;运行结果如下图13所示: 图13查询SQL语句是:select sname from ISstudent where cno like 205323 and grade 80;运行结果如下图14所示: 图14 增加字段phone的SQL语句及增加后的查询结果如下图
11、15、图16所示: 图15 图16四实验中的问题及心得从这次实验中,我认识了什么是交互式SQL,对数据库的书写规范有了更深刻的印象。通过对数据库进行创建,用SQL语句对数据进行更新相关操作,了解到SQL语句功能的强大之处, 简单的一句sql语句就能对数据进行定义、查询、操纵和控制。通过此次实验,我还简单掌握了group by子句、having子句、order by子句及sum、avg、count、max、min等集合函数的用法;也对视图的创建、查询、更新有了进一步的了解。但是,此次实验课上的练习是远远不足以保证能完全掌握对数据库的使用,若想完全熟悉用SQL对基本表和视图进行操纵,接下来必须加强练习。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1