`
java-mans
  • 浏览: 11431508 次
文章分类
社区版块
存档分类
最新评论

sql学习笔记

 
阅读更多
Code:
  1. ifexists(select*fromsysdatabaseswherename='student')
  2. dropdatabasestudent--如果该数据库已经存在就删除
  3. go
  4. createdatabasestudentsysdatabases
  5. go
  6. usestudent
  7. go
  8. ifexists(select*fromsysobjectswherename='stuinfo')
  9. droptablestuinfo--如果该表已经存在就删除
  10. go
  11. createtablestuinfo
  12. (
  13. sidintprimarykey,
  14. snamevarchar(40)notnull,
  15. ssexvarchar(20)notnull
  16. )
  17. go
  18. ifexists(select*fromsysobjectswherename='scoreinfo')
  19. droptablescoreinfo
  20. createtablescoreinfo
  21. (
  22. idintprimarykey,
  23. sidintreferencesstuinfo(sid),--外键
  24. scoreintnotnull
  25. )
  26. go
  27. insertintostuinfovalues(0001,'张三','男')
  28. insertintostuinfovalues(0002,'李思','女')
  29. go
  30. insertintoscoreinfovalues(01,0001,85)
  31. insertintoscoreinfovalues(02,0002,80)
  32. go
  33. --演示多表联结查询(必须有主外键关系)
  34. usestudent
  35. go
  36. --(1)内联结查询--》特点:能取出公共字段的“共同值”
  37. select*fromstuinfoasstuinnerjoinscoreinfoasscoonstu.sid=sco.sid
  38. --(2)左外联接--》特点:能取出公共字段和“左表”的全部值
  39. select*fromstuinfoasstuleftouterjoinscoreinfoasscoonstu.sid=sco.sid
  40. --(3)右外联接--》特点:能取出公共字段和"右表"的全部值
  41. select*fromstuinfoassturightouterjoinscoreinfoasscoonstu.sid=sco.sid
  42. --演示子查询----查询出姓名为‘张三’的人的分数
  43. selectscorefromscoreinfowheresid=(selectsidfromstuinfowheresname='张三')
  44. --演示排序函数
  45. --集合运算:
  46. --UNION和UNIONALL:并集
  47. --UNION:把两张表合为一张表,去掉重复数据
  48. --UNIONALL:把两张表合为一张表,不去掉重复数据
  49. --注意:两张是同一个表
  50. select*fromstumarkswherewrittenexam>70
  51. union
  52. select*fromstuinfowherewrittenexam>60
  53. select*fromstumarkswherewrittenexam>70
  54. unionall
  55. select*fromstumarkswherewrittenexam>60
  56. --INTERSECT:交集
  57. --把两张表合为一张表,去掉不重复数据,保留重复数据
  58. select*fromstumarkswherewrittenexam>70
  59. intersect
  60. select*fromstumarkswherewrittenexam>60
  61. --EXCEPT:差集
  62. --把两张表相减,保留不重复的数据
  63. --注意:前一个表比后一个表的数据要多才行
  64. select*fromstumarkswherewrittenexam>60
  65. except
  66. select*fromstumarkswherewrittenexam>70
  67. --带输入参数的存储过程
  68. ifobject_id('test','p')isnotnull
  69. dropproctest--如果该存储过程已经存在就删除
  70. go
  71. createproctest
  72. @aint,@bint
  73. as
  74. select@a-@b
  75. go
  76. exectest@b=15,@a=20--执行存储过程(传参数)
  77. --带输出参数的存储过程
  78. ifobject_id('demo','p')isnotnull
  79. dropprocdemo
  80. go
  81. createprocdemo
  82. @num1int,@num2int,@num3intoutput
  83. as
  84. set@num3=@num1+@num2
  85. go
  86. declare@tempint--定义临时变量
  87. execdemo@num1=20,@num2=15,@num3=@tempoutput
  88. select@temp
  89. --存储过程完成分页
  90. ifobject_id('page','p')isnotnull
  91. dropprocpage
  92. go
  93. createprocpage
  94. --输入参数:当前页,每页显示的条数,表名,字段
  95. @currentpageint=1,
  96. @countint=10,
  97. @tablenamevarchar(20),
  98. @columnvarchar(20)
  99. as
  100. declare@sqlnvarchar(1000)
  101. set@sql='selecttop'+str(@count)+'*from'+@tablename+'where'+@column+'notin'+
  102. ('selecttop'+str((@currentpage-1)*@count)+@column+'from'+@tablename)
  103. exec(@sql)
  104. go
  105. execpage2,3,'bookinfo','bookid'
  106. --计算出总页数
  107. 总页数=(总条数(每页显示的条数-1))/每页显示的条数
  108. --sql语句查询第N页数据(每页显示M条数据)
  109. usebookshop
  110. go
  111. i=(n-1)*m
  112. selecttopn*frombookinfowherebookidnotin(selecttopibookidfrombookinfo)
  113. --事务与游标
  114. --模拟汇款操作,典型的事务举例(其实sql中的关键字go就是一个事务)
  115. begintransactiontran_bank--transaction可以简写为tran
  116. --定义一个记录错误的变量
  117. declare@tran_errorint
  118. set@tran_error=0
  119. --在三毛的账户减去钱
  120. updatebanksetcurrentMoney=currentMoney+1000wherecustomerName='三毛'
  121. set@tran_error=@tran_erro+@@error
  122. --在小毛的账户中增加钱
  123. updatebanksetcurrentMoney=currentMoney-1000wherecustomerName='小毛'
  124. set@tran_error=@tran_error+@@error
  125. if@tran_error<>0
  126. begin
  127. --执行出错,立即回滚事务
  128. rollbacktransaction
  129. print'转账失败,双方交易取消'
  130. end
  131. else
  132. begin
  133. --没有发现出错
  134. committransaction
  135. print'转账成功,双方交易完成'
  136. end
  137. go
  138. --视图与索引
  139. --如果已经存在就删除
  140. ifexists(
  141. select*fromdbo.sysobjectwherename='view_stuInfo_stuMarks'
  142. )
  143. dropviewview_stuInfo_stuMarks--删除视图的语法
  144. go
  145. createviewview_stuInfo_stuMarks
  146. as
  147. --内联接查询语句
  148. select*fromstuinfoasstuinnerjoinscoreinfoasscoonstu.sid=sco.sid
  149. go
  150. --查看视图
  151. select*fromview_stuInfo_stuMarks
  152. --触发器
  153. --insert触发器
  154. --卡表
  155. createtablecard
  156. (
  157. idintprimarykey,
  158. card_namevarchar(40),
  159. banlancemoney
  160. )
  161. go
  162. insertintocardvalues(001,'张三',2000)
  163. insertintocardvalues(002,'李四',8000)
  164. insertintocardvalues(003,'王五',5000)
  165. --交易表
  166. createtabletranslate
  167. (
  168. t_idintprimarykey,
  169. card_idint,
  170. t_datedatetime,
  171. t_typevarchar(4),
  172. salarymoney
  173. )
  174. insertintotranslatevalues(001,001,getdate(),'存',400)
  175. insertintotranslatevalues(002,002,getdate(),'取',400)
  176. insertintotranslatevalues(0004,003,getdate(),'存',400)
  177. go
  178. ifobject_id('ex')isnotnull
  179. droptriggerex
  180. go
  181. createtriggerex
  182. ontranslateforinsert
  183. as
  184. declare@idint
  185. declare@cmoney
  186. declare@typevarchar(4)
  187. --inserted逻辑表
  188. select@id=card_id,@c=salary,@type=t_typefrominserted
  189. if@type='存'
  190. begin
  191. updatecardsetbanlance=banlance+@cwhereid=@id
  192. end
  193. else
  194. begin
  195. updatecardsetbanlance=banlance-@cwhereid=@id
  196. end

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics