mysql实验四数据库查询和视图_数据库-第四次实验报告-视图-
t-sql语句
实验⼗报告 创建视图
实验⽬的
1.掌握创建视图的SQL语句的⽤法。
2.掌握使⽤企业管管理器创建视图的⽅法。 3.掌握使⽤创建视图向导创建视图的⽅法。 4.掌握查看视图的系统存储过程的⽤法。 5.掌握修改视图的⽅法。 ⼀. 实验准备
1.了解创建视图⽅法。
2.了解修改视图的SQL语句的语法格式。 3.了解视图更名的系统存储过程的⽤法。 4.了解删除视图的SQL语句的⽤法。 ⼆. 实验要求
1. ⽤不同的⽅法创建视图。
2. 提交实验报告,并验收实验结果。 三. 实验内容 1. 创建视图
(1) 使⽤企业管理器创建视图
① 在EDUC库中以“student”表为基础,建⽴⼀个名为“V_计算机系学⽣”的视图。在使⽤该视图时,将显⽰“student”表中的所有字段.
兰州⼤学数据库实验报告
视图如下:
(2) 使⽤SQL语句创建视图 ① 在查询分析器中建⽴⼀个每个学⽣的学号、姓名、选修的课名及成绩的视图S_C_GRADE; Create VIEW
S_C_GRADE AS
SELECT student.sno,sname,cname,score FROM student,course,student_course WHERE student.sno=student_course.sno AND courseo=student_courseo;
视图如下:
②建⽴⼀个所有计算机系学⽣的学号、选修课程号以及平均成绩的视图COMPUTE_AVG_GRADE; Create VIEW
COMPUTE_AVG_GRADE AS
SELECT student.sno,courseo,AVG(score) '平均成绩' FROM student,course,student_course WHERE
student.sno=student_course.sno
AND courseo=student_courseo AND student.dno='CS' GROUP BY student.sno,courseo;
视图如下:
2. 修改视图
(1) 使⽤企业管理器修改视图
在企业管理器中将视图COMPUTE_AVG_GRADE中改成建⽴在数学系的学⽣学号、选修课程号以及平均成绩的视图。(IS设为数学系)
(2) 使⽤SQL语句修改视图
① 在查询分析器中使⽤更改视图的命令将上⾯建⽴的视图“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. 学习灵活熟练的进⾏视图的操作,认识视图的作⽤ ⼆. 实验准备
1.熟悉SQL SERVER ⼯作环境。 2.能连接到EDUC数据库。
3.复习有关视图操作的SQL语⾔命令。 三. 实验要求
1. 在实验开始之前做好准备⼯作。
2. 实验之后提交实验报告,思考视图和基本表的区别 四. 实验内容 ⼀. 定义视图
在EDUC数据库中,已Student Course 和Student_course 表为基础完成⼀下视图定义 1. 定义计算机系学⽣基本情况视图
V_Computer;
CREATE VIEW V_Computer AS SELECT student.* FROM student WHERE student.dno='CS';
视图如下:
2. 将Student Course 和Student_course表中学⽣的学号,姓名,课程号,课程名,成
绩定义为视图V_S_C_G CREATE VIEW V_S_C_G AS SELECT student.sno,sname,courseo,courseame,score FROM student,course,student_course WHERE student.sno=student_course.sno courseo=student_courseo;
AND
视图如下:
3. 将各系学⽣⼈数,平均年龄定义为视图V_NUM_AVG CREATE VIEW V_NUM_AVG AS SELECT COUNT(dno) '各系⼈
数',AVG(sage) '平均年龄' FROM student GROUP BY dno;
视图如下:
4. 定义⼀个反映学⽣出⽣年份的视图V_YEAR CREATE VIEW V_YEAR AS SELECT sname,2014-sage '出⽣年份' FROM student;
视图如下:
5. 将各位学⽣选修课程的门数及平均成绩定义为视图V_AVG_S_G
CREATE VIEW V_AVG_S_G AS SELECT student.sno '学号',sname '姓名',COUNT(*) '选修门数',AVG(score) '平均成绩' FROM student,student_course WHERE student.sno=student_course.sno GROUP BY student.sno,sname;
视图如下:
6. 将各门课程的选修⼈数及平均成绩定义为视图V_AVG_C_G CREATE VIEW V_AVG_C_G AS SELECT cno '课程号',COUNT(cno) '选修⼈数',AVG(score) '平均成绩' FROM student_course GROUP BY cno;
视图如下:
⼆. 使⽤视图
1. 查询以上所建的视图结果。
所建视图结果如上题截图所⽰
2. 查询平均成绩为90分以上的学⽣学号、姓名和成绩;
SELECT 学号,姓名,平均成绩 FROM V_AVG_S_G WHERE 平均成绩>90;
3. 查询各课成绩均⼤于平均成绩的学⽣学号、姓名、课程和成绩;
SELECT V_S_C_G.sno,V_S_C_G.sname,V_S_C_Game,V_S_C_G.score FROM V_S_C_G,V_AVG_S_G WHERE
V_S_C_G.sno=V_AVG_S_G.学号 AND V_S_C_G.score>V_AVG_S_G.平均成绩;
4. 按系统计各系平均成绩在80分以上的⼈数,结果按降序排列;
1.先创建学⽣学号-系别视图V_STUDENT CREATE VIEW V_STUDENT AS SELECT sno,dno FROM student; 2.进⾏查询
SELECT V_STUDENT.dno '系别',COUNT(V_STUDENT.sno) '⼈数' FROM V_STUDENT,V_AVG_S_G WHERE
V_STUDENT.sno=V_AVG_S_G.学号 AND V_AVG_S_G.平均成绩>80 GROUP BY V_STUDENT.dno;
三. 修改视图 并查询结果; UPDATE V_IS SET sname='S1_MMM' WHERE SNO='32011'; UPDATE V_IS SET sname='S4_MMM' WHERE SNO='32014'; SELECT * FROM V_IS WHERE sno='32011' OR sno='32014'; 1. 通过视图V_IS,分别将学号
为“S1”和“S4”的学⽣姓名更改为“S1_MMM”,”S4_MMM”
2. 通过视图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' WHERE 平均成绩='90';
实验⼗⼆ 更新语句
⼀. 实验⽬的
1. 熟悉使⽤UPDATE/INSERT/DELETE语句进⾏表操作; 2. 能将这些更新操作应⽤于实际操作中去; ⼆. 三. 实验准备 实验要求1.了解这些更新语句的基本语法和⽤法; 1. 完成下⾯的实验内容,并提交实验报告; 2. 在实验报告中附上相应的代码; 四. 实验内容
1. 对于student表,将所有专业号为‘001’的,并且⼊学年份为2006的学⽣,或是专业号为‘003’,并且年龄⼩于20岁的学⽣的班级号改为‘001’。
UPDATE student SET classno='001'
WHERE (mno='001'AND YEAR(sctime)='2006')OR(mno='003'AND (year(getdate())-year(sdate))<20);
2. 对于student表,删掉所有年龄⼩于20岁,并且专业号为‘003’的学⽣的记录。
DELETE FROM student WHERE mno='003'AND (year(getdate())-year(sdate))<20
3. 对于student表,插⼊⼀条新记录,它的具体信息为,学号:20071100
11、姓名:张
三、性别:男、出⽣⽇期:1988080
8、院系编号:‘001’、专业编号: ‘001’、班级号:‘001’、⼊学时间:20070901。 INSERT INTO
student(sno,sname,sex,sdate,dno,mno,classno,sctime) VALUES('2007110011','张三','男','1988-8-8','001','001','001','2007-9-1');
4. 对于student表,将⼊学时间最晚的学⽣和年龄最⼩的学⽣的联系⽅式去掉。
UPDATE student SET tel=null
WHERE sctime>=ALL(select sctime FROM student) OR year(sdate)>=ALL(select year(sdate) from student)
5. 对于student表,将平均年龄最⼩的⼀个院系的院系编号改为‘008’。
UPDATE student SET dno='008' where dno 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年为闰年,否则显⽰1900年不是闰年.
DECLARE @year INT SELECT @year=2014 if @year%4=0 and @year%100<>0 print CONVERT(CHAR(4),@year)+'是闰年' else print CONVERT(CHAR(4),@year)+'不是闰年'
2、循环结构 (1)下⾯是计算1~100和的循环结构,执⾏之,体会循环结构程序,注意语句块标志BEGIN ... END
DECLARE @SUM INT,@I INT SELECT @I=1,@SUM=0 WHILE @I<=100 BEGIN SELECT @SUM=@SUM+@I SELECT @I=@I+1 END PRINT '1...100的和为:'+CONVERT(CHAR(4),@SUM)
(3) 编写⼀个程序⽤于计算10的阶乘mysql中delete语句
DECLARE @SUM INT,@I INT SELECT @I=1,@SUM=1 WHILE @I<=10 BEGIN SELECT @SUM=@SUM*@I SELECT @I=@I+1 END PRINT '阶乘!的结果为:'+CONVERT(CHAR(10),@SUM)
(4) ⾃⼰编制⼀个程序,要求其能打印出100内的素数(只能被其⾃⾝和1整除的数).--循环结构+条件结
SELECT main.number FROM master..spt_values AS main WHERE type='P'
AND number BETWEEN 3 AND 100 AND NOT EXISTS ( SELECT 1 FROM master..spt_values AS sub WHERE
type='P'
AND sub.number BETWEEN 2 AND main.number - 1 AND main.number % sub.number = 0)
3、CASE结构
(1)下⾯SQL查询图书的信息,并根据图书定价判断是否适合作为教材
select 书名, 出版社, 作者, case
when 定价>50 then '定价太⾼,不适合作教材'
else '定价' + CAST(定价 as varchar(5)) + ',可以作教材'
end 可否作为教材 from 图书
(2) 请⾃⼰编程实现各位同学的成绩以等级分显⽰即:90分及以上为优,80分及以上到90以下为良,70分及以上到80分以下为中,60分及以上到70分以下为及格,其余为不及格. SELECT student.sno ,sname ,cname, CASE WHEN student_course.score >=90 THEN '优' when student_course.score>=80 and student_course.score <=90 THEN '良'
when student_course.score>=70 and student_course.score <=80 THEN '中'
when student_course.score>=60 and student_course.score<=70 THEN '及格'
else '不及格' END GRADE FROM student_course,course,student WHERE student_courseo=courseo AND
student_course.sno=student.sno
4、函数使⽤
下⾯查询,显⽰当前⽇期,显⽰格式为:"今天是XXXX年XX⽉XX⽇,星期X",执⾏之,体会系统函数的⽤法.
SELECT '今天是'+DATENAME(YEAR,GETDATE())+'年' +DATENAME(MONTH,GETDATE())+'⽉'
+DATENAME(DAY,GETDATE())+'⽇,' +DATENAME(WEEKDAY,GETDATE())
实验四使⽤SQL语句修改SQL Server数据库
1、实验⽬的:
(1) 了解SQL Server数据库的逻辑结构和物理结构;
(2) 掌握使⽤SQL语句修改数据库的⽅法;
2、实验准备:
(1)要明确能够修改数据库的⽤户必须是系统管理员,或者是被授权使⽤CREATE DATABASE语句的⽤户;
(2)修改数据库必须要明确:除存储位置,即物理⽂件名不能修改外,其它项均可以修改,包括数据库名、数据库⼤⼩和增长量等数据;
(3)了解使⽤SQL语句修改数据库的⽅法。
3、实验内容:
(1)删除实验三中创建的数据库;
(2)⽤⾃⼰名字创建⼀个数据库,包含⼀个主数据⽂件data1和⼀个⽇志⽂件log1,最⼤值都是5M;增长量分别为10%和1M;存储在⾃⼰的⽂件夹下;
(3)添加⼀个数据⽂件data2,最⼤值为3M;
(4)添加⼀个⽇志⽂件log2,最⼤值为4M;
(5)添加⼀个⽂件组group1;
(6)添加⼀个次数据⽂件data3放在⽂件组group1中;
(7)修改数据⽂件data2,将最⼤值改为5M;
(8)删除⽇志⽂件log1;
(9)删除次数据⽂件data
3、data2;
(10)修改⽂件组,将group1改名为group2;
(11)删除⽂件组group2;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。