今天由袁龙友老师继续讲数据库,我没有去听课,下面是张挺记录的培训日记。
回顾上次作业
根据上次留下的作业,回顾了建两个表,表间互相引用以及主外键约束,其中约束又分为表级约束和列级约束。怎样使一段脚本可以重复执行?需要先判断是否已经存在创建的数据库或者表,如果有,则先删除,但是考虑一种情况,两表间互相存在引用,则删不掉。此时正确的处理方式应该是,先删掉约束,再删表,具体办法见上次课的笔记。
T-SQL编程
Sql Server中的系统函数:时间和日期函数是比较重要的,在编程中经常会使用。
(1) GetDate()
(2) DateAdd()
(3) DateName()与DatePart()的区别?前者返回字符串,后者返回整数
(4) DateDiff()
一个具体问题:
表A是一个不断有新记录增加的表,字段t是记录插入的时间,现在想知道每10秒钟插入到该表的记录总数大于N条的时间和记录条数,并按由大到小的顺序排列,请写出完成该功能的语句。
解决思路:将开始插入的时间定为基准时间,求出每个时间与基准时间相差的秒数比上10的商,用求出的商来分组。
答案:select max(t) as maxT,min(t) as minT,count(*) as Num from dt group by datediff(ss,’<chsdate year="2006" month="9" day="23" islunardate="False" isrocdate="False" w:st="on">2006-9-23</chsdate>’,t)/10 having count(*)>N order by desc
如果用定义变量的方式,可以先定义一个基准时间@Start
declare @start datetime
select @start=min(t) from dt
……
作业:
用SQL语句求出一个选手的得分(10个评委,去掉一个最高分和一个最低分,再求平均分)
思路1:先定义两个变量最高分和最低分的id,排除这两个id,再求平均值
思路2:不用定义变量,总分减去一个最高分和一个最低分再除8
局部变量:储存临时值的变量
会话级的变量:通过classpath对比讲解,一个会话中的变量,不影响另外的会话
全局变量:全局的变量,影响整个库,如@@RowCount这个系统变量的值,会随着SQL语句的执行而改变
Sql Server中不能由用户定义全局变量,标准的SQL中定义了标准的全局变量,但是各个厂家的实现中,决大多数都不是通用的。
实现分页的SQL语句:(每页显示3条记录)
select top 3 * from grade where id not in (select top 3 ID from grade)
通用形式:
declare @pageIndex int, @pageSize int
set @pageSize=3 set @pageIndex=2
select top(@pageSize) * from grade where id not in(select top(@pageIndex-1)* @pageSize) ID from grade
declare @RecordNum int
select @RecordNum=Count(*) from grade
可以只用一条SQL语句实现分页,其策略为:
select * from grade select @@RowCount
(MySQL中分页可以使用limit限制取记录的行号)
使用top 分页,如果记录很多,越到后面分页越慢,性能差
跳页时选择性能好的分页
declare @id int
select top 3 @id=id from grade
select top 3 * from grade where id>@id
使用会话级变量
declare @id int
set RowCount 6
select @id=id from grade
select top 3 * from grade where id>@id(这样比子查询快很多)
会话级变量如果设置为0,则表示无此变量
查询数据远比传输数据的速度快,由此引出了面向连接的数据库编程的概念
如果将查询到的结果马上送入ResultSet,则是面向无连接的数据库编程,这样做的缺点是占内存资源
写脚本完成学生选课的功能,表结构如下图:
<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 237.75pt; HEIGHT: 118.5pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CIBM_USER%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.png" o:title=""></imagedata></shape>
查学生ID使用全局变量@@Identity,该全局变量显示标识列的值,向标识列插入数据,需要将变量Indetity_insert设置为on。
例如,set IDENTITY_INSERT grade on
可以设置标识列从某个值开始编号,使用DBCC CHECKIDENT语句,例如,从200开始编号,则dbcc checkident(grade,RESEED,199)
全局变量 @@error
每条SQL语句执行后,都要检查@@error变量,增,删,改的SQL语句执行后,系统都会设置@@error的值。
如:
if @@error=0,表示语句正确,则继续进行以后的语句,否则将破坏数据的完整性。
SQL语句执行后,要不要输出@@RowCount变量的值,可以设置set nocount on,这样就会关闭回显功能,但是还是会将值赋给@@RowCount变量。
SQL SERVER中引入了TRY……CATCH语句块
CATCH中可以用特定的系统函数(见帮助)
临时表及表级变量
变量中存单个的值,如果要存集合,可以存到表中,并且可以使用临时表,表名前有字符”#”,临时表保存在tempDB数据库中。会话窗口关闭时,临时表被删除。
临时表分全局临时表和会话级临时表,全局临时表前面有”##”,所有的会话军共享全局临时表。
临时表是有编号的。建临时表不要建索引。
临时表的应用:
应用临时表实现分页处理(百度就是用这种方式)
前面的几种方式每翻一页要查两次数据库,这种方式每增加一页查一次数据库。
create table #PageTable
(
NewID int identity(1,1),
ID int
)
insert into #PageTable(ID) select ID from Grade select a.* from Grade a join(select ID from #PageTable where NewID between 3 and 5) b on a.ID=b.ID
前面讲的几种方式要求表有单一主键,如果想按name页排序分页,将不能实现,应用临时表可解决该问题。
临时表也要写磁盘,比写内存要慢,考虑到性能,可以使用表级变量,定义表级变量:
Declare @Table Table
(
NewID int identity(1,1),
ID int
)
使用表级变量与临时表相同。
系统函数(字符串函数)
(1) 验证身份证号(分18位和15位两种,年龄在18-60岁之间)
使用逻辑表达式,
If(len(cardNo=15 and datediff(yyyy,subString(cardNo,7,6),getdate())>18 and datediff(yyyy,subString(cardNo,7,6),getdate())<60) or len(cardNo=18……)
图书馆借书的实际案例
一个图书馆借书的规定是:科技类的书可以借30天,文艺类的45天,其它的书20天
用SQL语句查询出,三天之类即将过期的图书的借阅记录。
Declare @userID int,@bookType varchar(20),@H_Date datetime
If @bookType=’文艺’ select @H_Date=DateAdd(dd,getDate(),45)
Else if ……
Case……when语句
Select Name,(case when sex=1 then ‘男’ else ‘女’end) as sex from student]
分享到:
相关推荐
本软件起到了一个个人日记的功能。 日记记录的内容全部存放在tool\5b\artdiary.gtz下面,如果记录数量比较多的情况下,可以手工备份此文件,以免以外情况下丢失数据。 日记中的心情与天气,可以选择,也可以手工...
《唐骏日记》是著名企业家、职业经理人唐骏的一部个人著作,它记录了唐骏在IT行业的职业生涯和个人成长的心路历程。唐骏作为中国IT界的标志性人物,他的经历和见解对于理解中国互联网和科技产业的发展具有重要的参考...
总的来说,"Android代码-移动日记本功能包含传统的日记本和音频日记视频日记实现私密日记和普通日记"这个项目涵盖了Android应用开发的多个方面,包括UI设计、数据管理、多媒体处理、安全性和测试等核心知识点。...
微信小程序 小熊的日记 (源码)微信小程序 小熊的日记 (源码)微信小程序 小熊的日记 (源码)微信小程序 小熊的日记 (源码)微信小程序 小熊的日记 (源码)微信小程序 小熊的日记 (源码)微信小程序 小熊的日记 (源码)微信...
SAP 开发日记2SAP 开发日记2SAP 开发日记2SAP 开发日记2SAP 开发日记2SAP 开发日记2SAP 开发日记2SAP 开发日记2SAP 开发日记2SAP 开发日记2
9、日记站后台管理目录为a,访问请直接用"域名/a",a目录可随意命名。建议后台管理目录。 10、日记后台管理分系统设置、管理员密码、用户管理、用户密码、日记管理和推荐管理几大块。 11、日记演示站 [七日记...
9、日记站后台管理目录为a,访问请直接用"域名/a",a目录可随意命名。建议后台管理目录。 10、日记后台管理分系统设置、管理员密码、用户管理、用户密码、日记管理和推荐管理几大块。 11、日记演示站 [ 青春日记],如...
这是一款仿真日记,也是我个人认为最优秀的日记。(用过效能日记等日记软件,但没有一款符合我心意,惟独这款日记深得我心) 喜欢写日记的人可以尝试,相信你们也会认同我的观点并喜欢上这款日记。 这是我最爱的一...
微信小程序源码 小熊的日记(学习版)微信小程序源码 小熊的日记(学习版)微信小程序源码 小熊的日记(学习版)微信小程序源码 小熊的日记(学习版)微信小程序源码 小熊的日记(学习版)微信小程序源码 小熊的日记(学习版)...
例如,5月13日的日记可能涉及数据库性能监控和维护,5月18日可能讨论了RAC(Real Application Clusters)集群技术的应用,5月22日提到了ODS(Operational Data Store)系统和其在数据仓库中的角色,5月23日则深入讲解了...
这篇“魔筷科技实习日记”中可能涉及了7月23日至24日期间对电商后台运营数据的观察和分析。 首先,我们来探讨一下电商后台运营数据中的关键指标: 1. **流量指标**:包括访问量(UV)、独立访客数(IP)、页面浏览...
在阅读了这位研发经理的三篇日记后,我们可以从中提炼出一些关于软件开发与管理的重要知识点,这将对任何在IT行业中从事项目管理和技术领导的角色都有所启发。 首先,日记中可能涉及到了“代码”这一核心话题。作为...
SAP 日记SAP 日记SAP 日记SAP 日记SAP 日记SAP 日记SAP 日记SAP 日记SAP 日记SAP 日记SAP 日记
日记人多用户网络日记程序是一个漂亮精致的网络日记本,它界面美观、功能丰富、使用方便,包含了用户登录注册、日记本排行、日记搜索、日记管理、留言评论等功能,还有音乐播放、时钟日历、愿望小寺等小功能。...
小程序源码 小熊的日记 (代码+截图)小程序源码 小熊的日记 (代码+截图)小程序源码 小熊的日记 (代码+截图)小程序源码 小熊的日记 (代码+截图)小程序源码 小熊的日记 (代码+截图)小程序源码 小熊的日记 (代码+截图)小...
9、日记站后台管理目录为a,访问请直接用"域名/a",a目录可随意命名。建议后台管理目录。 10、日记后台管理分系统设置、管理员密码、用户管理、用户密码、日记管理和推荐管理几大块。 11、日记演示站 [ 青春日记],...
(微信小程序毕业设计)小熊日记(源码+截图)(微信小程序毕业设计)小熊日记(源码+截图)(微信小程序毕业设计)小熊日记(源码+截图)(微信小程序毕业设计)小熊日记(源码+截图)(微信小程序毕业设计)小熊日记(源码+截图)(微信...
9. **源码获取与定制**:根据描述中提到的“需要源码请联系”,意味着这个日记工具可能是开源的,用户或开发者可以自定义功能,或者为项目贡献代码。 10. **开发技术**:制作这样的日记工具可能涉及到的技术包括...