仓酷云

标题: MSSQL网站制作之Sql Server 收拾搜集 [打印本页]

作者: 飘灵儿    时间: 2015-1-16 22:28
标题: MSSQL网站制作之Sql Server 收拾搜集
如果WHERE子句的查询条件里使用比较操作符LIKE和REGEXP,MySQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。比如说,如果查询条件是LIKEabc%‘,MySQL将使用索引;如果查询条件是LIKE%abc’,MySQL将不使用索引。server
正在进修SQLServer希冀搜集一些罕见的SqlServer成绩

SqlServer成绩择要

1.兼并多少个表?

形貌:创建一个新表,其字段布局是其他多少个表Join今后的了局。

办理思绪:select*into新表名from旧表1名,旧表2名,……

实例:

--表NewTableName的字段为表titles和titleauthor字段表相加;

---纪录为纪录为select*fromtitles,titleauthor的纪录

select*intoNewTableNamefromtitles,titleauthor

--表NewTableName的字段[title_id,title,au_id]

--纪录为selecta.title_id,a.title,b.au_idfromtitlesa,titleauthorbwherea.title_id=b.title_id

selecta.title_id,a.title,b.au_idintoNewTableNamefromtitlesa,titleauthorbwherea.title_id=b.title_id

2.查询N-M笔记录?

形貌:要从纪录会合掏出两头一段纪录来(如:取10条中的第3-8条)

办理思绪:

1.有关头字或确保独一的候选关头字字段:

办法1:从第n笔记录入手下手取m-n+1条数据

办法2:升序取前m笔记录最为a,再降序从a中取m-n+1笔记录作为b

2.没有上述字段:

增添一个自增字段天生一个一时表,在从一时表中取纪录[Where自增字段名>n-1]

实例:--

--取第4到第7笔记录[对1办法一]

SELECTtop4*FROMjobsWHEREjob_idnotin(SELECTtop3job_idFROMjobs)

--[办法二]

SELECTtop4*FROM

(SELECTtop4*FROM

(SELECTtop7*FROMjobsORDERBYjob_idASC)a

ORDERBYjob_idDESC

)b

ORDERBYjob_idASC

--取第2到第3笔记录[对1办法一]

selectIDENTITY(int,1,1)asiid,*into#temptablefromdiscountsselecttop2*from#temptablewhereiid>=2

3.按年度季度统计汇总?

形貌:统计表employee的各年度各季度的雇仆人数

办理思绪:Groupby和[函数datepart()]

实例:

//季度:quarter

SELECTyear(hire_date)年度,datepart(q,hire_date)季度,count(emp_id)雇仆人数FROMemployee

GROUPBYyear(hire_date),datepart(q,hire_date)

ORDERBY年度,季度

4.随机取n笔记录?

形貌:从表中随机提取n笔记录

办理思绪:依照用Guid

实例:

--从表中随机取5笔记录

SELECTtop5*FROMtitlesORDERBYnewid()

5.求出恣意工夫地点季度的天数?

形貌:如题

办理思绪:注重闰年

实例:

declare@tsmalldatetime

select@t=2001-4-1

selectcasedatepart(quarter,@t)

when1then

(casewhen(year(@t)%4=0andyear(@t)%1000)oryear(@t)%400=0then91else90end)

when2then91

when3then92

when4then92

end

6.求出恣意工夫的季度的第一天?

形貌:如题

办理思绪:以下

实例:

--[思绪:把日期向前推到季度的第一个月确当前号

--注重:5月31号不会推成4月31号,体系主动转为30号

declare@ddatetime

set@d=2003-5-31

select@das指定日期,

dateadd(month,-(month(@d)-1)%3,@d)-day(dateadd(month,-(month(@d)-1)%3,@d))+1as季度的第一天

--[思绪:分离求出年代日在转为日期型]

declare@tsmalldatetime

select@t=2001-9-30

selectcast(cast(year(@t)asvarchar)+-+cast(3*datepart(q,@t)-2asvarchar)+-1asdatetime)

--求以后的日期季度的第一天

selectcast(cast(year(getdate())asvarchar)+-+cast(3*datepart(q,getdate())-2asvarchar)+-1asdatetime)

7.工夫堆叠度的成绩?

出处:http://expert.csdn.net/Expert/topic/2806/2806966.xml?temp=.5277979

形貌:

createtable#a(idintidentity(1,1),date1datetime,date2datetime)

insert#aselect2004-02-2916:45:00,2004-02-2920:45:00

unionallselect2004-02-2918:45:00,2004-02-2922:45:00

unionallselect2004-03-0110:45:00,2004-03-0113:45:00

unionallselect2004-03-0113:45:00,2004-03-0116:45:00

unionallselect2004-03-0113:47:00,2004-03-0114:25:00

unionallselect2004-03-0116:45:00,2004-03-0119:15:00

unionallselect2004-03-0117:45:00,2004-03-0118:55:00

unionallselect2004-03-0118:45:00,2004-03-0121:45:00

select*from#a

我如今要找出工夫上堆叠凌驾1个小时的一切纪录!

好比第1、2条:一个是从16:45---20:45,第二条是从18:45---22:45工夫上堆叠了2个小时,以是这两条都要掏出,别的的也是一样的划定规矩!

date2-date1小于1小时的不必思索,如第5条。能够先删除该条,纪录是按date1排序的!

以是终极的了局要为:

iddate1date2

-----------------------------------------------------------------

12004-02-2916:45:00.0002004-02-2920:45:00.000

22004-02-2918:45:00.0002004-02-2922:45:00.000

62004-03-0116:45:00.0002004-03-0119:15:00.000

72004-03-0117:45:00.0002004-03-0118:55:00.000

办理思绪:

实例:

--计划一:[“victorycyz(中海,干活往了,不在CSDN玩。)”]

selectdistincta.*

from#aa,#ab

wherea.idb.idand

a.date1<b.date2anda.date2>b.date1and

(casewhena.date2>b.date2thenb.date2elsea.date2end)-

(casewhena.date1>b.date1thena.date1elseb.date1end)>1/24.0

--计划二:[“j9988(j9988)”]

select*from#aAwhere

exists(select1from#a

whereidA.id

anddateadd(minute,60,date1)<date2

and(date1betweenA.date1andA.date2)

andabs(datediff(minute,date1,A.date2))>=60)

or

exists(select1

from#a

whereidA.id

anddateadd(minute,60,A.date1)<A.date2

and(A.date1betweendate1anddate2)

andabs(datediff(minute,A.date1,date2))>=60)


收拾中
先说DDL的分类。有一类DDL,是不需要重建表的,比如加非聚簇索引。这类操作其实不会丢数据,也是在原表上直接操作,对于我们“以恢复数据为目的”的闪回,是可以先忽略的。另外一类,则是会影响到表数据的操作。
作者: 山那边是海    时间: 2015-1-19 14:20
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
作者: 只想知道    时间: 2015-1-26 16:20
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
作者: 精灵巫婆    时间: 2015-2-4 20:03
然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情
作者: 深爱那片海    时间: 2015-2-10 06:08
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
作者: 不帅    时间: 2015-3-10 09:59
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
作者: 再现理想    时间: 2015-3-17 06:37
对于微软系列的东西除了一遍遍尝试还真没有太好的办法
作者: 莫相离    时间: 2015-3-24 00:15
学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2