《大数据库-第四次实验报告材料-视图-t-sql语句(共27页).doc》由会员分享,可在线阅读,更多相关《大数据库-第四次实验报告材料-视图-t-sql语句(共27页).doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上实验十报告 创建视图 兰州大学数据库实验报告实验目的1掌握创建视图的SQL语句的用法。2掌握使用企业管管理器创建视图的方法。3掌握使用创建视图向导创建视图的方法。4掌握查看视图的系统存储过程的用法。5掌握修改视图的方法。一 实验准备1了解创建视图方法。2了解修改视图的SQL语句的语法格式。3了解视图更名的系统存储过程的用法。4了解删除视图的SQL语句的用法。二 实验要求1. 用不同的方法创建视图。2. 提交实验报告,并验收实验结果。三 实验内容1. 创建视图(1) 使用企业管理器创建视图 在EDUC库中以“student”表为基础,建立一个名为“V_计算机系学生”的视
2、图。在使用该视图时,将显示“student”表中的所有字段. 视图如下:(2) 使用SQL语句创建视图 在查询分析器中建立一个每个学生的学号、姓名、选修的课名及成绩的视图S_C_GRADE;Create VIEW S_C_GRADEAS SELECT student.sno,sname,cname,scoreFROM student,course,student_courseWHERE student.sno=student_course.sno AND o=student_o;视图如下: 建立一个所有计算机系学生的学号、选修课程号以及平均成绩的视图COMPUTE_AVG_GRADE;Crea
3、te VIEW COMPUTE_AVG_GRADEAS SELECT student.sno,o,AVG(score) 平均成绩FROM student,course,student_courseWHERE student.sno=student_course.sno AND o=student_o AND student.dno=CSGROUP BY student.sno,o;视图如下:2. 修改视图 (1) 使用企业管理器修改视图在企业管理器中将视图COMPUTE_AVG_GRADE中改成建立在数学系的学生学号、选修课程号以及平均成绩的视图。(IS设为数学系)(2) 使用SQL语句修改视
4、图 在查询分析器中使用更改视图的命令将上面建立的视图“V_计算机系学生”更名为“V_计算机系男生”。SP_RENAME V_计算机系学生,V_计算机系男生;3. 删除视图(1) 使用企业管理器删除视图 用企业管理器删除视图“V_计算机系学生”(2) 使用SQL语句删除视图用SQL语句删除视图COMPUTE_AVG_GRADE;DROP VIEW COMPUTE_AVG_GRADE;专心-专注-专业实验十一 使用视图一 实验目的1. 熟悉和掌握对数据表中视图的查询操作和SQL命令的使用;2. 熟悉和掌握对数据表中视图的更新操作和SQL命令的使用,并注意视图更新与基本表更新的区别与联系3. 学习灵
5、活熟练的进行视图的操作,认识视图的作用二 实验准备1熟悉SQL SERVER 工作环境。2能连接到EDUC数据库。3复习有关视图操作的SQL语言命令。三 实验要求1. 在实验开始之前做好准备工作。2. 实验之后提交实验报告,思考视图和基本表的区别四 实验内容一 定义视图在EDUC数据库中,已Student Course 和Student_course 表为基础完成一下视图定义 定义计算机系学生基本情况视图V_Computer;CREATE VIEW V_ComputerASSELECT student.*FROM studentWHERE student.dno=CS;视图如下: 将Stude
6、nt Course 和Student_course表中学生的学号,姓名,课程号,课程名,成 绩定义为视图V_S_C_GCREATE VIEW V_S_C_GASSELECT student.sno,sname,o,ame,scoreFROM student,course,student_courseWHERE student.sno=student_course.sno AND o=student_o;视图如下: 将各系学生人数,平均年龄定义为视图V_NUM_AVGCREATE VIEW V_NUM_AVGASSELECT COUNT(dno) 各系人数,AVG(sage) 平均年龄FROM
7、studentGROUP BY dno;视图如下: 定义一个反映学生出生年份的视图V_YEARCREATE VIEW V_YEARASSELECT sname,2014-sage 出生年份FROM student;视图如下: 将各位学生选修课程的门数及平均成绩定义为视图V_AVG_S_GCREATE VIEW V_AVG_S_GASSELECT student.sno 学号,sname 姓名,COUNT(*) 选修门数,AVG(score) 平均成绩FROM student,student_courseWHERE student.sno=student_course.snoGROUP BY s
8、tudent.sno,sname;视图如下: 将各门课程的选修人数及平均成绩定义为视图V_AVG_C_GCREATE VIEW V_AVG_C_GASSELECT cno 课程号,COUNT(cno) 选修人数,AVG(score) 平均成绩FROM student_courseGROUP BY cno;视图如下:二 使用视图1. 查询以上所建的视图结果。所建视图结果如上题截图所示2. 查询平均成绩为90分以上的学生学号、姓名和成绩;SELECT 学号,姓名,平均成绩FROM V_AVG_S_GWHERE 平均成绩90;3. 查询各课成绩均大于平均成绩的学生学号、姓名、课程和成绩;SELECT
9、 V_S_C_G.sno,V_S_C_G.sname,V_S_C_G.cname,V_S_C_G.scoreFROM V_S_C_G,V_AVG_S_GWHERE V_S_C_G.sno=V_AVG_S_G.学号 AND V_S_C_G.scoreV_AVG_S_G.平均成绩;4. 按系统计各系平均成绩在80分以上的人数,结果按降序排列;1先创建学生学号-系别视图V_STUDENTCREATE VIEW V_STUDENTASSELECT sno,dnoFROM student; 2进行查询SELECT V_STUDENT.dno 系别,COUNT(V_STUDENT.sno) 人数FROM
10、V_STUDENT,V_AVG_S_GWHERE V_STUDENT.sno=V_AVG_S_G.学号 AND V_AVG_S_G.平均成绩80GROUP BY V_STUDENT.dno;三 修改视图1. 通过视图V_IS,分别将学号为“S1”和“S4”的学生姓名更改为“S1_MMM”,”S4_MMM” 并查询结果;UPDATE V_IS SET sname=S1_MMM WHERE SNO=32011;UPDATE V_IS SET sname=S4_MMM WHERE SNO=32014;SELECT *FROM V_ISWHERE sno=32011 OR sno=32014;2. 通
11、过视图V_IS,新增加一个学生记录 (S12,YAN XI,19,IS),并查询结果INSERT INTO V_IS(sno,sname,sex,dno,sage)VALUES(S12,YAN XI,女,IS,19)SELECT * FROM V_IS WHERE sno=S12;3. 要通过视图V_AVG_S_G,将学号为“S1”的平均成绩改为90分,是否可以实现?并说明原因答:不能实现,因为视图或函数V_AVG_S_G 包含聚合、DISTINCT 或GROUP BY 子句或者PIVOT 或UNPIVOT 运算符,所以无法进行更新。UPDATE V_AVG_S_G SET 学号=32011
12、WHERE 平均成绩=90;实验十二 更新语句一 实验目的1 熟悉使用UPDATE/INSERT/DELETE语句进行表操作;2 能将这些更新操作应用于实际操作中去;二 实验准备1了解这些更新语句的基本语法和用法;三 实验要求1 完成下面的实验内容,并提交实验报告;2 在实验报告中附上相应的代码;四 实验内容1 对于student表,将所有专业号为001的,并且入学年份为2006的学生,或是专业号为003,并且年龄小于20岁的学生的班级号改为001。UPDATE student SET classno=001 WHERE (mno=001AND YEAR(sctime)=2006)OR(mno
13、=003AND (year(getdate()-year(sdate)20);2 对于student表,删掉所有年龄小于20岁,并且专业号为003的学生的记录。DELETE FROM studentWHERE mno=003AND (year(getdate()-year(sdate)=ALL(select sctime FROM student) OR year(sdate)=ALL(select year(sdate) from student)5 对于student表,将平均年龄最小的一个院系的院系编号改为008。UPDATE student SET dno=008 where dno
14、in( SELECT top 1 dno FROM student GROUP BY dno ORDER BY AVG(year(getdate()-year(sdate) )实验十三 T-SQL编程一、【实验目的】1、掌握T_SQL编程的基本语法 2、常用函数的使用方法 二、【实验要求】1、使用查询分析器练习T-SQL编程方法 2、练习函数的使用三、【实验准备】1、复习与本次实验内容相关知识2、预习相关函数(请预查阅CONVERT、DATENAME、GFTDATE函数的用法) 四、【实验内容】1、条件结构 自己编写一段程序判断一个年份(比如1900年)是否是闰年,是则显示1900年为闰年,否
15、则显示1900年不是闰年. DECLARE year INTSELECT year=2014if year%4=0 and year%1000 print CONVERT(CHAR(4),year)+是闰年 else print CONVERT(CHAR(4),year)+不是闰年 2、循环结构 (1)下面是计算1100和的循环结构,执行之,体会循环结构程序,注意语句块标志BEGIN . END DECLARE SUM INT,I INTSELECT I=1,SUM=0WHILE I=100BEGINSELECT SUM=SUM+ISELECT I=I+1ENDPRINT 1.100的和为:+
16、CONVERT(CHAR(4),SUM) (3) 编写一个程序用于计算10的阶乘 DECLARE SUM INT,I INTSELECT I=1,SUM=1WHILE I50 then 定价太高,不适合作教材else 定价 + CAST(定价 as varchar(5) + ,可以作教材 end 可否作为教材from 图书(2) 请自己编程实现各位同学的成绩以等级分显示即:90分及以上为优,80分及以上到90以下为良,70分及以上到80分以下为中,60分及以上到70分以下为及格,其余为不及格. SELECT student.sno ,sname ,cname, CASE WHEN studen
17、t_course.score =90 THEN 优 when student_course.score=80 and student_course.score =70 and student_course.score =60 and student_course.score=70 THEN 及格 else 不及格 END GRADEFROM student_course,course,studentWHERE student_o=o AND student_course.sno=student.sno4、函数使用下面查询,显示当前日期,显示格式为:今天是XXXX年XX月XX日,星期X,执行之,体会系统函数的用法. SELECT 今天是+DATENAME(YEAR,GETDATE()+年+DATENAME(MONTH,GETDATE()+月+DATENAME(DAY,GETDATE()+日,+DATENAME(WEEKDAY,GETDATE()