数据库实验报告.docx

上传人:b****5 文档编号:7373149 上传时间:2023-01-23 格式:DOCX 页数:35 大小:937.73KB
下载 相关 举报
数据库实验报告.docx_第1页
第1页 / 共35页
数据库实验报告.docx_第2页
第2页 / 共35页
数据库实验报告.docx_第3页
第3页 / 共35页
数据库实验报告.docx_第4页
第4页 / 共35页
数据库实验报告.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

数据库实验报告.docx

《数据库实验报告.docx》由会员分享,可在线阅读,更多相关《数据库实验报告.docx(35页珍藏版)》请在冰豆网上搜索。

数据库实验报告.docx

数据库实验报告

 

数据库实验

报告

 

 

※实验一Access数据库的建立

一、实验目的

1.熟悉Access数据库软件的操作方法与功能;

2.掌握Access数据库表的创建与使用、数据库表结构的修改、数据表记录的输入、删除与修改等方法;

3.加深对关系的定义、性质以及关系键的理解。

二、实验设备

装有Office系统计算机1人/台

三、实验步骤与内容

将Excel数据表格中的教师信息、教师体格检查表与学生信息表、A班学生信息表建立成Access数据表,并设置关键字和给出数据完整性约束。

根据要求所建表并导入数据后如下:

※实验二数据库与表的操作

一、实验目的

1.熟悉SQLSERVER2005或以上版本的安装,以及基本操作;

2.熟练掌握数据库的创建方法,以及相关参数的设置;

3.掌握数据表的创建、编辑、删除操作;

4.掌握数据表数据的操作;

5.数据导入导出。

实验设备

装有SQLSERVER2005或以上版本的计算机1人/台

三、实验步骤与内容

1.使用ManagementStudio界面创建数据库Cadastre或使用SQL语句创建数据库Cadastre:

用界面创建:

用SQL语句创建:

CREATEDATABASE[Cadastre]ONPRIMARY

