实验5 T-SQL程序设计
- 格式:doc
- 大小:210.50 KB
- 文档页数:7
SQL实用教程(第四版)实验五T-SQL编程南昌大学实验报告学生姓名:廖美君学号: 8002213113 专业班级:实验类型:□ 验证□ 综合□ 设计□ 创新实验日期: 2021-5-9一、实验项目名称T-SQL编程二、实验目的与要求1、进一步巩固前面所学知识2、掌握用户自定义类型的使用3、掌握变量的分类及使用4、掌握各种运算符的使用5、掌握各种控制语句的使用6、掌握系统函数及用户自定义函数的使用三、实验基本原理1、了解T-SQL支持的各种基本数据类型2、了解自定义数据使用的一般步骤3、了解T-SQL各种运算符、控制语句的功能及使用方法4、了解系统函数的调用方法5、了解用户自定义函数使用的一般步骤四、主要仪器设备及耗材1计算机,MS SQL Server 2021,OFFICE五、实验步骤1、自定义数据类型的使用(1)定义一数据类型ID_type,用于描述员工编号 SQL语句: USE 廖美君EXEC sp_addtype 'ID_type', 'nchar(6)','not null' GO实验结果:图5-1定义一数据类型ID_type思考与练习:a)使用界面方式创建一个用户自定义类型2图5-2使用界面方式创建用户自定义类型过程(一)图5-3使用界面方式创建用户自定义类型过程(二)3图5-4使用界面方式创建用户自定义类型成功(2)在廖美君数据库中创建表Employees3要求:表结构与Employees类似,只是EmployeesID列使用的数据类型为用户自定义类型ID_type。
SQL语句: USE 廖美君 GOIF EXISTS(SELECT Name FROM sysobjects WHERE Name='EMPLOYEES3')DROP TABLE Employees3 CREATE TABLE Employees3 (EmployeeID ID_type,Name nchar(10) NOT NULL, Education nchar(4) NOT NULL, Birthday datetime NOT NULL,Sex bit NOT NULL DEFAULT 1, Workyear tinyint NULL, Address nvarchar(40) NULL,4PhoneNumber nchar(12) NULL, DepartmentIDnchar(3) NOT NULL, PRIMARY KEY (EmployeeID) ) GO实验结果:图5-5创建表Employees32、变量的使用(1)创建一个用户变量要求:对于实验2给出的数据库表结构,创建一个名为Female的用户变量,并在SELECT语句中使用该局部变量查找表中所有女性的编号、姓名。
XX大学XX学院图1图22、用户存储过程的编辑修改首先创建存储过程select_students, 在此基础上,将该过程更改为检索计算机专业的学生信息,用修改过程命令重新定义该存储过程。
2.1 输入以下代码:alter procedure select_students with encryptionasselect*from Student whereSdept='CS'order by Sno2.2 通过EXEC语句执行存储过程输入语句:EXEC select_students输出结果如下:3、用户存储过程的删除3.1 通过DROP语句删除存储过程输入语句:DROP procedure select_students输出结果如下:二、编写触发器1、在SQL中展开Student_and_Course数据库,在其中选择对应的表,将表展开,在展开的选项中右击“触发器”,在弹出的快捷菜单中选择“新建触发器”命令,在如图3所示的触发器编辑区中给出对应的触发器代码。
2、创建一个名为TR_AGEde1的触发器,要求在插入和更新时检查Student表中Sage是否在15至60之中,如果不在提示“年龄不合法”。
输入语句:CREATE TRIGGER TR_AGEON StudentFOR INSERT,UPDATEASDECLARE@age INTSELECT@age=SageFROM StudentIF@age NOT BETWEEN 15 AND 60BEGINROLLBACK TRANSACTIONRAISERROR ('年龄不合法',16,10)END图33、执行以下更新数据库的SQL代码,将在显示框内显示有关的信息,表示触发了数据表Student中的触发器TR_AGE.输入语句:UPDATE StudentSET Sage=26WHERE Sname='李勇'执行结果如图5:图54、同样,执行以下命令也会触发触发器TR_AGE.输入语句:INSERT INTO Student VALUES('200215128','张博','男',17,'CS') 完成3、4两步的输出结果如图6:图65、查看所创建触发器的详细信息,输入以下代码:USE student_and_courseEXEC sp_helptrigger StudentEXEC sp_helptext TR_AGE执行结果如图7:图7。
数据库实验报告5多表查询篇一:数据库实验5实验报告《数据库原理与设计》实验报告报告创建时间:篇二:数据库实验5实验报告淮海工学院计算机工程学院实验报告书课程名:《数据库原理及应用》题目:数据库的完整性班级:软件132 学号:姓名:孙莹莹一.目的与要求1. 掌握索引创建和删除的方法;2. 掌握创建视图和使用视图的方法;3. 掌握完整性约束的定义方法,包括primary key、foreign key等。
二.实验内容1.2.3.4.5.6.7.8.9.10.11.12.13.基于前面建立的factory数据库,使用T-SQL语句在worker表的“部门号”列上创建一个非聚集索引,若该索引已经存在,则删除后重建。
在salary 表的“职工号”和“日期”列创建聚集索引,并且强制唯一性。
建立视图view1,查询所有职工的职工号、姓名、部门名和2004年2月工资,并按部门名顺序排列。
建立视图view2,查询所有职工的职工号、姓名和平均工资;建立视图view3,查询各部门名和该部门的所有职工平均工资;显示视图view3的定义;实施worker表的“性别”列默认值为“男”的约束;实施salary表的“工资”列值限定在0~9999的约束;实施depart表的“部门号”列值唯一的非聚集索引的约束;为worker表建立外键“部门号”,参考表depart的“部门号”列。
建立一个规则sex:@性别=’男’OR @性别=’女’,将其绑定到“性别”上;删除上面第7、8、9和10建立的约束;解除第11题所建立的绑定并删除规则sex。
三.实验步骤1USE factoryGO--判断是否存在depno索引;若存在,则删除之IF EXISTSDROP INDEXGO--创建depno索引CREATE INDEX depno ON workerGOEXEC sp_helpindex workerGO2USE factoryGO--判断是否存在no_date索引;若存在,则删除之IF EXISTSDROP INDEX _dateGO--创建no_date索引CREATE UNIQUE CLUSTERED INDEX no_date ON salaryGOEXEC sp_helpindex salaryGO3USE factoryGO--如果视图viewl存在,则删除IF EXISTSDROP VIEW view1GO--创建视图viewlCREATE VIEW view1AS SELECT TOP 15 worker.职工号,worker.姓名,depart.部门名,salary.工资AS ‘2004年月工资’FROM worker,depart,salaryWHERE worker.部门号=depart.部门号AND worker.职工号=salary.职工号AND YEAR=2004 AND MONTH=2ORDER BY worker.部门号GOSELECT * FROM view1GO4USE factoryGO--如果视图view2存在,则删除IF EXISTSDROP VIEW view2GO--创建视图view2CREATE VIEW view2AS SELECT worker.职工号,worker.姓名,A VG AS ‘平均工资’FROM worker,salaryWHERE worker.职工号=salary.职工号GROUP BY worker.职工号,worker.姓名GOSELECT * FROM view2GO5USE factoryGO--如果视图view3存在,则删除IF EXISTSDROP VIEW view3GO--创建视图view3CREATE VIEW view3AS SELECT depart.部门名,A VG AS ‘平均工资’FROM worker,depart,salaryWHERE worker.部门号=depart.部门号AND worker.职工号=salary.职工号GROUP BY depart.部门名GOSELECT * FROM view3GO6USE factoryGOEXEC sp_helptext ‘view3’GO7USE factoryGOALTER TABLE workerADD CONSTRAINT default_sex DEFAULT ‘男’ FOR 性别GO8USE factoryGOALTER TABLE salaryADD CONSTRAINT check_salary CHECKGO9USE factoryGOALTER TABLE departADD CONSTRAINT unique_depart1 UNIQUE NONCLUSTEREDGOEXEC sp_helpindex depart --显示depart表上的索引GO10USE factoryGOALTER TABLE workerADD CONSTRAINT FK_worker_noFOREIGN KEYREFERENCES departGO11USE factoryGOCREATE RULE sex AS @性别=‘男’ OR @性别=‘女’GOEXEC sp_bindrule ‘sex’,’worker.性别’GO12USE factoryGOALTER TABLE workerDROP CONSTRAINT default_sexGO13USE factoryGOALTER TABLE salaryDROP CONSTRAINT check_salaryGO14USE factoryGOALTER TABLE departDROP CONSTRAINT unique_departGO15USE factoryGOALTER TABLE workerDROP CONSTRAINT FK_worker_noGO16USE factoryGOEXEC sp_unbindrule ‘worker.性别’GODROP RULE sexGO四.测试数据与实验结果第1题图篇三:数据库实验报告5---------------------------------精选公文范文-------------------------- 湖南科技学院电信学院实验报告----------------精选公文范文---------------- 11。
实验五 T-SQL编程实验报告姓名:张娜成绩:___________【实验目的】1、掌握批处理、脚本的概念。
2、掌握SQL Server中局部变量、全局变量和内置函数的概念和应用。
3、掌握SQL Server流程控制语句的使用。
4、掌握SQL Server三种用户自定义函数的创建和使用方法。
5、掌握游标的建立和使用。
6、掌握事务的建立和使用。
【实验内容】2、解释每一命令的语义,执行以上语句,系统报错,说明错误原因并改正。
use salesgo__将当前数据库设置为sales数据库declare @maxprice money/*定义money类型的变量@maxprice*/select @maxprice=max(price) from productswhere price is not null/*在products表中选出最大的价格数并赋值给变量@maxprice*/select [@maxprice]=@maxprice/*输出变量@maxprice*/print @@rowcount/*输出全局变量@@rowcount*/变量名出现错误,第二个go的位置不对3、(1)编写使用ROUND()函数的示例。
(2)编写使用SUBSTRING()函数的示例。
(3)编写使用DATEPART()函数的示例。
(4)编写显示当前登录帐户名的语句。
Declare @a int,@b char(5)Select a=round(2.235,1)Select a=round(2.235,2)Set @b=substring('abcdefghij',3,5)select 'b'=@bSelect '月数'=datepart(mm,'2009-5-24')select 'suser id'=suser_id(),'suser name'=suser_name(),'suser sid'=suser_sid(),'suser sname'=suser_sname(),'user id'=user_id(),'user'=user,'suser sid1'=suser_sid('login')select 'current user'=current_user4、修改CASE表达式后的T-SQL语句。
(二 〇 一 五 年 四 月《数据库原理及应用》实验报告学校代码: 10128 学 号: 201120905048题 目:T-S Q L 编程 学生姓名:孙跃 学 院:理学院 系 别:数学系专 业:信息与计算科学 班 级:信计12-2 任课教师:侯睿一、实验目的(1)进一步巩固第2章~第4章所学内容;(2)掌握用户自定义类型的使用;(3)掌握变量的分类及其使用;(4)掌握各种运算符的使用;(5)掌握各种控制语句的使用;(6)掌握系统函数及用户自定义函数的使用。
二、实验内容1.自定义数据类型的使用。
(1)对于实验2给出的数据库表结构,再自定义一数据类型ID_type,用于描述员工编号。
(2)在YGGL数据库中创建Employees3表,表结构与Employees类似,只是EmployeeID列使用的数据类型为用户自定义类型ID_type。
2.变量的使用。
(1)对于实验2给出的数据库表结构,创建一个名为female的用户变量,并在SELECT语句中使用该局部变量查找表中所有女员工的编号、姓名。
(2)定义一个变量,用于获取号码为102201的员工的电话号码。
3.运算符的使用。
(1)使用算数运算符“-”查询员工的实际收入。
(2)使用比较运算符“>”查询Employees表中工作时间大于5年的员工信息。
4.流程控制语句。
(1)判断Employees表中是否存在编号为11006的员工,如果存在则显示该员工信息,不存在则显示查无此人。
(2)假设变量X的初始值为0,每次加1,直至X变为5。
(3)使用CASE语句对Employees表按部门进行分类。
5.自定义函数的使用。
(1)定义一个函数实现如下功能:对于一个给定的DepartmentID值,查询该值在Departments表中是否存在,若存在则返回0,否则返回-1。
(2)写一段T-SQL程序调用上述函数。
6.系统内置函数的使用。
(1)求一个数的绝对值。
(2)求财务部雇员的总人数。
实验5使用T-SQL编写存储过程访问数据库实验五使用T-SQL编写存储过程访问数据库【目的与要求】熟悉使用存储过程来进行数据库应用程序的设计。
【实验设备与环境】在实验一中安装的SQL SERVER 2008及其T-SQL执行引擎。
【实验内容】对学生-课程数据库,编写存储过程,完成下面的功能:(1)统计某课程(如离散数学)的成绩分布情况,即按照各分数段统计人数;(2)统计任意一门课的平均成绩。
要求:提交源程序并表示必要的注释。
保证程序能正确编译和运行并截取程序执行结果图。
附:实验内容(1)参考程序create procedure p_satscore @cno char(4) --course number asbegindeclare @score1 intdeclare @score2 intdeclare @num intdeclare @cname varchar(10) --course nameset @cname=(select cname from course where cno=@cno) print '<'+@cname+'>'+'考试成绩按照分数段统计情况'set @score1='100'set @score2='90'while(@score1>=0)beginset @num=(select count(*) from sc where cno=@cno and grade between @score2 and @score1)print str(@score2)+'至'+str(@score1)+'分人数为'+str(@num) set @score1=@score2-1if @score1>=60set @score2=@score2-10elseset @score2=0endend。
实验5 T-SQL程序设计一、实验目的1.熟练掌握变量的定义和赋值。
2.掌握各种运算符。
3.掌握流程控制语句,尤其是条件语句和循环预语句。
二、实验环境硬件环境:PC机软件环境:操作系统为Microsoft Windows 2000或以上版本。
数据库管理系统为Microsoft SQL Server 2008企业版。
三、实验内容1.变量的定义与输出。
2. 条件结构的使用。
四、实验步骤1.创建一名为Student_name的局部变量,并在select语句中使用该变量查找“张强”同学所选课程的成绩情况,给出相应的语句段和运行结果。
2.将选修课程号为720的同学的成绩增加3分,同时使用全局变量@@rowcount检查获得更新的数据行数目。
4.利用学生_课程数据库中的SC表查找学生的成绩信息并判断是否有某学生的某门课程的成绩在90分以上的信息,若有,则显示学号、姓名、课程名和成绩,否则输出信息,说明“不存在成绩大于90分的学生!”。
5.从学生_课程数据库中查询所有学生选课成绩情况:姓名、课程名、成绩。
要求:将学生的百分制转换为5级评分制,成绩大于等于90显示为“优秀”,成绩在80-89分显示为“良好”,“70-79”分显示为“中等”,成绩在60-69显示为“及格”,60以下显示为“不及格”,没成绩的显示为“未考”。
并且输出记录按下列要求排序:先按学号升序,再按课程号升序,最后按成绩降序。
6.利用学生_课程数据库中的SC表,编程实现:如果所有学生所有课程的平均成绩高于80分,使用while循环就将每门成绩减5分,然后查找所有学生所有课程中的最高分,如果最高分大于或等于85分,while循环重新启动并再次将每门成绩减5分并继续查找所有学生所有课程中的最高分,一直循环到最高分低于85分循环停止,然后退出。
五、实验总结要求使用Transact-SQL写出实验步骤中要求完成的任务,上机调试并查看其结果,分析实验结果,总结实验中出现的问题及解决方法,书写实验体会等。
数据库原理与应用
实验报告
学院名称:计算机学院
实验名称: T-SQL程序设计
姓名:杜晓燕
学号: 201207010117
专业班级:计1201
指导教师:卫凡
实验5 T-SQL程序设计
一、实验目的
1.熟练掌握变量的定义和赋值。
2. 掌握各种运算符。
3. 掌握流程控制语句,尤其是条件语句和循环预语句。
二、实验环境
硬件环境:PC机
软件环境:操作系统为Microsoft Windows 2000或以上版本。
数据库管理系统为Microsoft SQL Server 2000标准版或企业版。
三、实验内容
1.变量的定义与输出。
2. 条件结构的使用。
四、实验步骤
1.创建一名为Student_name的局部变量,并在select语句中使用该变量查找“张强”同学所选课程的成绩情况,给出相应的语句段和运行结果。
2.将选修课程号为720的同学的成绩增加3分,同时使用全局变量@@rowcount 检查获得更新的数据行数目。
4.利用学生_课程数据库中的SC表查找学生的成绩信息并判断是否有某学生的
某门课程的成绩在90分以上的信息,若有,则显示学号、姓名、课程名和成绩,否则输出信息,说明“不存在成绩大于90分的学生!”。
5.从学生_课程数据库中查询所有学生选课成绩情况:姓名、课程名、成绩。
要求:将学生的百分制转换为5级评分制,成绩大于等于90显示为“优秀”,成绩在80-89分显示为“良好”,“70-79”分显示为“中等”,成绩在60-69显示为“及格”,60以下显示为“不及格”,没成绩的显示为“未考”。
并且输出记录按下列要求排序:先按学号升序,再按课程号升序,最后按成绩降序。
按学号升序排列:
按课程号升序排列:
按成绩降序排序:
6.利用学生_课程数据库中的SC表,编程实现:如果所有学生所有课程的平均成绩高于80分,使用while循环就将每门成绩减5分,然后查找所有学生所有课程中的最高分,如果最高分大于或等于85分,while循环重新启动并再次将每门成绩减5分并继续查找所有学生所有课程中的最高分,一直循环到最高分低于85分循环停止,然后退出。
五、实验总结要求
通过这次实验使我熟练使用Transact-SQL写出实验步骤中要求完成的任务,上机调试并查看其结果,分析实验结果,局部变量以@开头且用户定义的变量,全局变量以@@开头,是系统提供并赋值的变量,用户不能建立全局变量。
总结实验中出现的问题及解决方法,但也有一些地方需要改进,以后要加强练习。