数据库技术实验四

  • 格式: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.编号