MySchool 05 租房网项目

来源:互联网 发布:淘宝iphone6s 编辑:程序博客网 时间:2024/04/27 14:42
  1. USE MASTER     
  2. GO    
  3. EXEC XP_CMDSHELL 'MKDIR E:\HOUSE1'    
  4. GO    
  5. SET NOCOUNT ON----不显示影响行数    
  6. IF EXISTS(SELECT * FROM SYS.DATABASES WHERE NAME='HOUSE')    
  7. DROP DATABASE HOUSE    
  8. GO    
  9. ----创建数据库HOUSE    
  10. CREATE DATABASE HOUSE    
  11. ON    
  12. (NAME='HOUSE_DATA',    
  13. FILENAME='E:\HOUSE1\HOUSE_DATA.MDF',    
  14. SIZE=3,FILEGROWTH=1    
  15. )    
  16. LOG ON    
  17. (NAME='HOUSE_LOG',    
  18. FILENAME='E:\HOUSE1\HOUSE_DATA.LDF',    
  19. SIZE=10,FILEGROWTH=10%    
  20. )    
  21. GO    
  22. /*------创建表-----------*/    
  23. --------建表:sys_user(用户信息表)    
  24. USE HOUSE    
  25. GO    
  26. IF EXISTS(SELECT * FROM SYS.OBJECTS WHERE NAME='sys_user')    
  27. DROP TABLE sys_user    
  28. GO    
  29. CREATE TABLE sys_user    
  30. (UID INT IDENTITY (1,1) NOT NULL,---用户编号    
  31. UNAME VARCHAR(20) NOT NULL ,---姓名    
  32. UPASSWORD VARCHAR(20) NOT NULL---密码    
  33. )    
  34. GO    
  35. ------建表sys_user的约束    
  36. ALTER TABLE sys_user    
  37. ADD CONSTRAINT PK_UID PRIMARY KEY (UID),    
  38.     CONSTRAINT CK_UPASSWORD CHECK(LEN(UPASSWORD)>6)    
  39. GO    
  40. -----建表hos_district    
  41. IF EXISTS( SELECT * FROM SYS.OBJECTS WHERE NAME='hos_district')    
  42. DROP TABLE hos_district     
  43. GO    
  44. CREATE TABLE hos_district    
  45. (    
  46. DID INT IDENTITY (1,1) PRIMARY KEY NOT NULL ,---区县编号(主键)    
  47. DNAME VARCHAR(20) NOT NULL ----区县名称    
  48. )    
  49. GO    
  50. ----建表hos_street    
  51. IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE NAME='hos_street')    
  52. DROP TABLE hos_street    
  53. GO    
  54. CREATE TABLE hos_street    
  55. (    
  56. SID INT IDENTITY(1,1) PRIMARY KEY  NOT NULL,---街道编号(主键)    
  57. SNAME VARCHAR(100) NOT NULL,---街道名称    
  58. SDID INT FOREIGN KEY (SDID)  REFERENCES hos_district (DID) NOT NULL     
  59. )    
  60. GO    
  61. -----建表hos_type    
  62. IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE NAME='hos_type')    
  63. DROP TABLE hos_type    
  64. GO    
  65. CREATE TABLE hos_type    
  66. (    
  67. HTID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,----房屋类型编号(主键)    
  68. HTNAME VARCHAR(20) NOT NULL ---房屋类型    
  69. )    
  70. GO    
  71. -----建表:hos_house    
  72. IF EXISTS(SELECT * FROM SYS.OBJECTS WHERE NAME='hos_house')    
  73. DROP TABLE hos_house    
  74. GO    
  75. CREATE TABLE hos_house    
  76. (    
  77. HMID INT IDENTITY(1,1) NOT NULL,---(房屋信息编号)    
  78. UID INT NOT NULL,----用户编号    
  79. --DID INT NOT NULL,----区县编号    
  80. SID INT NOT NULL,----街道编号    
  81. HTID INT NOT NULL,---房屋类型编号    
  82. PRICE  DECIMAL(18,2) NOT NULL,--价格    
  83. TOPIC VARCHAR(20) NOT NULL,---标题    
  84. CONTENTS VARCHAR(100) NOT NULL,---描述    
  85. HTIME DATETIME NOT NULL,---发布时间    
  86. COPY VARCHAR(20) ---备注    
  87. )    
  88. GO    
  89. -----添加约束(house)    
  90. ALTER TABLE hos_house    
  91. ADD CONSTRAINT PK_HMID PRIMARY KEY (HMID),    
  92.     CONSTRAINT DF_PRICE DEFAULT(0) FOR PRICE,    
  93.     CONSTRAINT CK_PRICE CHECK(PRICE>0),    
  94.     CONSTRAINT DF_HTIME DEFAULT(GETDATE()) FOR HTIME,    
  95.     CONSTRAINT CK_HTIME CHECK(HTIME<=GETDATE()),    
  96.     CONSTRAINT FK_UID FOREIGN KEY (UID) REFERENCES sys_user(UID) ,    
  97.    -- CONSTRAINT FK_DID FOREIGN KEY (DID) REFERENCES hos_district(DID),    
  98.     CONSTRAINT FK_SID FOREIGN KEY (SID) REFERENCES hos_street (SID),    
  99.     CONSTRAINT FK_HTID FOREIGN KEY(HTID) REFERENCES hos_type(HTID)    
  100. GO    
  101. --------添加测试数据    
  102. -----sys_user插入数据    
  103. INSERT INTO sys_user(UNAME,UPASSWORD) VALUES('张三','s217701')    
  104. INSERT INTO sys_user(UNAME,UPASSWORD) VALUES('李四','s217702')    
  105. INSERT INTO sys_user(UNAME,UPASSWORD) VALUES('王鑫','s217703')    
  106. INSERT INTO sys_user(UNAME,UPASSWORD) VALUES('张建','s217704')    
  107. INSERT INTO sys_user(UNAME,UPASSWORD) VALUES('李剑','s217705')    
  108. INSERT INTO sys_user(UNAME,UPASSWORD) VALUES('蒋以然','s217706')    
  109. INSERT INTO sys_user(UNAME,UPASSWORD) VALUES('王晓超','s217707')    
  110. INSERT INTO sys_user(UNAME,UPASSWORD) VALUES('张冬雪','s217708')    
  111. INSERT INTO sys_user(UNAME,UPASSWORD) VALUES('孙鹏','s217709')    
  112. INSERT INTO sys_user(UNAME,UPASSWORD) VALUES('蒋连昌','s217710')    
  113. GO    
  114. -----表hos_district插入数据    
  115. INSERT INTO hos_district (DNAME) VALUES('海淀区')    
  116. INSERT INTO hos_district (DNAME) VALUES('西城区')    
  117. INSERT INTO hos_district (DNAME) VALUES('东城区')    
  118. INSERT INTO hos_district (DNAME) VALUES('朝阳区')    
  119. INSERT INTO hos_district (DNAME) VALUES('景山区')    
  120. INSERT INTO hos_district (DNAME) VALUES('宣武区')    
  121. INSERT INTO hos_district (DNAME) VALUES('大兴')    
  122. INSERT INTO hos_district (DNAME) VALUES('丰台')    
  123. GO    
  124. ----表hos_street插入数据    
  125. INSERT INTO hos_street (SNAME,SDID) VALUES('中关村',1)    
  126. INSERT INTO hos_street (SNAME,SDID) VALUES('苏州街',1)    
  127. INSERT INTO hos_street (SNAME,SDID) VALUES('万泉庄',1)    
  128. INSERT INTO hos_street (SNAME,SDID) VALUES('东四',3)    
  129. INSERT INTO hos_street (SNAME,SDID) VALUES('东单',3)    
  130. INSERT INTO hos_street (SNAME,SDID) VALUES('西四',2)    
  131. INSERT INTO hos_street (SNAME,SDID) VALUES('西单',2)    
  132. INSERT INTO hos_street (SNAME,SDID) VALUES('东湖',4)    
  133. INSERT INTO hos_street (SNAME,SDID) VALUES('八里庄',4)    
  134. INSERT INTO hos_street (SNAME,SDID) VALUES('双井',5)    
  135. INSERT INTO hos_street (SNAME,SDID) VALUES('陶然亭',5)    
  136. INSERT INTO hos_street (SNAME,SDID) VALUES('南菜园',6)    
  137. INSERT INTO hos_street (SNAME,SDID) VALUES('兴丰街',7)    
  138. INSERT INTO hos_street (SNAME,SDID) VALUES('黄村',7)    
  139. INSERT INTO hos_street (SNAME,SDID) VALUES('南苑街',8)    
  140. INSERT INTO hos_street (SNAME,SDID) VALUES('东铁营',8)    
  141. GO    
  142. -----表hos_type插入数据    
  143. INSERT INTO hos_type (HTNAME) VALUES('一室一卫')    
  144. INSERT INTO hos_type (HTNAME) VALUES('一室一厅')    
  145. INSERT INTO hos_type (HTNAME) VALUES('两室一卫')    
  146. INSERT INTO hos_type (HTNAME) VALUES('两室一厅')    
  147. INSERT INTO hos_type (HTNAME) VALUES('三室一厅')    
  148. INSERT INTO hos_type (HTNAME) VALUES('三室两厅')    
  149. GO    
  150. ----表hos_house插入数据    
  151. INSERT INTO hos_house(UID,SID,HTID,PRICE,TOPIC,CONTENTS,HTIME,COPY)    
  152. VALUES(1,1,2,2600,'中关村','中关村一条街','2009-1-2','中关村')    
  153. INSERT INTO hos_house(UID,SID,HTID,PRICE,TOPIC,CONTENTS,HTIME,COPY)    
  154. VALUES(2,2,3,3600,'苏州街','苏州街一条街','2009-1-3','苏州街')    
  155. INSERT INTO hos_house(UID,SID,HTID,PRICE,TOPIC,CONTENTS,HTIME,COPY)    
  156. VALUES(3,3,4,4600,'万泉庄','万泉庄一条街','2009-1-4','万泉庄')    
  157. INSERT INTO hos_house(UID,SID,HTID,PRICE,TOPIC,CONTENTS,HTIME,COPY)    
  158. VALUES(1,3,2,1500,'万泉庄附近','万泉庄附近一条街','2009-7-2','万泉庄附近')    
  159. INSERT INTO hos_house(UID,SID,HTID,PRICE,TOPIC,CONTENTS,HTIME,COPY)    
  160. VALUES(1,5,2,2700,'东单','东单很多美食','2009-9-2','东单')    
  161. INSERT INTO hos_house(UID,SID,HTID,PRICE,TOPIC,CONTENTS,HTIME,COPY)    
  162. VALUES(3,1,2,2600,'中关村','中关村电脑城','2009-4-1','中关村')    
  163. INSERT INTO hos_house(UID,SID,HTID,PRICE,TOPIC,CONTENTS,HTIME,COPY)    
  164. VALUES(4,4,1,2000,'东四','东四一条街','2009-4-2','东四')    
  165. INSERT INTO hos_house(UID,SID,HTID,PRICE,TOPIC,CONTENTS,HTIME,COPY)    
  166. VALUES(5,6,3,3600,'西四','西四一条街','2009-1-2','西四')    
  167. INSERT INTO hos_house(UID,SID,HTID,PRICE,TOPIC,CONTENTS,HTIME,COPY)    
  168. VALUES(5,7,2,3600,'西单','西单购物城','2009-4-2','西单')    
  169. INSERT INTO hos_house(UID,SID,HTID,PRICE,TOPIC,CONTENTS,HTIME,COPY)    
  170. VALUES(6,2,2,2600,'苏州街','苏州街美食','2009-2-2','苏州街')    
  171. INSERT INTO hos_house(UID,SID,HTID,PRICE,TOPIC,CONTENTS,HTIME,COPY)    
  172. VALUES(7,8,3,2900,'朝阳东湖','朝阳东湖一景','2009-3-2','朝阳')    
  173. INSERT INTO hos_house(UID,SID,HTID,PRICE,TOPIC,CONTENTS,HTIME,COPY)    
  174. VALUES(8,3,1,700,'万泉庄','万泉庄一条街','2009-5-2','万泉庄')    
  175. INSERT INTO hos_house(UID,SID,HTID,PRICE,TOPIC,CONTENTS,HTIME,COPY)    
  176. VALUES(3,2,3,4200,'苏州街','苏州街二条街','2009-1-3','苏州街')    
  177. INSERT INTO hos_house(UID,SID,HTID,PRICE,TOPIC,CONTENTS,HTIME,COPY)    
  178. VALUES(4,2,3,4100,'苏州街','苏州街西街','2009-1-3','苏州街')    
  179.     
  180.     
  181.     
  182. GO    
  183.   
  184. [sql] view plain copy 在CODE上查看代码片派生到我的代码片  
  185. use HOUSE    
  186. select * from hos_house  --房间信息表    
  187. select * from hos_district  --区县表    
  188. select * from hos_street    --街道表    
  189. select * from hos_type    --房间类型表    
  190.     
  191. --1.内容扩充:临时表    
  192. --如果表名前面有#,那么创建的表是临时表,位于tempdb数据库下    
  193. --的临时表文件夹下。    
  194. create table #mytemp2222    
  195. (    
  196.   id int identity(1,1) primary key not null,    
  197.   name nvarchar(20)    
  198. )    
  199.   --使用临时表的好处:临时表中的数据当我们断开连接后自动释放,这样    
  200.   --可以节省数据库服务器的空间    
  201.     
  202. --任务一:分页显示查询出租房信息    
  203.     
  204. --经典分页思路(一、双top,双order by 二、Row_number()函数  三、临时表方式(和Row_Number()原理一致))    
  205. --将出租房屋记录批量插入临时表    
  206.     
  207. --*******************方式一:双top,双order by分页************************    
  208. --查询输出第6条~第10条房屋出租信息    
  209.     
  210. --did:区县编号(hos_district)    
  211.     
  212. select top 5 *,hos_district.did    
  213. from hos_house,hos_street,hos_district    
  214. where  hmid    
  215. not in(select top 5 hmid from hos_house)    
  216. and hos_house.sid=hos_street.sid    
  217. and hos_street.sdid=hos_district.did    
  218.     
  219. --*******************方式二:Row_Number() over(order by id)***************    
  220. select * from     
  221. (select *,row_number() over(order by hmid) as myid    
  222. from hos_house) as temp    
  223. where myid between 6 and 10    
  224. --*******************方式三:临时表分页***********************************    
  225. --查询输出第6条~第10条房屋出租信息    
  226. use house    
  227. select identity(int,1,1) as myid, UID, SID, HTID, PRICE, TOPIC, CONTENTS, HTIME, COPY    
  228. into #housetemp    
  229. from hos_house    
  230. --通过临时表我们发现,其实实现分页只有两中思路,一种是通过双top,双order by方式,    
  231. --另外一种方式就是用一定的手段(可以使系统提供Row_NUmber()函数,也    
  232. --可以通过identity(int,1,1)来产生),在现有表上加上一个自动增长列。    
  233. select * from #housetemp    
  234. where myid between 6 and 10    
  235. --如何将临时表释放    
  236. drop table #housetemp    
  237. --练习2——查询指定客户发布的出租房屋信息    
  238. --需求说明::    
  239. --查询“张三”发布的所有出租房屋信息,并显示房屋分布的街道、区县    
  240.     
  241. select DNAME as 区县,SNAME as 街道,HTNAME as 户型,price as 价格,topic as 标题,contents as 描述,htime as 时间,copy as 备注    
  242. from hos_district,    
  243. hos_street,    
  244. hos_type,    
  245. hos_house    
  246. where hos_house.sid=hos_street.sid    
  247. and hos_house.htid=hos_type.htid    
  248. and hos_street.sdid=hos_district.did    
  249. and uid=    
  250. (    
  251.   select uid from sys_user    
  252.   where uname='张三'    
  253. )    
  254. --阶段3:练习——按区县制作房屋出租清单    
  255. --根据户型和房屋所在区县和街道,为至少有2个街道有房屋出租的区县制作出租房屋清单    
  256. --方式一(推荐):    
  257. select HTNAME as 户型,UNAME as 姓名,DNAME as 区县, SNAME as 街道    
  258. from hos_type,sys_user,hos_district,hos_street,hos_house    
  259. where hos_house.sid=hos_street.sid    
  260. and hos_type.htid=hos_house.htid    
  261. and sys_user.uid=hos_house.uid    
  262. and hos_district.did=hos_street.sdid    
  263. and hos_street.sdid in    
  264. (    
  265.   select  hos_street.sdid    
  266.   from  hos_street,hos_district,    
  267.   (select distinct sid from hos_house) as temp    
  268.   where hos_street.sid=temp.sid    
  269.   and hos_street.sdid=hos_district.did    
  270.   group by hos_street.sdid    
  271.   having count(hos_street.sid)>=2    
  272. )    
  273.     
  274. --方式二:    
  275. select HTNAME as 户型,UNAME as 姓名,DNAME as 区县, SNAME as 街道    
  276. from hos_type,sys_user,hos_district,hos_street,hos_house    
  277. where hos_house.sid=hos_street.sid    
  278. and hos_type.htid=hos_house.htid    
  279. and sys_user.uid=hos_house.uid    
  280. and hos_district.did=hos_street.sdid    
  281. and hos_house.SID in    
  282. (    
  283.   select hos_street.SID    
  284.   from hos_street    
  285.   where sdid in    
  286.   (    
  287.     select sdid    
  288.     from hos_street,(select distinct(SID) from hos_house) as temp    
  289.    where hos_street.sid=temp.sid    
  290.    group by sdid    
  291.   having count(hos_street.SID)>=2    
  292.   )    
  293. )    
  294.     
  295.     
  296. --阶段4:按季度统计本年发布的房屋出租数量    
  297. --要求输出本年1月1日至今的全部出租房屋数量,各区县    
  298. --出租房屋数量以及各街道、户型出租房屋数量。    
  299. use house    
  300. DECLARE @year int    
  301. --SET @year = DATEPART(yy,GETDATE())    
  302. set @year=2009    
  303.     
  304. SELECT tmp.quarter AS '季度',hos_district.DNAME AS '区县',hos_street.SNAME AS '街道',    
  305. hos_type.HTNAME AS '户型',tmp.cnt AS '房屋数量'    
  306. FROM (    
  307.   SELECT SID,HTID,COUNT(*) cnt,DATEPART(qq,HTIME) quarter    
  308.   FROM hos_house    
  309.   WHERE DATEPART(yy,HTIME)=@year    
  310.   GROUP BY DATEPART(qq,HTIME),SID,HTID    
  311. ) tmp    
  312. --INNER JOIN sys_user ON (tmp.UID=sys_user.UID)    
  313. INNER JOIN hos_street ON(tmp.SID=hos_street.SID)    
  314. INNER JOIN hos_district ON(hos_street.SDID=hos_district.DID)    
  315. INNER JOIN hos_type ON(tmp.HTID=hos_type.HTID)    
  316.     
  317.     
  318. UNION    
  319.     
  320. SELECT DATEPART(qq,HTIME),hos_district.DNAME,' 小计 ','  ',COUNT(*) AS '房屋数量'    
  321. FROM hos_house    
  322. INNER JOIN hos_street ON(hos_house.SID=hos_street.SID)    
  323. INNER JOIN hos_district ON(hos_street.SDID=hos_district.DID)    
  324. WHERE DATEPART(yy,HTIME)=@year    
  325. GROUP BY DATEPART(qq,HTIME),hos_district.DNAME    
  326.     
  327. union    
  328.     
  329. SELECT DATEPART(qq,HTIME),' 合计 ','  ','  ',COUNT(*) AS '房屋数量'    
  330. FROM hos_house    
  331. WHERE DATEPART(yy,HTIME)=@year    
  332. GROUP BY DATEPART(qq,HTIME)  

1 0
原创粉丝点击