(NAME=N'Cadastre',FILENAME=N'C:

\Users\user\课件\数据库\实验\Cadastre.mdf',SIZE=3072KB,MAXSIZE=UNLIMITED,FILEGROWTH=1024KB)

LOGON

(NAME=N'Cadastre_log',FILENAME=N'C:

\Users\user\课件\数据库\实验\Cadastre_log.ldf',SIZE=1024KB,MAXSIZE=2048GB,FILEGROWTH=10%)

2.利用ManagementStudio界面创建数据表

找到新建的数据库Cadastre-表-右键-新建表

例:

3.利用SQL创建数据表

例:

CREATETABLE[dbo].[宗地表]

[宗地号][nchar](10)NOTNULL,

[权属人][nchar](10)NULL,

[地点][nchar](10)NULL,

[所属街坊号][nchar](10)NOTNULL,

[宗地图号][nchar](10)NULL,

[面积][nchar](10)NULL

4.使用ManagementStudio界面和SQL语句录入数据,结果如下:

5.使用SQL脚本录入数据

INSERTINTO测量单位

(单位编号,单位名称,负责人,联系电话)

Values

('430001','测绘一公司','孙敬','12345678'),('430002','测绘二公司','吴天','87654321')

INSERTINTO测量员

(工号,姓名,职称)

Values

('430001','刘力','工程师'),('430002','赵测','高级工程师')

6.请给测量员表添加一个字段“所属单位编号”,并补录单位编号

※实验三SQL查询

一、实验目的

1.掌握select语句的基本语法;

2.掌握简单查询语句的使用方法;

3.掌握简单连接查询的使用方法;

4.掌握常用函数的使用方法。

二、实验设备

装有SQLSERVER2005或以上版本的计算机1人/台,实验2创建的数据表及录入的数据记录

三、实验步骤与内容

1.查询显示宗地表数据

SELECT*

FROM[宗地表]

2.按点号降序显示所有界址点

SELECT*

FROM[界址点表]ORDERBY[点号]DESC

3.查询宗地号为1002所有的界址点,并按点号升序显示

SELECT*

FROM[Cadastre].[dbo].[宗地-界点表]

WHERE[宗地号]=10002

ORDERBY[界址点号]ASC

4.分组统计每个宗地的界址点数

SELECT[宗地号],COUNT(界址点号)AS界址点数

FROM[Cadastre].[dbo].[宗地-界点表]

GROUPBY[宗地号]

5.查询界址点多于5个的宗地属性信息(宗地号,权属人,地点,所属街坊号,宗地图号,面积)

SELECT*

FROMCadastre.dbo.宗地表

WHERE宗地号IN

(SELECT宗地号

FROMCadastre.dbo.[宗地-界点表]

GROUPBY宗地号

HAVINGCOUNT(界址点号)>3

6.查询不属于任何宗地的界址

SELECT点号

FROMCadastre.dbo.界址点表

WHERE点号NOTIN(SELECT界址点号

FROMCadastre.dbo.[宗地-界点表])

7.统计每个街坊的宗地面积

SELECT权属人,所属街坊号,面积

FROMCadastre.dbo.街坊,Cadastre.dbo.宗地表

WHERE街坊.街坊号=宗地表.所属街坊号

8.查询高级工程师测量的宗地图

SELECT宗地图.*

FROMCadastre.dbo.宗地图,Cadastre.dbo.测量员

WHERE测量员.职称='高级工程师'AND

测量员.工号=宗地图.测量员工号

※实验四更新与视图

一、实验目的

1.掌握视图的定义与编辑;

2.掌握数据编辑的操作。

二、实验设备

装有SQLSERVER2005或以上版本的计算机1人/台、实验2创建的数据表及录入的数据记录

三、实验步骤与内容

1.使用SQL语句,向地籍数据库(实验2)中添加以下信息:

在左家垅街坊中新测量得一宗地(宗地号:

10003,权属人:

王得利,地点:

中南大学,宗地图号:

2003,面积:

240平方米),测图人为刘力,界址点分别为:

110009(43623,96467)、110010(43656,96456)、110011(43634,96437)、110012(43653,96487)。

INSERT

INTO[Cadastre].[dbo].[宗地表]([宗地号],[权属人],[地点],[宗地图号],[面积])

VALUES('10003','王得利','中南大学','2003','240')

INSERT

INTO[Cadastre].[dbo].[界址点表]([点号],[X],[Y])

VALUES('110009','43623','96467')

INSERT

INTO[Cadastre].[dbo].[界址点表]([点号],[X],[Y])

VALUES('110010','43656','96456')

INSERT

INTO[Cadastre].[dbo].[界址点表]([点号],[X],[Y])

VALUES('110011','43634','96437')

INSERT

INTO[Cadastre].[dbo].[界址点表]([点号],[X],[Y])

VALUES('110012','43653','96487')

2.由于工作需要,现要将所有宗地图向北平移100米、向东平移100米,请使用SQL语句完成平移操作

UPDATE[Cadastre].[dbo].[界址点表]

SETX=X+100,Y=Y+100

3.请将左家垅街坊里的所有宗地号中的第1位“1”改“4”

UPDATE[Cadastre].[dbo].[宗地表]

SET宗地号='4'+SUBSTRING(宗地号,2,LEN(宗地号-1))

WHERE所属街坊号IN

SELECT街坊号

FROM[Cadastre].[dbo].[街坊]

WHERE名称='左家垅'

4.请将左家垅街坊里的所有宗地界址点号中的第1位“1”改“4”

UPDATE[Cadastre].[dbo].[宗地-界点表]

SET界址点号='4'+SUBSTRING(界址点号,2,LEN(界址点号)-1)

WHERE宗地号IN(

SELECT宗地号

FROM[Cadastre].[dbo].[宗地表]

WHERE所属街坊号IN

(SELECT街坊号

FROM[Cadastre].[dbo].[街坊]

WHERE名称='左家垅'))

5.利用SQL语句,建立V_Block和界址点的关联视图V_BPoints,显示V_Block中的所有字段和界址点中所有字段

CREATEVIEWV_BPoints

AS

SELECT*

FROMV_Block,[Cadastre].[dbo].界址点表

6.使用SQL语句,利用V_BPoints视图,将左家垅街坊中的界址点编号中的第1位“4”改为“1”

UPDATE[Cadastre].[dbo].V_BPoints

SET点号='4'+SUBSTRING(点号,2,LEN(点号-1))

7.利用SQL语句,创建视图V_Envelope,显示测量图范围,即显示工作区坐标的极大和极小值

CREATEVIEWV_Envelope

AS

SELECTMAX(X)ASX坐标最大值,MAX(Y)ASY坐标最大值,MIN(X)ASX坐标最小值,MIN(Y)ASY坐标最小值

FROM[Cadastre].[dbo].界址点表

 

※实验五T-SQL程序、函数、存储过程与触发器

一、实验目的

1.掌握T-SQL程序编写的基本方法;

2.掌握SQLSERVER中自定义函数、存储过程、触发器的使用。

二、实验设备

装有SQLSERVER2005或以上版本的计算机1人/台、实验2创建的数据表及录入的数据记录

3、实验步骤与内容

1.在数据库中创建函数Distance(@x1float,@y1float,@x2float,@y2float)用于计算输入两点(@x1,@y1)和(@x2,@y2)的距离(标量UDF)

函数:

CREATEFUNCTIONDistance

(@X1float,@Y1FLOAT,@X2FLOAT,@Y2FLOAT)

RETURNSFLOAT

AS

BEGIN

DECLARE@distancefloat

SELECT@distance=SQRT((@X1-@X2)*(@X1-@X2)+(@Y1-@Y2)*(@Y1-@Y2))

RETURN@distance

END

调用

selectdbo.Distance(3,4,5,6)

结果

2.编写T-SQL程序,检查界点表是否存在距离工作区中心点大于1000m的点,如果有,则显示界址点及其距中心点的距离

DECLARE@xMinfloat,@yMinfloat,@xMaxfloat,@yMaxfloat

SELECT@xMin=MIN(X),@yMin=MIN(Y),

@xMax=MAX(X),@yMax=MAX(Y)

FROMdbo.界址点

DECLARE@xCenterfloat,@yCenterfloat

SET@xCenter=(@xMin+@xMax)/2

SET@yCenter=(@yMin+@yMax)/2

IFEXISTS(SELECT*FROMdbo.界址点

WHEREdbo.Distance(X,Y,@xCenter,@yCenter)>1000)

BEGIN

SELECTNumber,X,Y,dbo.Distance(X,Y,@xCenter,@yCenter)FROMdbo.界址点

END

ELSE

PRINT'没有距中心点大于1000米的点'

3.创建存储过程sp_InsertZD,利用参数向宗地表插入一条记录,并判断宗地表中是否存在相同宗地号,若存在则返回错误;然后判断街坊号、宗地图号是否合法,若不合法则提示错误;判断完成后,实现数据插入操作。

测试存储过程sp_InsertZD

CREATEPROCsp_InsertZD

@ZNoint,@QNavarchar(10),@Placevarchar(32),@JNoint,@TNoint,@Areareal,@Resultvarchar(50)OUTPUT

AS

BEGIN

IFExists(SELECTZNoFROMdbo.宗地WHEREZNo=@ZNo)

SET@Result='已存在'+@ZNo

ELSE

IFExists(SELECT*FROMdbo.宗地WHEREJNo=@JNoANDTNo=@TNo)

SET@Result='街坊号或宗地图号不合法'

ELSE

BEGIN

INSERTINTOdbo.宗地(ZNo,QNa,Place,JNo,TNo,Area)

VALUES(@ZNo,@QNa,@Place,@JNo,@TNo,@Area)

set@Result='添加成功'

END

END

测试存储过程:

DECLARE@rvarchar(100)

execsp_InsertZD10003,'王得利','中南大学',1001,2003,240,@rOUTPUT

PRINT@r

4.创建存储过程sp_DeleteCLY,根据输入的测量员工号,判断数据库中是否存在该测量员测量的宗地图,若存在,则不允许删除,并给出提示,否则删除该测量员记录。

测试存储过程sp_DeleteCLY

CREATEPROCsp_DeleteCLY@GNoint,@Resultvarchar(50)OUTPUT

AS

BEGIN

IFExists(SELECTTNoFROMdbo.宗地图纸WHEREGNo=@GNo)

SET@Result='已存在,不允许删除'

ELSE

BEGIN

DELETEFROMdbo.测量员whereGNo=@GNo

SET@Result='删除成功'

END

END

测试过程:

DECLARE@rvarchar(100)

execsp_InsertCLY430001,@rOUTPUT

PRINT@r

5.修改sp_DeleteCLY存储过程,在其中添加条件:

若测量员为高级工程师,则不允许删除。

测试存储过程sp_DeleteCLY

ALTERPROC[dbo].[sp_DeleteCLY]@GNoint,@Resultvarchar(100)OUTPUT

AS

BEGIN

DECLARE@Clevelvarchar(10)

SELECT@Clevel=(SELECTClevelFROMdbo.测量员WHEREGNo=@GNo)

IFExists(SELECTTNoFROMdbo.宗地图纸WHERE@GNo=GNo)

SET@Result='已存在,不允许删除'

ELSE

IFEXISTS(SELECT*FROMdbo.测量员WHERE@Clevel='高级工程师')

SET@Result='高级工程师不允许删除'

ELSE

BEGIN

DELETEFROMdbo.测量员whereGNo=@GNo

SET@Result='删除成功'

END

END

测试:

declare@testvarchar(10)

execsp_DeleteCLY430002,@testOUTPUT

PRINT@test

6.为界址点创建触发器TG_InsertJZD,对当前插入的记录进行有效检查,若当前界址点距离工作区中心超过1000m,则不允许插入,否则完成插入,并给出相应提示。

CREATETRIGGERTG_InsertJZD

ONdbo.界址点

FORINSERT

AS

BEGIN

DECLARE@xMinfloat,@yMinfloat,@xMaxfloat,@yMaxfloat

SELECT@xMin=MIN(X),@yMin=MIN(Y),

@xMax=MAX(X),@yMax=MAX(Y)

FROMdbo.界址点

DECLARE@xCenterfloat,@yCenterfloat

SET@xCenter=(@xMin+@xMax)/2

SET@yCenter=(@yMin+@yMax)/2

DECLARE@Xfloat,@Yfloat,@Numbervarchar(10)

SELECT@X=X,@Y=YFROMINSERTED

IFdbo.Distance(@X,@Y,@xCenter,@yCenter)>1000

BEGIN

ROLLBACKTRANSACTION

PRINT'没有距中心点大于1000米的点'

END

ELSE

BEGIN

ROLLBACKTRANSACTION

INSERTINTOdbo.界址点(Number,X,Y)

VALUES(@Number,@X,@Y)

PRINT'插入成功'

END

END

7.修改TG_InsertJZD,在其中添加是否超出工作范围的判断,即利用实验四中创建的V_Envelope视图,从当前界址点中计算工作区范围(MBR),并判断当前插入点是否超出MBR,若超出则提示错误且不允许插入,否则完成插入,并给出提示

ALTERTRIGGERTG_InsertJZD

ONdbo.界址点

FORINSERT

AS

BEGIN

DECLARE@xMinfloat,@yMinfloat,@xMaxfloat,@yMaxfloat

SELECT@xMin=MIN(X),@yMin=MIN(Y),

@xMax=MAX(X),@yMax=MAX(Y)

FROMdbo.界址点

DECLARE@xCenterfloat,@yCenterfloat

SET@xCenter=(@xMin+@xMax)/2

SET@yCenter=(@yMin+@yMax)/2

DECLARE@Xfloat,@Yfloat,@Numbervarchar(10)

SELECT@X=X,@Y=YFROMINSERTED

IFdbo.Distance(@X,@Y,@xCenter,@yCenter)>1000

BEGIN

ROLLBACKTRANSACTION

PRINT'没有距中心点大于1000米的点'

END

ELSE

IFEXISTS(SELECT*FROMdbo.V_Envelopewhere(@XX2orYY2))

PRINT'超出MBR'

ELSE

BEGIN

ROLLBACKTRANSACTION

INSERTINTOdbo.界址点(Number,X,Y)

VALUES(@Number,@X,@Y)

PRINT'插入成功'

END

END

※实验六用SQLSERVER2008存储空间数据

一、实验目的

1.掌握SQLSERVER的空间数据类型及空间数据表的创建;

2.掌握SQLSERVER常用的空间数据操作方法/函数。

二、实验设备

装有SQLSERVER2005或以上版本的计算机1人/台、实验2创建的数据表及录入的数据记录

4、实验步骤与内容

1.为界址点、宗地数据表分别添加Geometry字段Geom;

ALTERTABLEdbo.宗地ADDGeomGeometry;

ALTERTABLEdbo.界址点ADDGeomGeometry;

2.使用T-SQL程序,根据界址点表中的X和Y值,创建几何点并存入Geom字段;

UPDATEdbo.界址点

SETGeom=geometry:

:

Point(X,Y,0);

3.使用T-SQL程序,根据宗地与界址点的关联关系,创建宗地的几何多边形,并存入宗地Geom字段;

首先,创建一个自定义函数,用来获得宗地—界址点表的界址点号

CREATEFUNCTIONgetZDJZD(@ZDHint)

RETURNSNVARCHAR(2000)

AS

BEGIN

DECLARE@pointsnvarchar(2000),@pointnvarchar(100),@startPointnvarchar(100)

set@Points=''

DECLAREmyCursorCURSORFOR

SELECTltrim(rtrim(str(x)))+''+ltrim(rtrim(str(y)))FROM

(selecta.x,a.yfromdbo.界址点a,dbo.界址点_宗地bwherea.Number=b.Numberandb.ZNo=@ZDH)ZZ

OPENmyCursor

FETCHFROMmyCursorINTO@point

WHILE@@fetch_status=0

BEGIN

IF@points=''

begin

set@Points=@point

set@startPoint=@point

end

ELSE

set@Points=@Points+','+@point

FETCHFROMmyCursorINTO@point

END

DEALLOCATEmyCursor

RETURN@points+','+@StartPoint

END

再用创建的自定义函数来创建宗地的几何多边形

UPDATEdbo.宗地

SETGeom=geometry:

:

Parse('POLYGON(('+dbo.getZDJZD(ZNo)+'))');

4.根据宗地Geom存储的多边形,计算宗地多边形面积,并修改宗地面积字段值;

DECLARE@pggeometry

SELECT@pg=GeomFROMdbo.宗地WHEREZNo=10001

SELECT@pg

SELECT@pg.STArea()

UPDATEdbo.宗地SETArea=@pg.STArea()

WHEREZNo=10001

5.若有一条自点(43530,96550)至点(43670,96590)的直线,计算该直线的半径为50m的缓冲区多边形,并查询与该缓冲区相交的宗地记录信息;

DECLARE@ggeometry

SELECT@g=geometry:

:

STGeomFromText('LINESTRING(4353096550,4367096590)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1