第一篇:数据库-第四次实验报告-视图-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 course.cno=student_course.cno;
视图如下:
②建立一个所有计算机系学生的学号、选修课程号以及平均成绩的视图COMPUTE_AVG_GRADE;Create VIEW COMPUTE_AVG_GRADE AS
SELECT student.sno,course.cno,AVG(score)'平均成绩' FROM student,course,student_course WHERE student.sno=student_course.sno
AND course.cno=student_course.cno AND student.dno='CS' GROUP BY student.sno,course.cno;
视图如下:
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,course.cno,course.cname,score FROM student,course,student_course WHERE student.sno=student_course.sno course.cno=student_course.cno;
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_G.cname,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表,插入一条新记录,它的具体信息为,学号:2007110011、姓名:张
三、性别:男、出生日期:19880808、院系编号:‘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的阶乘
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_course.cno=course.cno AND student_course.sno=student.sno
4、函数使用
下面查询,显示当前日期,显示格式为:“今天是XXXX年XX月XX日,星期X”,执行之,体会系统函数的用法.SELECT '今天是'+DATENAME(YEAR,GETDATE())+'年' +DATENAME(MONTH,GETDATE())+'月' +DATENAME(DAY,GETDATE())+'日,' +DATENAME(WEEKDAY,GETDATE())
第二篇:实验三,,数据库中数据查询及视图操作实验报告
长春大学计算机学院 科学与技术 专业
数据库原理
实验报告
实验名称:
实验 三
数据库中的数据查询及视图操作(1)班 班
级:
姓 姓
名:
学 学
号:
实验地点:
日 日
期:
一、实验目的:
1.继续熟练 SQL SERVER 2005/2008 系统或 KingBase ES V7.0 的使用; 2.掌握 SELECT 语句的使用。
3.掌握单表查询,多表查询以及嵌套查询。
二、实验内容、要求和环境:
【 实验要求】
注:将完成的实验报告重命名为:班级+学号+姓名+(实验三),(如:041540538张三(实验三)),提交到SPOC学堂。
1.实验课要携带教材、学习辅导、老师下发的实验报告文档等。
2.课前要对实验内容和步骤部分进行预习。
【实验环境】
1.SQL SERVER 2005/2008; 2.KingBase ES V7.0,人大金仓。
【实验内容和步骤】
针对实验一建立的数据库的表,用 select 语句完成如下查询操作,写出 select 语句,并给出操作结果。
1.针对 SPJ 数据库中的四个表,实现如下查询:
(1)求供应工程 J1 零件的供应商号码 SNO;(2)求供应工程 J1 零件 P1 的供应商号码 SNO;(3)求供应工程 J1 零件的供应商名 SNAME;(4)求供应工程 J1 零件 P1 的供应商名 SNAME;(5)求供应工程 J1 零件为红色的供应商号码 SNO;(6)求没有使用天津供应商生产的红色零件的工程号 JNO;(7)求至少用了供应商 S1 所供应的全部零件的工程号 JNO;(8)找出使用上海产的零件的工程名称; 2.针对学生-课程数据库中的三个表,用嵌套方法查询实现如下查询:
(1)查询选修了数据库的学生姓名。
(2)查询比计算机系 CS 所有学生年龄都大的学生信息。
(3)列出“李勇”选修的所有课程的课名和成绩。
(4)查询数据库的先行课的课程名。
3.针对实验一建立的 SPXS 数据库中的三个表,实现如下查询:
精选文档
(1)查询与商品“电视”颜色相同的商品名;(2)查询不销售商品 P2 的商店名;(3)查询至少销售商品 P1、P2 两种商品的商店名;(4)所有商店都销售的商品号。
(5)只销售一种商品P4的商店名。
三、实验结果与分析:
写出操作语句,粘贴查询结果(粘贴结果要求粘贴 SQL Server Managemet Studio 整个窗口):
1.(1)
(2)
精选文档
(3)
精选文档
(4)
精选文档
(5)
精选文档
(6)
精选文档
(7)
精选文档
精选文档
(8)
精选文档
2.(1)
精选文档
(2)
精选文档
(3)
精选文档
(4)
精选文档
3.(1)
精选文档
(2)
精选文档
(3)
精选文档
(4)
精选文档
(5)
精选文档
四、思考题:
1.在操作中遇到什么问题?如何解决的?
第三题第二问不知道如何将在全部的 sno 中剔除当 pno=’p2’是的 sno.语句不知道怎样写出。
五、教师评语:
实验成绩:
:
教师:
(签名))
****年**月**日 日
创新活动
精选文档
第三篇:数据库SQL 视图的创建及使用实验报告
《数据库基础》实验报告
班级__计算机111__学号__xxxxxxxx__姓名__xxx___完成日期____6.20___
实验室 __理工楼310_ 指导老师xxx成绩____100______
实验
四、视图的创建及使用
(一)实验目的(1)加深对视图的理解。
(2)掌握使用管理工具创建和使用视图的方法。
(3)掌握使用SQL创建和使用视图的方法。
(二)实验内容
(1)使用“图书借阅”数据库,在管理工具中创建视图“借阅_计算机图书”,包含借阅类别为“计算机”的图书的信息:(读者编号,姓名,书号,书名,借阅日期)。
(2)直接使用SQL定义(1)中要求的视图并对其进行查询。
(3)在管理工具中建立各类视图(如单表视图、多表视图、分组视图、基于视图的视图等)。
(4)尝试使用insert、update、delete更新视图。
(三)实验具体步骤
(1)使用“图书借阅”数据库,在管理工具中创建视图“借阅_计算机图书”,包含借阅类别为“计算机”的图书的信息(读者编号,姓名,书号,书名,借阅日期)。create view 借阅_计算机图书(Duno,Duname,Shuno,Shuname,JYtime)
as
select Duzhe.Duno,Duname,Tushu.Shuno,Shuname, JYtime from Tushu,Duzhe,Jieyue where Duzhe.Duno=Jieyue.Duno and Tushu.Shuno,=Jieyue.Shuno and Liebie='计算机'
(2)直接使用SQL定义(1)中要求的视图并对其进行查询。
select * from 借阅_计算机图书
(3)在管理工具中建立各类视图
用管理工具建立:在管理工具中,打开图书借阅数据库,右击视图,新建视图,然后依照要求建立各种视图。
《数据库基础》实验报告
SQL语句:
create view 单表视图
as
select Shuname,Shuno,Zuozhe from Tushu
create view 多表视图
as
select Shuname,Shuno,Zuozhefrom Tushu,Jieyue
where Tushu.Shuno,=Jieyue.Shuno
create view 分组视图(Shuno,Duno)
as
select Shuno,Duno from Jieyue group by Shuno
create view 基于视图的视图
as
select Duno,Duname,Danwei from 单表视图 where Sex = '男'
(4)尝试使用insert、update、delete更新视图。
insert into 单表视图 values(002,'三星','绍兴文理','男',***)
update 单表视图 set sex='男' where Duname='华为'
delete from 单表视图 where Shuno=1002
(四)实验心得
通过这次实验,对视图有了更深的认识,从视图的创建,插入,修改,查询以及删除都有了详细的认识。视图能够简化用户的操作,好好的学习课程,为以后的课程打下好基础!在实验的过程中也遇到一些问题,但是经过自己的理解以及请教同学把实验完成。
第四篇:数据库实验报告
数据库实验报告
一、题目要求
某银行准备开发一个银行业务管理系统,通过调查,得到以下的主要需求:
银行有多个支行。各个支行位于某个城市,每个支行有唯一的名字。银行要监控每个支行的资产。银行的客户通过其身份证号来标识。银行存储每个客户的姓名及其居住的街道和城市。客户可以有帐户,并且可以贷款。客户可能和某个银行员工发生联系,该员工是此客户的贷款负责人或银行帐户负责人。银行员工也通过身份证号来标识。员工分为部门经理和普通员工,每个部门经理都负责领导其所在部门的员工,并且每个员工只允许在一个部门内工作。每个支行的管理机构存储每个员工的姓名、电话号码、家庭地址及其经理的身份证号。银行还需知道每个员工开始工作的日期,由此日期可以推知员工的雇佣期。银行提供两类帐户——储蓄帐户和支票帐户。帐户可以由2个或2个以上客户所共有,一个客户也可有两个或两个以上的帐户。每个帐户被赋以唯一的帐户号。银行记录每个帐户的余额、开户的支行以及每个帐户所有者访问该帐户的最近日期。另外,每个储蓄帐户有其利率,且每个支票帐户有其透支额。每笔贷款由某个分支机构发放,能被一个或多个客户所共有。每笔贷款用唯一的贷款号标识。银行需要知道每笔贷款所贷金额以及逐次支付的情况(银行将贷款分几次付给客户)。虽然贷款号不能唯一标识银行所有为贷款所付的款项,但可以唯一标识为某贷款所付的款项。对每次的付款需要记录日期和金额。
二、需求分析
这一部分主要是根据实验需求对银行系统需求中的实体、实体属性以及实体之间的关联进行确认,以便画出正确的概念模型。
2.1 实体确认
根据需求分析确认实体:银行员工、银行支行、客户、账户(其中:储蓄账户、支票账户是继承实体账户而来)、贷款、支付(弱实体)。
2.2 实体属性确认
银行员工:身份证号(pi)、姓名、电话号码、家庭地址、开始工作日期 银行支行:支行名、资产、城市
客户:身份证号、姓名、街道、所在城市 账户:账户号、余额、最近访问日期 支票账户:透支额 储蓄账户:利率 2.3 实体关系确认
账户和支行:N:1定义关系为Relationship_accout_bank 客户和贷款:M:N定义关系为Relationship_client_loan 客户和员工:M:1 定义关系为 Relation_client_staff 贷款和支行:1:N 定义关系为 Relationship_loan_bank 客户和账户:M:N 定义关系为 client__accout 贷款发放信息和贷款:N:1 定义关系为 Relationship_loan_pay 支行和员工:1:N 定义关系为Relationship_staff_bank
员工和员工:1:N 定义关系为 Relationship_lead
三、概念模型(CDM)
根据sybase power designer画出概念模型(CDM),如下图所示:
四、物理模型(PDM)
根据概念模型转化成物理模型(PDM),如下图所示:
第五篇:数据库实验报告
实验4SQL高级应用
【实验目的】
1、掌握在SQL SERVER 2005下进行数据还原的方法。
2、掌握SQL语句的查询统计功能和数据更改功能。
【实验内容】
1.还原factory数据库。
2.在factory数据库上,完成如下各题。
(1)删除factory数据库上各个表之间建立的关系。(2)*显示各职工的工资记录和相应的工资小计。
(3)*按性别和部门名的所有组合方式列出相应的平均工资。
(4)在worker表中使用以下语句插入一个职工记录。职工号:20;姓名:陈立;性别:女;出生日期:55/03/08;党员否: 1;参加工作:75/10/10;部门号:4。
在depart表中使用以下语句插入一个部门记录。部门号:5;部门名:设备处。对worker和depart表进行全外连接显示职工的职工号、姓名和部门名,然后删除这两个插入的记录。
(5)显示最高工资的职工的职工号、姓名、部门名、工资发放日期和工资。(6)显示最高工资的职工所在的部门名。
(7)显示所有平均工资低于全部职工平均工资的职工的职工号和姓名。(8)*采用游标方式实现(6)小题的功能。(9)*采用游标方式实现(7)小题的功能。
(10)*先显示worker表中的职工人数,开始一个事务,插入一个职工记录,再显示worker表中的职工人数,回滚该事务,最后显示worker表中的职工人数。
【实验报告要求】
1.第(1)写出操作步骤。
2.其他各题写出实现要求的命令/程序,并列出执行结果。
【操作步骤】
1.还原factory数据库。
2.在factory基础上,有
(1)删除factory数据库上各个表之间建立的关系。
(2)*显示各职工的工资记录和相应的工资小计。
Select 职工号,姓名,工资from salary Order by 职工号
Compute sum(工资)by 职工号
(3)*按性别和部门名的所有组合方式列出相应的平均工资。
select worker.职工号,worker.性别,depart.部门名,avg(工资)as'平均工资' from worker inner join depart on worker.部门号=depart.部门号 inner join salary on worker.职工号=salary.职工号
group by worker.职工号,worker.性别,depart.部门名
order by worker.职工号
(4)在worker表中使用以下语句插入一个职工记录。职工号:20;姓名:陈立;性别:女;出生日期:55/03/08;党员否: 1;参加工作:75/10/10;部门号:4。
insert into worker values('20','陈立','女','1955-03-08','1','1975-10-10',4)
在depart表中使用以下语句插入一个部门记录。部门号:5;部门名:设备处。
Insert into depart Values('5','设备处')对worker和depart表进行全外连接显示职工的职工号、姓名和部门名,然后删除这两个插入的记录。
use factory Select b.部门号,c.姓名
from salary a,departb,worker c delete from worker where 职工号=20 delete from depart where 部门号=5(5)显示最高工资的职工的职工号、姓名、部门名、工资发放日期和工资。
Use factory Select b.部门名,c.职工号,c.姓名,b.部门名,a.日期,a.工资 from salary a,departb,worker c Where 工资in(select max(a.工资)from salary a)and a.职工号=c.职工号and b.部门号=c.部门号(6)显示最高工资的职工所在的部门名。
Use factory Select b.部门名from salary a,departb,worker c Where 工资in(select max(a.工资)from salary a)and c.部门号=b.部门号and a.职工号=c.职工号
(7)显示所有平均工资低于全部职工平均工资的职工的职工号和姓名。
Use factory Select a.职工号,a.姓名,avg(b.工资)as平均工资from worker a,salary b where a.职工号=b.职工号 group by a.职工号,a.姓名
having avg(工资)<(select avg(工资)from salary)