《数据库技术与开发》工程实训指导书
(2) 建立5张数据表
要求使用T-SQL语句建立5张数据表及相应的各种约束,要求遵循编程规范及添加注释。
注意:字段名不能使用T-SQL关键字,另外外键和主键数据类型要求一致。 参考代码如下所示: --创建客户信息表sys_user create table sys_user ( --客户编号,主键标识列 UserId int identity(1,1) primary key, --客户姓名,非空 UserName varchar(50) not null, --客户密码,至少个字符 UserPwd varchar(50), constraint ck_UserPwd check(len(UserPwd)>=6) ); (3) 添加外键约束
使用Alter Table语句为hos_house表建立外键关系。
2、实训二:添加测试数据
(1) 主表添加测试数据
用T-SQL语句向客户信息表、区县信息表各添加2条测试数据,街道信息表里每个区县添加1-2个街道,房屋类型表添加2条。
注意上述4个表的自动增长列字段的值。 4个主表的测试数据如下图所示:
图2.4个主表的测试数据
(2) 添加批量数据
? 要求使用事务和While循环,向出租房屋表hos_house增加30条记录(各个
字段的内容随机产生),如下图所示:
21
《数据库技术与开发》工程实训指导书
图3.房屋信息表记录
? 其中用户编号UserID随机取用户表里的UserID,其他的类似街道编号
StreetId、HTID也随机均取自主表的相应编号。租金Price在1000—4000之间随机产生,发布时间HTime自当前系统日期之间近一年内随机产生。 ? 标题Topic、描述Contents和备注Copy建议从3个临时表里随机取相应的记
录。3个临时表内容如下所示:
图4.3个临时表的记录集
? 参考代码 select top 1 @userid=userid from sys_user order by NEWID() --租金在-4000之间随机产生 set @price=1000+cast(3000*RAND() as int) --发布时间@htime,要求小于当前系统时间,发布时间在当前系统时间一年内 set @htime=cast(dateadd(day,-cast(rand()*datepart(dayofyear,getdate()) as int),getdate()) as date) 22
《数据库技术与开发》工程实训指导书
3、实训三:综合查询
(1) 分页显示查询出租房屋信息
查询输出第6-10条出租房屋信息:
? 使用Top关键字实现查询分页显示,用临时表先取出前10条记录,然后再
在临时表里取出第6-第10条记录。
图5.使用Top关键字和临时表分页显示
? 使用RowNumber函数,要求所有的列标题使用中文,查询结果如下图所示:
图6.使用RowNumber函数实现分页显示
(2) 查询指定客户发布的出租房屋信息
查询张三发布的所有出租房屋信息,并显示房屋分布的街道和区县,要求分别按下述2种方法实现图7的查询结果:
? 使用内联接inner join查询和子查询实现。 ? 使用where子句和内查询实现。
查询结果如下图所示:
图7.查询张三发布的所有出租房屋信息
(3) 按区县制作房屋出租清单
为至少有2个街道有出租房屋的区县制作出租房屋清单,使用having子句筛选出街道数量大于1的区县。
23
《数据库技术与开发》工程实训指导书
图8.按区县制作房屋出租清单
提示代码: select ....... from ...... and D.DId in (select A.DId from ...... A group by A.DId having(COUNT(A.Streetid)>1)) 4、实训四:业务统计
(1) 按季度统计本年度发布的房屋出租数量
创建视图View_QTDst本年各个季度各区县各街道销售的各房型出租数量。结果如下图所示:
图9.视图View_QTDst查询结果
(2) 统计出各个季度各个区县出租房屋的数量
在视图View_QTDst上进行汇总统计,结果如下图所示:
24
《数据库技术与开发》工程实训指导书
图10.各个季度各个区县出租房屋的数量
(3) 统计出各个季度各个区县出租房屋的数量总和及街道户型明细 使用联合查询输出各个季度总量,结果如下图所示:
图11.各个季度总量
25