数据库实验报告.docx
- 文档编号:7373149
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:35
- 大小:937.73KB
数据库实验报告.docx
《数据库实验报告.docx》由会员分享,可在线阅读,更多相关《数据库实验报告.docx(35页珍藏版)》请在冰豆网上搜索。
数据库实验报告
数据库实验
报告
※实验一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(@X
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)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验 报告