1、 (二 一 五 年 四 月数据库原理及应用实验报告学校代码: 10128学 号: 201120905048题 目 : T-SQL 编 程学 生 姓 名 : 孙 跃学 院 : 理 学 院系 别 : 数 学 系专 业 : 信 息 与 计 算 科 学班 级 : 信 计 12-2任 课 教 师 : 侯 睿01、实验目的(1)进一步巩固第 2 章第 4 章所学内容;(2)掌握用户自定义类型的使用;(3)掌握变量的分类及其使用;(4)掌握各种运算符的使用;(5)掌握各种控制语句的使用;(6)掌握系统函数及用户自定义函数的使用。2、实验内容1.自定义数据类型的使用。(1)对于实验 2 给出的数据库表结构,再
2、自定义一数据类型 ID_type,用于描述员工编号。(2)在 YGGL 数据库中创建 Employees3 表,表结构与 Employees 类似,只是 EmployeeID 列使用的数据类型为用户自定义类型 ID_type。2.变量的使用。(1)对于实验 2 给出的数据库表结构,创建一个名为 female 的用户变量,并在 SELECT 语句中使用该局部变量查找表中所有女员工的编号、姓名。(2)定义一个变量,用于获取号码为 102201 的员工的电话号码。3.运算符的使用。(1)使用算数运算符“-”查询员工的实际收入。(2)使用比较运算符“”查询 Employees 表中工作时间大于 5 年
3、的员工信息。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)求财务部雇员的总人数。(3)使用
4、ASCII 函数返回字符表达式最左端字符的 ASCII 值。(4)获得当前的日期和时间。13、实验程序自定义数据类型的使用1.对于实验 2 给出的数据库表结构,再自定义一数据类型 ID_type,用于描述员工编号。USE YGGLEXEC sp_addtype ID_type,char(6),not nullGO2.在 YGGL 数据库中创建 Employees3 表,表结构与 Employees 类似,只是 EmployeeID 列使用的数据类型为用户自定义类型 ID_type。USE YGGLGOIF EXISTS(SELECT name FROM sysobjects WHERE nam
5、e=Employees3)DROP table employees3CREATE TABLE Employees3( EmployeeID ID_type,Name char(10)NOT NULL,Education char(4) NOT NULL,Birthday datetime NOT NULL,Sex bit NOT NULL DEFAULT 1,WorkYear tinyint NULL,Address varchar(40) NULL,PhoneNumber char(12)NULL,DepartmentID char(3)NOT NULL,PRIMARY KEY(Employ
6、eeID)GO变量的使用1.对于实验 2 给出的数据库表结构,创建一个名为 female 的用户变量,并在 SELECT 语句中使用该局部变量查找表中所有女员工的编号、姓名。USE YGGLDECLARE female bitSET female=0SELECT EmployeeID,NameFROM EmployeesWHERE Sex=Female2.定义一个变量,用于获取号码为 102201 的员工的电话号码。DECLARE phone char(12) SET phone=(SELECT PhoneNumberFROM EmployeesWHERE EmployeeID=102201)
7、 SELECT phone运算符的使用21.使用算数运算符“-”查询员工的实际收入。SELECT InCome-OutComeFROM Salary2.使用比较运算符“”查询 Employees 表中工作时间大于 5 年的员工信息。SELECT *FROM EmployeesWHERE WorkYear53.判断 Employees 表中是否存在编号为 11006 的员工,如果存在则显示该员工信息,不存在则显示“查无此人” 。IF EXISTS (SELECT Name FROM Employees WHERE EmployeeID=111006)SELECT * FROM Employees
8、 WHERE EmployeeID=111006ELSESELECT查无此人4.假设变量 X 的初始值为 0,每次加 1,直至 X 变为 5。DECLARE X INTSET X=1WHILE X”查询 Employees 表中工作时间大于 5 年的员工信息。67.判断 Employees 表中是否存在编号为 11006 的员工,如果存在则显示该员工信息,不存在则显示“查无此人” 。8.假设变量 X 的初始值为 0,每次加 1,直至 X 变为 5。9.使用 CASE 语句对 Employees 表按部门进行分类。710.定义一个函数实现如下功能:对于一个给定的 DepartmentID 值,查
9、询该值在 Departments 表中是否存在,若存在则返回 0,否则返回-1。11.写一段 T-SQL 程序调用上述函数。812.求一个数的绝对值。13.求财务部雇员的总人数。14.使用 ASCII 函数返回字符表达式最左端字符的 ASCII 值。15.获得当前的日期和时间。916.查询 YGGL 数据库中员工号为 000001 的员工出生的年份。5、实验总结通过本次实验,我对第 2 章第 4 章所学内容进一步巩固和加深,对课堂上没有理解的问题重新进行了学习,掌握了用户自定义类型、各种运算符、各种控制语句、系统函数及用户自定义函数的使用,也掌握变量的分类及其使用。由于编程量较大,也锻炼了我编程操作要细致谨慎,由于前一阶段的基础知识没有完全掌握,导致本次实验中遇到不少问题,因此在今后的学习中我要吸取经验,认真学习。