数据库技术实验四
- 格式:doc
- 大小:104.00 KB
- 文档页数:7
课程名称 数据库技术 实验
成绩
实验名称 视图的使用及T-SQL编程
学号 姓名 班级 日期
实验目的:
1. 熟悉视图的概念和作用,掌握视图的创建方法;
2. 掌握如何查询和修改视图;
3. 掌握用户自定义数据类型的使用;
4. 掌握变量、运算符和各种控制语句的使用;
5. 掌握系统函数及用户自定义函数的使用;
实验平台:
利用RDBMS(SQL Server 2008)及其交互查询工具(查询分析器)来操作T-SQL语言;
实验内容:
1. 视图的使用
(1)创建YGGL数据库上的视图Employees_view,视图包含员工号码,姓名,所在部门名称和实际收入这几列。
create view Employees_view( 编号,姓名,部门名称,实际收入)
as
select Employees.编号,姓名,部门名称,收入-支出
from Employees ,Salary,Departments
where Employees.编号=Salary.编号 and Employees.部门号=Departments.部门号
(2)从视图Employees_view中查询出姓王的员工的实际收入。
SELECT 实际收入,姓名
FROM Employees_view
WHERE 姓名 like '王% '
(3)视图Employees_view中可以插入和删除数据吗?其中实际收入字段可以修改吗,为什么? 不可以,因为视图是从基表中导出的逻辑表,它不象基表一样物理地存贮在数据库中,视图没有自己独立的数据实体。实际收入也是通过数据库中数据计算得出的。
(4)以上操作执行完成之后,用T-SQL语句删除视图 Employees_view。
drop view Employees_view
2. T-SQL编程
(1)使用图形方式和T-SQL语句分别创建用户自定义数据类型SEX_TYPE,用于描述性别。
CREATE TYPE SEX_TYPE
FROM nchar(10)not null
(2)使用图形方式和T-SQL语句分别修改YGGL数据库的Employees表的sex字段的数据类型为SEX_TYPE。
alter table Employees
alter column 性别 SEX_TYPE
(3)定义一个变量,用于描述YGGL数据库的Salary表中号员工的实际收入,然后查询该变量。
Declare @x int
set @x=(select 收入 -支出
from Salary
where 编号='')
select @x
(4)使用RAND()函数产生一个0~1的随机数;使用SQUARE函数获得一个数的平方;使用SQRT函数返回一个数的平方根。
declare @x int set @x=0
select rand()
DECLARE @num float
SET @num=8
SELECT SQUARE(@num)
DECLARE @num float
SET @num=64
SELECT SQrt(@num)
(5)求财务部收入最高的员工姓名。
SELECT 姓名
FROM Employees,Salary,Departments
WHERE 收入>=ALL
(SELECT 收入
FROM Employees,Salary,Departments
WHERE Employees.编号=Salary.编号 AND
Employees.部门号=Departments.部门号
AND 部门名称='财务部'
)
AND Employees.编号=Salary.编号 AND
Employees.部门号=Departments.部门号
AND 部门名称='财务部'
(6)查询姓名为3个字的员工的基本信息。
SELECT *
from Employees
WHERE LEN(Employees.姓名)=3
(7)显示Employees表中年龄大于40岁的员工的编号,姓名和所在部门信息。
SELECT Employees .编号 ,出生日期,姓名 ,Departments.部门名称 from Employees , Departments
WHERE (出生日期)<'1975-01-01'and Employees.部门号=Departments.部门号
(8)判断姓名为“王林”的员工实际收入是否高于3000元,如果是,则显示其收入,否则显示“收入不高于3000元”。
IF EXISTS ( select 收入 from Salary,Employees where (收入-支出)>3000 and 姓名=(select 姓名 where
Salary.编号=Employees.编号 and 姓名='王林' ) )
select 收入 from Salary,Employees where (收入-支出)>3000 and 姓名=(select 姓名 where Salary.编号=Employees.编号 and 姓名='王林' )
else
select '收入不高于3000'
(9)使用循环输出一个用“*”组成的三角形。
declare @x int, @y int
set @x=0
while @x<5
begin
set @x=@x+1
if(@x=1)
print '*'
if(@x=2)
print '***'
if(@x=3)
print '*****'
if (@x=4)
print '*******'
end
go
(10)使用IF语句对Employees表按部门进行分类。
CREATE FUNCTION CHECK_Io(@departmentid char(3))
RETURNS CHAR(10)
AS
BEGIN DECLARE @num CHAR(10)
IF (SELECT 部门号 FROM Departments WHERE
@departmentid=部门号)='1'
SELECT @num='财务部'
IF (SELECT 部门号 FROM Departments WHERE
@departmentid=部门号)='2'
SELECT @num='人力资源部'
IF (SELECT 部门号 FROM Departments WHERE
@departmentid=部门号)='3'
SELECT @num='经理部'
IF (SELECT 部门号 FROM Departments WHERE
@departmentid=部门号)='4'
SELECT @num='研发部'
IF (SELECT 部门号 FROM Departments WHERE
@departmentid=部门号)='5'
SELECT @num='市场部'
RETURN @num
END
GO
SELECT 部门号,姓名,地址,dbo.CHECK_Io(部门号)AS
部门号
FROM Employees
(11)使用循环语句,求出一个数的阶乘。
declare @x int ,@y int
set @x=1
set @y=1
while (@y)<=5
begin
set @x=@x*@y
set @y=@y+1
end
select @x as 阶乘结果
(12)自定义一个函数,计算一个数的阶乘,并调用该函数。
use 好
go
create function jiechen (@number int )returns int
as
begin
declare @x int ,@y int
set @x=1
set @y=1
while (@y)<=@number
begin
set @x=@x*@y
set @y=@y+1
end
return @x
end
go
use 好
go
DECLARE @number int
SELECT @number=5
select @number=dbo.jiecheng(@number)
select @number as '阶乘结果'
(13)自定义一个函数,实现显示财务部实际收入大于某个数的员工的基本情况,并调用该函数。
use 好
go
create function h (@number int )
returns table
as
return
(
select Employees.*,Salary .收入,Salary .支出
from Salary , Employees,Departments
where (收入-支出)>@number and 部门名称='财务部'and Salary .编号=Employees.编号