一、基础知识1、说明:创建数据库CREATEDATABASEdatabase-name2。描述:删除一个数据库dropdatabasedbname3。'disk','testBack','c:mssql7backupMyNwind_1.dat'---开始备份BACKUPDATABASEpubsTOtestBack4,description:createanewtablecreatetabletabname(col1type1[notnull][primarykey],col2type2[notnull],..)Createtablenewtablebasedontheexistingtable:A:createtabletab_newliketab_old(使用旧表创建新表)B:createtabletab_newasselectcol1,col2...fromtab_olddefinitiononly5.描述:deletethenewTabledroptabletabname6.描述:添加列Altertabletabnameaddcolumncoltype注意:列添加后不能删除。在DB2中添加列后不能更改数据类型。唯一可以改变的是增加varchar类型的长度。7.描述:添加主键:Altertabletabnameaddprimarykey(col)描述:删除主键:Altertabletabnamedropprimarykey(col)8.描述:创建索引:create[unique]indexidxnameontabname(col....)删除索引:dropindexidxname注意:索引不能改变,要改变必须先删除再重建。9.描述:创建视图:createviewviewnameasselectstatement删除视图:dropviewviewname10.描述:选择几条简单基础的SQL语句:select*fromtable1whererangeinsert:insertintotable1(field1,field2)values(value1,value2)delete:deletefromtable1whererangeupdate:updatetable1setfield1=value1whererangesearch:select*fromtable1wherefield1like'%value1%'---like的语法很微妙,查资料!排序:select*fromtable1orderbyfield1,field2[desc]total:selectcountastotalcountfromtable1sum:selectsum(field1)assumvaluefromtable1average:selectavg(field1)asavgvaluefromtable1***:selectmax(field1)asmaxvaluefromtable1minimum:selectmin(field1)asminvaluefromtable111,description:几个高级查询操作符A:UNIONoperatorUNIONoperator结合其他两个结果表(如TABLE1和TABLE2)并消除表Any复制行以导出结果表。当ALL与UNION(即UNIONALL)一起使用时,不会消除重复行。在这两种情况下,派生表的每一行都来自TABLE1或TABLE2。B:EXCEPT运算符EXCEPT运算符通过包括所有在TABLE1中但不在TABLE2中的行并消除所有重复行来派生结果表。当ALL与EXCEPT(EXCEPTALL)一起使用时,不消除重复行。C:INTERSECT运算符INTERSECT运算符通过仅包括TABLE1和TABLE2中都存在的行并消除所有重复行来派生结果表。当ALL与INTERSECT(INTERSECTALL)一起使用时,不会消除重复行。注意:多个使用操作词的查询结果行必须一致。12、说明:使用外连接A、左(外)连接:左外连接(leftjoin):结果集包括被连接表的匹配行,也包括左连接表的所有行。SQL:selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONa.a=b.cB:right(outer)join:rightouterjoin(右连接):结果集包括两个匹配的连接连接表行,包括右连接表的所有行。C:full/cross(outer)join:全外连接:不仅包括符号链接表的匹配行,还包括两个连接表中的所有记录。12、分组:Groupby:一张表,一旦完成分组,查询后只能得到与该组相关的信息。组相关信息:(统计信息)count,sum,max,min,avg分组标准)在SQLServer中分组时:text、ntext、image类型的字段不能作为分组依据selecte统计函数中的字段不能和普通字段放在一起;13、操作数据库:分离数据库:sp_detach_db;attachthedatabase:sp_attach_db后跟说明attachment需要完整的路径名14.修改数据库名称的方法:sp_renamedb'old_name','new_name'2.改进1.说明:复制表(只复制结构,源码表名:新表名:b)(可以访问)方法一:select*intobfromawhere1<>1(仅对SQlServer有效)方法二:selecttop0*intobfroma2。说明:copytable(复制数据,源表名:a目标表名:b)(Accessavailable)insertintob(a,b,c)selectd,e,ffromb;3.描述:数据库之间表的复制(特定数据的绝对路径)(可以访问)insertintob(a,b,c)selectd,e,ffrombin'specificdatabase'wherecondition例子:..来自bin'"&Server.MapPath(".")&"data.mdb"&"'where..4.描述:子查询(表名1:a表名2:b)selecta,b,cfromawhereaIN(selectdfromb)or:selecta,b,cfromawhereaIN(1,2,3)5.描述:显示文章、提交者和***回复时间selecta.title,a.username,b.adddatefromtablea,(selectmax(adddate)adddatefromtablewheretable.title=a.title)b6。说明:外连接查询(表名1:a表名2:b)selecta.a,a.b,a.c,b.c,b。d,b.ffromaLEFTOUTJOINbONa.a=b.c7.描述:在线查看查询(表名1:a)select*from(SELECTa,b,cFROMa)Twheret.a>1;8.说明:between的用法,between限制查询数据范围包括边界值,notbetween不包括select*fromtable1wheretimetime1和time2之间的时间selecta,b,c,fromtable1whereanotbetweenvalue1andvalue29、说明:如何使用inselect*fromtable1wherea[not]in('value1','value2','value4','value6')10.说明:两个关联表,删除主表tablealreadyinInformationnotinsub-tabledeletefromtable1wherenotexists(select*fromtable2wheretable1.field1=table2.field1)11.解释:四表联合查询问题:select*fromaleftinnerjoinbona.a=b.b右内连接cona.a=c.cinnerjoindona.a=d.dwhere.....12.解释:schedule提前五分钟提醒SQL:select*fromschedulewheredatediff('minute',fstarttime,getdate())>513。说明:一条sql语句处理数据库分页selecttop10b.*from(selecttop20primarykeyfield,sortingfieldfromtablenameorderbysortingfielddesc)a,tablenamebwhereb.主键字段=a.主键字段顺序由a。排序字段的具体实现:关于数据库分页:declare@startint,@endint@sqlnvarchar(600)set@sql='selecttop'+str(@end-@start+1)+'+fromTwhereridnotin(selecttop'+str(@str-1)+'RidfromTwhereRid>-1)'execsp_executesql@sqlnote:top后面不能直接跟一个变量,所以在实际应用中,只把Rid当作标识列。如果top后面有特定的字段,那么这样做是很有好处的。因为如果对top字段进行逻辑索引,这样可以避免查询结果后实际表中的不一致(逻辑索引中的数据可能与数据表不一致,查询时如果在索引中,先查询索引)14、解释:selecttop10*formtable1whererangeforthefirst10records15、解释:选择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*intotempfromtablenamedeletefromtablenameinsertintotablenameselect*fromtemp评价:该操作涉及大量数据的移动,不适合大容量但有数据的操作3)、例如:在外部表中导入数据时,由于某些原因,第一次只导入了一部分,但具体位置很难判断,所以只能在表中导入下一次,这将产生很多重复字段。如何删除重复字段altertabletablename--添加自增列addcolumn_bintidentity(1,1)deletefromtablenamewherecolumn_bnotin(selectmax(column_b)fromtablenamegroupbycolumn1,column2,...)altertabletablenamedropcolumncolumn_b20。描述:列出数据库中所有表名selectnamefromsyscolumnswheretype='U'//U代表用户21.描述:列出表中所有列名selectnamefromsyscolumnswhereid=object_id('TableName')22.描述:列出类型,vender,pcs字段,排列在type字段中,case可以方便的实现多选,类似select中的caseselecttype,sum(casevenderwhen'A'thenpcselse0end),sum(casevenderwhen'C'thenpcselse0end),sum(casevenderwhen'B'thenpcselse0end)FROMtablenamegroupbytype显示结果:typevenderpcscomputerA1电脑A1盘B2盘A2手机B3手机C323,说明:初始化表table1TRUNCATETABLEtable124,说明:从10到15中选择记录selecttop5*from(selecttop15*fromtableorderbyidasc)table_aliasorderbyiddesc3.技巧1.1=1的使用and1=2常用于SQL语句的组合。“where1=1”表示全选“where1=2”不全选,如:if@strWhere!=''beginset@strSQL='selectcount(*)asTotalfrom['+@tblName+']where'+@strWhereendelsbeginset@strSQL='selectcount(*)asTotalfrom['+@tblName+']'end我们可以直接写成error!找不到目录条目。set@strSQL='selectcount(*)asTotalfrom['+@tblName+']where1=1stability'+@strWhere2,shrinkdatabase--重建索引DBCCREINDEXDBCCINDEXDEFRAG--shrinkdataandlogDBCCSHRINKDBDBCCSCHRINKFILE3,压缩数据库dbccshrinkdatabase(dbname)4,将数据库转移到已有用户权限的新用户execsp_change_users_login'update_one','newname','oldname'go5,检查备份集RESTOREVERIFYONLYfromdisk='E:dvbbs.bak'6,修复数据库ALTERDATABASE[dvbbs]SETSINGLE_USERGODBCCCHECKDB('dvbbs',repair_allow_data_loss)WITHTABLOCKGOALTERDATABASE[dvbbs]SETMULTI_USERGO
