|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
小知识:Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。
1、基本
1、申明:创立数据库
CREATEDATABASEdatabase-name
2、申明:删除数据库
dropdatabasedbname
3、申明:备份sqlserver
---创立备份数据的device
USEmaster
EXECsp_addumpdevicedisk,testBack,c:mssql7backupMyNwind_1.dat
---入手下手备份
BACKUPDATABASEpubsTOtestBack
4、申明:创立新表
createtabletabname(col1type1[notnull][primarykey],col2type2[notnull],..)
依据已有的表创立新表:
A:createtabletab_newliketab_old(利用旧表创立新表)
B:createtabletab_newasselectcol1,col2…fromtab_olddefinitiononly
5、申明:删除新表
droptabletabname
6、申明:增添一个列
Altertabletabnameaddcolumncoltype
注:列增添后将不克不及删除。DB2中列加上后数据范例也不克不及改动,独一能改动的是增添varchar范例的长度。
7、申明:增加主键:Altertabletabnameaddprimarykey(col)
申明:删除主键:Altertabletabnamedropprimarykey(col)
8、申明:创立索引:create[unique]indexidxnameontabname(col….)
删除索引:dropindexidxname
注:索引是不成变动的,想变动必需删除从头建。
9、申明:创立视图:createviewviewnameasselectstatement
删除视图:dropviewviewname
10、申明:几个复杂的基础的sql语句
选择:select*fromtable1where局限
拔出:insertintotable1(field1,field2)values(value1,value2)
删除:deletefromtable1where局限
更新:updatetable1setfield1=value1where局限
查找:select*fromtable1wherefield1like’%value1%’---like的语法很精巧,查材料!
排序:select*fromtable1orderbyfield1,field2[desc]
总数:selectcountastotalcountfromtable1
乞降:selectsum(field1)assumvaluefromtable1
均匀:selectavg(field1)asavgvaluefromtable1
最年夜:selectmax(field1)asmaxvaluefromtable1
最小:selectmin(field1)asminvaluefromtable1
11、申明:几个初级查询运算词
A:UNION运算符
UNION运算符经由过程组合其他两个了局表(比方TABLE1和TABLE2)并消往表中任何反复行而派生出一个了局表。当ALL随UNION一同利用时(即UNIONALL),不用除反复行。两种情形下,派生表的每行不是来自TABLE1就是来自TABLE2。
B:EXCEPT运算符
EXCEPT运算符经由过程包含一切在TABLE1中但不在TABLE2中的行并打消一切反复行而派生出一个了局表。当ALL随EXCEPT一同利用时(EXCEPTALL),不用除反复行。
C:INTERSECT运算符
INTERSECT运算符经由过程只包含TABLE1和TABLE2中都有的行并打消一切反复行而派生出一个了局表。当ALL随INTERSECT一同利用时(INTERSECTALL),不用除反复行。
注:利用运算词的几个查询了局行必需是分歧的。
12、申明:利用外毗连
A、left(outer)join:
左外毗连(左毗连):了局集几包含毗连表的婚配行,也包含左毗连表的一切行。
SQL:selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONa.a=b.c
B:right(outer)join:
右外毗连(右毗连):了局集既包含毗连表的婚配毗连行,也包含右毗连表的一切行。
C:full/cross(outer)join:
全外毗连:不但包含标记毗连表的婚配行,还包含两个毗连表中的一切纪录。
12、分组:Groupby:
一张表,一旦分组完成后,查询后只能失掉组相干的信息。
组相干的信息:(统计信息)count,sum,max,min,avg分组的尺度)
在SQLServer平分组时:不克不及以text,ntext,image范例的字段作为分组根据
在selecte统计函数中的字段,不克不及和一般的字段放在一同;
13、对数据库举行操纵:
分别数据库:sp_detach_db;附加数据库:sp_attach_db后接标明,附加必要完全的路径名
14.怎样修正数据库的称号:
sp_renamedbold_name,new_name
2、提拔
1、申明:复制表(只复制布局,源表名:a新表名:b)(Access可用)
法一:select*intobfromawhere11(仅用于SQlServer)
法二:selecttop0*intobfroma
2、申明:拷贝表(拷贝数据,源表名:a方针表名:b)(Access可用)
insertintob(a,b,c)selectd,e,ffromb;
3、申明:跨数据库之间表的拷贝(详细数据利用相对路径)(Access可用)
insertintob(a,b,c)selectd,e,ffrombin‘详细数据库’where前提
例子:..frombin"&Server.MapPath(".")&"data.mdb"&"where..
4、申明:子查询(表名1:a表名2:b)
selecta,b,cfromawhereaIN(selectdfromb)大概:selecta,b,cfromawhereaIN(1,2,3)
5、申明:显现文章、提交人和最初复兴工夫
selecta.title,a.username,b.adddatefromtablea,(selectmax(adddate)adddatefromtablewheretable.title=a.title)b
6、申明:外毗连查询(表名1:a表名2:b)
selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONa.a=b.c
7、申明:在线视图查询(表名1:a)
select*from(SELECTa,b,cFROMa)Twheret.a>1;
8、申明:between的用法,between限定查询数据局限时包含了界限值,notbetween不包含
select*fromtable1wheretimebetweentime1andtime2
selecta,b,c,fromtable1whereanotbetween数值1and数值2
9、申明:in的利用***
select*fromtable1wherea[not]in(‘值1’,’值2’,’值4’,’值6’)
10、申明:两张联系关系表,删除主表中已在副表中没有的信息
deletefromtable1wherenotexists(select*fromtable2wheretable1.field1=table2.field1)
11、申明:四表联查询题:
select*fromaleftinnerjoinbona.a=b.brightinnerjoincona.a=c.cinnerjoindona.a=d.dwhere.....
12、申明:日程布置提早五分钟提示
SQL:select*from日程布置wheredatediff(minute,f入手下手工夫,getdate())>5
13、申明:一条sql语句弄定命据库分页
selecttop10b.*from(selecttop20主键字段,排序字段from表名orderby排序字段desc)a,表名bwhereb.主键字段=a.主键字段orderbya.排序字段
详细完成:
关于数据库分页:
declare@startint,@endint
@sqlnvarchar(600)
set@sql=’selecttop’+str(@end-@start+1)+’+fromTwhereridnotin(selecttop’+str(@str-1)+’RidfromTwhereRid>-1)’
execsp_executesql@sql
注重:在top后不克不及间接跟一个变量,以是在实践使用中只要如许的举行特别的处置。Rid为一个标识列,假如top后另有详细的字段,如许做长短常有优点的。由于如许能够制止top的字段假如是逻辑索引的,查询的了局后实践表中的纷歧致(逻辑索引中的数占有大概和数据表中的纷歧致,而查询时假如处在索引则起首查询索引)
14、申明:前10笔记录
selecttop10*formtable1where局限
15、申明:选择在每组b值不异的数据中对应的a最年夜的纪录的一切信息(相似如许的用法能够用于服装论坛每个月排行榜,每个月热销产物剖析,按科目成就排名,等等.)
selecta,b,cfromtablenametawherea=(selectmax(a)fromtablenametbwheretb.b=ta.b)
16、申明:包含一切在TableA中但不在TableB和TableC中的行并打消一切反复行而派生出一个了局表
(selectafromtableA)except(selectafromtableB)except(selectafromtableC)
17、申明:随机掏出10条数据
selecttop10*fromtablenameorderbynewid()
18、申明:随机选择纪录
selectnewid()
19、申明:删除反复纪录
1),deletefromtablenamewhereidnotin(selectmax(id)fromtablenamegroupbycol1,col2,...)
2),selectdistinct*intotempfromtablename
deletefromtablename
insertintotablenameselect*fromtemp
评价:这类操纵连累大批的数据的挪动,这类做法不合适年夜容量但数据操纵
3),比方:在一个内部表中导进数据,因为某些缘故原由第一次只导进了一部分,但很难判别详细地位,如许只要鄙人一次全体导进,如许也就发生很多多少反复的字段,如何删除反复字段
altertabletablename
--增加一个自增列
addcolumn_bintidentity(1,1)
deletefromtablenamewherecolumn_bnotin(
selectmax(column_b)fromtablenamegroupbycolumn1,column2,...)
altertabletablenamedropcolumncolumn_b
20、申明:列出数据库里一切的表名
selectnamefromsysobjectswheretype=U//U代表用户
21、申明:列出内外的一切的列名
selectnamefromsyscolumnswhereid=object_id(TableName)
22、申明:列示type、vender、pcs字段,以type字段分列,case能够便利地完成多重选择,相似select中的case。
selecttype,sum(casevenderwhenAthenpcselse0end),sum(casevenderwhenCthenpcselse0end),sum(casevenderwhenBthenpcselse0end)FROMtablenamegroupbytype
显现了局:
typevenderpcs
电脑A1
电脑A1
光盘B2
光盘A2
手机B3
手机C3
23、申明:初始化表table1
TRUNCATETABLEtable1
24、申明:选择从10到15的纪录
selecttop5*from(selecttop15*fromtableorderbyidasc)table_别号orderbyiddesc
3、技能
1、1=1,1=2的利用,在SQL语句组应时用的较多
“where1=1”是暗示选择全体“where1=2”全体不选,
如:
if@strWhere!=
begin
set@strSQL=selectcount(*)asTotalfrom[+@tblName+]where+@strWhere
end
else
begin
set@strSQL=selectcount(*)asTotalfrom[+@tblName+]
end
我们能够间接写成
毛病!未找到目次项。
set@strSQL=selectcount(*)asTotalfrom[+@tblName+]where1=1安宁+@strWhere2、压缩数据库
--重修索引
DBCCREINDEX
DBCCINDEXDEFRAG
--压缩数据和日记
DBCCSHRINKDB
DBCCSHRINKFILE
3、紧缩数据库
dbccshrinkdatabase(dbname)
4、转移数据库给新用户以已存在用户权限
execsp_change_users_loginupdate_one,newname,oldname
go
5、反省备份集
RESTOREVERIFYONLYfromdisk=E:dvbbs.bak
6、修单数据库
ALTERDATABASE[dvbbs]SETSINGLE_USER
GO
DBCCCHECKDB(dvbbs,repair_allow_data_loss)WITHTABLOCK
GO
ALTERDATABASE[dvbbs]SETMULTI_USER
GO
7、日记扫除
SETNOCOUNTON
DECLARE@LogicalFileNamesysname,
@MaxMinutesINT,
@NewSizeINT
USEtablename--要操纵的数据库名
SELECT@LogicalFileName=tablename_log,--日记文件名
@MaxMinutes=10,--Limitontimeallowedtowraplog.
@NewSize=1--你想设定的日记文件的巨细(M)
Setup/initialize
DECLARE@OriginalSizeint
SELECT@OriginalSize=size
FROMsysfiles
WHEREname=@LogicalFileName
SELECTOriginalSizeof+db_name()+LOGis+
CONVERT(VARCHAR(30),@OriginalSize)+8Kpagesor+
CONVERT(VARCHAR(30),(@OriginalSize*8/1024))+MB
FROMsysfiles
WHEREname=@LogicalFileName
CREATETABLEDummyTrans
(DummyColumnchar(8000)notnull)
DECLARE@CounterINT,
@StartTimeDATETIME,
@TruncLogVARCHAR(255)
SELECT@StartTime=GETDATE(),
@TruncLog=BACKUPLOG+db_name()+WITHTRUNCATE_ONLY
DBCCSHRINKFILE(@LogicalFileName,@NewSize)
EXEC(@TruncLog)
--Wrapthelogifnecessary.
WHILE@MaxMinutes>DATEDIFF(mi,@StartTime,GETDATE())--timehasnotexpired
AND@OriginalSize=(SELECTsizeFROMsysfilesWHEREname=@LogicalFileName)
AND(@OriginalSize*8/1024)>@NewSize
BEGIN--Outerloop.
SELECT@Counter=0
WHILE((@Counter<@OriginalSize/16)AND(@Counter<50000))
BEGIN--update
INSERTDummyTransVALUES(FillLog)DELETEDummyTrans
SELECT@Counter=@Counter+1
END
EXEC(@TruncLog)
END
SELECTFinalSizeof+db_name()+LOGis+
CONVERT(VARCHAR(30),size)+8Kpagesor+
CONVERT(VARCHAR(30),(size*8/1024))+MB
FROMsysfiles
WHEREname=@LogicalFileName
DROPTABLEDummyTrans
SETNOCOUNTOFF
8、申明:变动某个表
execsp_changeobjectownertablename,dbo
9、存储变动全体表
CREATEPROCEDUREdbo.User_ChangeObjectOwnerBatch
@OldOwnerasNVARCHAR(128),
@NewOwnerasNVARCHAR(128)
AS
DECLARE@NameasNVARCHAR(128)
DECLARE@OwnerasNVARCHAR(128)
DECLARE@OwnerNameasNVARCHAR(128)
DECLAREcurObjectCURSORFOR
selectName=name,
Owner=user_name(uid)
fromsysobjects
whereuser_name(uid)=@OldOwner
orderbyname
OPENcurObject
FETCHNEXTFROMcurObjectINTO@Name,@Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if@Owner=@OldOwner
begin
set@OwnerName=@OldOwner+.+rtrim(@Name)
execsp_changeobjectowner@OwnerName,@NewOwner
end
--select@name,@NewOwner,@OldOwner
FETCHNEXTFROMcurObjectINTO@Name,@Owner
END
closecurObject
deallocatecurObject
GO
10、SQLSERVER中间接轮回写进数据
declare@iint
set@i=1
while@i<30
begin
insertintotest(userid)values(@i)
set@i=@i+1
end
案例:
有以下表,请求就裱中一切]有合格的成,在每次增L0.1的基A上,使他好合格:
Namescore
Zhangshan80
Lishi59
Wangwu50
Songquan69
while((selectmin(score)fromtb_table)<60)
begin
updatetb_tablesetscore=score*1.01
wherescore<60
if(selectmin(score)fromtb_table)>60
break
else
continue
end
数据开辟-典范
1.按姓氏笔划排序:
Select*FromTableNameOrderByCustomerNameCollateChinese_PRC_Stroke_ci_as//从少到多
2.数据库加密:
selectencrypt(原始暗码)
selectpwdencrypt(原始暗码)
selectpwdcompare(原始暗码,加密后暗码)=1--不异;不然不不异encrypt(原始暗码)
selectpwdencrypt(原始暗码)
selectpwdcompare(原始暗码,加密后暗码)=1--不异;不然不不异
3.取回表中字段:
declare@listvarchar(1000),
@sqlnvarchar(1000)
select@list=@list+,+b.namefromsysobjectsa,syscolumnsbwherea.id=b.idanda.name=表A
set@sql=select+right(@list,len(@list)-1)+from表A
exec(@sql)
4.检察硬盘分区:
EXECmaster..xp_fixeddrives
5.对照A,B表是不是相称:
if(selectchecksum_agg(binary_checksum(*))fromA)
=
(selectchecksum_agg(binary_checksum(*))fromB)
print相称
else
print不相称
6.杀失落一切的事务探察器历程:
DECLAREhcforeachCURSORGLOBALFORSELECTkill+RTRIM(spid)FROMmaster.dbo.sysprocesses
WHEREprogram_nameIN(SQLprofiler,NSQL事务探查器)
EXECsp_msforeach_worker?
7.纪录搜刮:
开首到N笔记录
SelectTopN*From表
-------------------------------
N到M笔记录(要有主索引ID)
SelectTopM-N*From表WhereIDin(SelectTopMIDFrom表)OrderbyIDDesc
----------------------------------
N到开头纪录
SelectTopN*From表OrderbyIDDesc
案例
比方1:一张表有一万多笔记录,表的第一个字段RecID是自增加字段,写一个SQL语句,找出表的第31到第40个纪录。
selecttop10recidfromAwhererecidnotin(selecttop30recidfromA)
剖析:假如如许写会发生某些成绩,假如recid在表中存在逻辑索引。
selecttop10recidfromAwhere……是从索引中查找,尔后面的selecttop30recidfromA则在数据表中查找,如许因为索引中的按次有大概和数据表中的纷歧致,如许就招致查询到的不是原本的欲失掉的数据。
办理计划
1,用orderbyselecttop30recidfromAorderbyricid假如该字段不是自增加,就会呈现成绩
2,在谁人子查询中也加前提:selecttop30recidfromAwhererecid>-1
例2:查询表中的最初以笔记录,其实不晓得这个表共有几数据,和表布局。
set@s=selecttop1*fromTwherepidnotin(selecttop+str(@count-1)+pidfromT)
print@sexecsp_executesql@s
9:猎取以后数据库中的一切用户表
selectNamefromsysobjectswherextype=uandstatus>=0
小知识:退一万步讲,即使CentOS项目终结,正在运行它的企业也可以很轻松的转移到另一个企业Linux的克隆版。 |
|