网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

Sql语句常语法

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

【网学网提醒】:以下是网学会员为您推荐的Sql语句常语法,希望本篇文章对您学习有所帮助。


    以前感觉在这个方面很欠缺,于是就找了些这方面的材料,自己也做了些总结,汇总到了一块。便于以后的查阅。
    --1、获取表的主键字段SELECTnameFROMSysColumnsWHEREid=Object_Id('表名')andcolid=(selecttop1colidfromsysindexkeyswhereid=Object_Id('表名'))selectA.COLUMN_NAMEfromINFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGEAjoin(select*fromsysobjectswherextype=N'PK')Bonobject_id(A.CONSTRAINT_NAME)=B.idwherea.table_name='表名'第一种方法只使用于表中只有一个主键,不适合与多字段联合主键。第二种方法,两中都适合。--2、获取表的字段名、类型、长度selectdbo.sysobjects.nameasTable_name,dbo.syscolumns.nameasColumn_name,dbo.systypes.nameasType_name,dbo.systypes.lengthasType_length,columnproperty(dbo.syscolumns.id,dbo.syscolumns.name,'precision')asColumn_lenghfromdbo.syscolumnsinnerjoindbo.sysobjectsondbo.syscolumns.id=dbo.sysobjects.idleftjoindbo.systypesondbo.syscolumns.xtype=dbo.systypes.xusertypewheredbo.sysobjects.name='denglu'--表名and(dbo.sysobjects.xtype='u')and(not(dbo.sysobjects.namelike'dtproperties'))
    --1、创建数据库createdatabaseDataBase_Name--2、删除数据库dropdatabaseDataBase_Name--4、创建新表createtableTable_Name(--创建列col1type1[notnull][primarykey],col2type2[notnull]--实例Namevarchar(100)notnullprimarykey,
     AgeIntnotnull)--根据已有的表创建新表createtableNew_TablelikeOld_Table--使用旧表创建新表createtableNew_Tableasselectcol1,col2,col3fromOle_Tabledefinitiononly--definitiononly就是在createtable的时候不同时进行数据插入。那个关键字就是指“只定义无数据"--5、删除新表droptableTable_Name--6、添加一个列AltertableTable_Nameaddcolumncoltype--col为新增列名,type为类型--注:列增加后将不能删除,DB2中列加上后数据类型也不能改变,唯一能改变的是增加是varchar的长度。--7、添加主键AltertableTable_Nameaddprimarykey(col)--col为列名--8、删除主键AltertableTable_Namedropprimarykey(col)--col为列名--9、创建索引create[unique]indexidxnameonTableName(col1,col2)--10、删除索引dropindexidxname--注:索引是不可更改的,想更改必须删除新创建--11、创建视图createviewView_Nameasselectcol1,col2,col3fromTable_Name--12、删除视图dropviewView_Name--13、几个简单的基本的Sql语句select*fromTable_Namewhere条件InsertintoTable_Name(Field1,Field2)values(values1,values2)deletefromTable_Namewhere范围updateTable_Namesetfield1=values1,field2=values2where条件select*fromTable_Namewherefield1like'%values1%'--like的语法很精妙,请查资料select*fromTable_Nameorderbyfield1,field2desc--desc为倒叙排列,为正序排列ascselectcountas'总数
    名'fromTable_Nameselectsum(field1)as'总和'fromTable_Nameselectavg(field2)as'平均值'fromTable_Nameselectmax(field3)as'最大值'fromTable_Name
     selectmin(filed4)as'最小值'fromTable_Name----14、几个高级查询运算词A:union运算符union运算符通过组合其他两个结果表(例如Table_Name1和Table_Name2)并消去表中任何重复行而派生出一个结果表。当ALL随UNION一起使用时(即unionall),不消除重复行。两种情况下,派生表的每一行不是来自TABLE1就是来自TABLE2。B:Except运算符Except运算符通过包括所有在Table1中但不在Table2中的行并清除所有重复行而派生出一个结果表,All随Except一起使用时(ExceptAll),当不清除重复行。C:Intersect运算符Intersect运算符通过只包括Table1和Table2中都有的行并清除所有重复行而派生出一个结果表,当all随intersect一起使用时(Intersectall),不清除重复行注:使用运算词的几个查询结果行必须是一致的。--15、使用外连接A、left(outer)join:左外连接(左连接):结果集包括连接表的匹配行,也包括左连接表的所有行。Sql:selecta.a,a.b,b.a,b.bfromaleftoutjoinbona.a=b.bB、right(outer)join:右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。C、full/cross(outer)join:全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中得所有记录。--16、分组:groupby一张表,一旦分组完成后,查询后只能得到组相关的信息,组相关的信息:(统计信息)count,sum,max,min,avg分组的标准,在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据,在select统计函数中得字段,不能喝普通的字段放在一起;--17、对数据库进行操作:分离数据库:sp_detach_dbDataBase_Name路径名附加数据库:sp_attach_dbDataBase_Name路径名--18、修改数据库的名称sp_renamedb'Old_DatabaseName''New_DatabaseName'
     --1、复制表(只复制结构,源表名:a,新表名:b)(Access可用)方法一:select*intobfromawhere1<>1(仅用于SQLServer)方法二:selecttop0*intobfroma--2、拷贝表(拷贝数据,源表名:a,新表名:b)(Access可用)insertintob(a,b,c)selectd,e,ffroma;--3、跨数据库之间表的拷贝(具体数据使用绝对路径)(Access可用)insertintob(a,b,c)selectd,e,ffromain'具体数据库'where条件--4、子查询(表名1:ta,表名2:tb)selecta,b,cfromtawhereain(selectdfromtb)selecta,b,cfromtawhereain(1,2,3)--5、显示文章、提交人和最后回复时间selecta.title,a.username,b.adddatefromta,(selectmax(adddate)adddatefromtbwhereta,title=tb.title)b--6、外连接查询(表名1:ta,表名2:tb)selectta.a,ta.b,ta.c,tb.c,tb.ffromtaleftoutjointb
    onta.a=tb.c--7、在线视图查询select*from(selecta,b,cfromta)TwhereT.a>1--8、between的用法,between限制查询数据范围时包括了边界值,notbetween不包括select*fromtable1wheretimeabetweentime1andtime2selecta,b,cfromtable1whereanotbetween数值1and数值2--9、in的使用方法select*fromtable1wherea[not]in('值1','值2','值3','值4')--10、两张关联表,删除主表中已经在副表中没有的信息deletefromtable1wherenotexists(select*fromtable2wheretable1.field1=table2.field1)--11、四表联查问题select*fromaleftinnerjoinbona.a=b.brightinnerjoincona.a=c.cinnerjoindona.a=d.dwhere'条件'--12、日程安排提前五分钟提醒select*from日程安排wheredatediff('minute',f开始时间,getdate())>5--13、一条sql语句搞定数据库分页
     selecttop10b.*from(selecttop20主键字段,排序字段from表名orderby排序字段desc)a,表名bwhereb.主键字段=a.主键字段orderbya.排序字段具体实现:关于数据库分页:declare@startint,@endintdeclare@sqlnvarchar(600)set@sql='selecttop'+str(@end-@start+1)+'*fromuserinfowhereuserIDnotin(selecttop'+str(@start-1)+'userIDfromuserinfowhereuserID>-1)'execsp_executesql@sql注意:在top后不能直接跟一个变量,所以在实际应用中只有这样的进行特殊的处理.userID为一个标识列,如果top后还有具体的字段,这样做是非常有好处的,因为这样可以避免top的字段如果是逻辑索引的,查询的结果后实际表中得不一致(逻辑索引中得数据有可能和数据表中得不一致,而查询时如果处在索引则首先查询索引)
    --14、前10条记录selecttop10*fromtable1where'条件'--15、选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名等等。)selecta,b,cfromtablenametawherea=(selectmax(a)fromtablenametbwheretb.b=ta.b)--16、包括所有在TableA中但不在TableB和TableC中得行并消除所有重复行而派生一个结果行(selectafromTableA)except(selectafromTableB)except(selectafromTableC)--17、随机取出10条数据selecttop10*fromTable_Nameorderbynewid()--18、随机选择记录selectnewid()--19、删除重复记录deletefromTable_Namewhereidnotin(selectmax(id)fromTable_Namegroupbycol1,col2)selectdistinct*intotempfromTable_NamedeletefromTable_NameInsertintoTable_Nameselect*fromtemp--评价:这种操作牵连大量的数据的移动,这种做法不适合大容量的数据操作--在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判读具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎么删除重复字段
     al
    tertableTable_Name--添加一个自增列addcolumn_bintidentity(1,1)deletefromTable_Namewherecolumn_bnotin(selectmax(column_b)fromTable_Namegroupbycolumn1,column2)--删除递增列altertableTable_Namedropcolumncolumn_b--20、列出数据库里的所有表名selectnamefromsysobjectswheretype='sa'--sa为用户--21、列出表里的所有列名selectnamefromsyscolumnswhereid=object_id('Table_Name')--22、列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select中得caseselecttype,sum(casevenderwhen'A'thenpcselse0end),sum(casevenderwhen'c'thenpcselse0end),sum(casevenderwhen'B'thenpcselse0end)fromTable_Namegroupbytype--23、初始化表TabletruncatetableTable_Name--24、选择从10到15的记录selecttop5*from(selecttop15*fromTable_Nameorderbyidasc)Table_neworderbyiddesc
    第三层出神入化--1、1=11=2的使用,在SQL语句组合时用得较多where1=1是表示选择全部,where1=2是表示全部不选如:if@strWhere!=''beginset@strSQL='selectcount(*)asTotalfrom['+@tblName+']where'+@strWhereendelsebeginset@strSQL='selectcount(*)asTotalfrom['+@tblName+']'end--2、收缩数据库--重建索引
     dbccreindexdbccindexdefrag--收缩数据和日志dbccshrinkdbdbccshrinkfile--3、压缩数据库dbccshrinkdatabase(DataBase_Name)--4、转移数据库给新用户已存在用户权限execsp_change_users_login'update_one','newname','oldname'go--5、检查备份集restoreverifyonlyfromdisk='路径'--6、修复数据库alterdatabase[dvbbs]setsingle_usergodbcccheckdb('dvbbs',repair_allow_data_loss)withTablockgoalterdatabase[dvbbs]setmultl_usergo
    经典--1、按姓氏笔画排序select*fromTable_NameorderbyCustomerNameCollatechinese_PRC_Stroke_ci_as--从少到多--2、数据库加密selectenctypt('原始密码')selectpwdencrypt('原始密码')selectpwdcompare('原始密码','加密后密码')=1--相同,否则不相同encrype('原始密码')selectpwdencrypt('原始密码')selectpwdcompare('原始密码','加密后密码')=1--相同;否则不相同--3、取回表中字段declare@listvarchar(1000)declare@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(*))from表A)=(selectchecksum_agg(binary_checksum(*))from表B)print'相等'elseprint'不相等'--6、杀掉所有的事件探查器进程:declarehcforeachcursorglobalforselect'kill'+rtrim(spid)frommaster.dbo.sysprocesseswhereprogram_namein('SQLprofiler','SQL事件探查器')--7、记录搜索--开头到n条记录selecttopn*from表--N到M条记录(要
    有主索引ID)selecttopM-N*from表whereIDin(selecttopMIDfrom表)orderbyIDdesc--N到结尾记录selecttopN*fromorderbyIDdesc
    案例例如1:一张表有一万多条记录,表的第一个字段RecID是自增长字段,写一个SQL语句,找出表的第31到di40个记录selecttop10recidfromAwhererecidnotin(selecttop30recidfromA)分析:如果这样写会产生某些问题,如果recid在表中存在逻辑索引。selecttop10recidfromAwhere...是从索引中查找,而后面的selecttop30recidfromA则在数据表中查找,这样由于索引中得顺序有可能和数据表中得不一致,这样就导致查询到得不是本来的欲得到的数据.解决方案:1、用orderby:selecttop30recidfromAorderbyricid如果该字段不是自增长,就会出现问题.2、在那个子查询中也加条件:selecttop30recidfromAwhererecid>-1
    例如2:查询表中的最后几条记录,并不知道这个表共有多少数据以及表结构set@s='selecttop1fromTwherepidnotin(selecttop'+str(@count-1)+'pidfromT)'print@sexecsp_executesql@s
     --8、获取当前数据库中得所有用户表selectNamefromsysobjectswheretype='u'andstatus>=0selectNamefromsysobjectswherextype='u'andstatus>=0--9、获取某一个表的所有字段selectnamefromsyscolumnswhereid=object_id('表名')selectnamefromsyscolumnswhereidin(selectidfromsysobjectswheretype='u'andname='表名')--10、查看与某一个表相关的试图、存储过程、函数selecta.*fromsysobjectsa,syscommentsbwherea.id=b.idandb.textlike'%表名%'--11、查看当前数据库中所有存储过程selectnameas'存储过程名称'fromsysobjectswherextype='p'--12、查询用户创建的所有数据库select*frommaster..sysdatabasesDwheresidnotin(selectsidfrommaster..sysloginswherename='sa')selectdbid,nameasdb_namefrommaster..sysdatabaseswheresid<>0x01--13、查询某一个表的字段和数据类型selectcolumn_name,data_typefrominformation_schema.columnswheretable_name='userinfo'--userinfo表名
    --14、不同服务器数据库之间的数据操作--创建连接服务器execsp_addlinkedserver'ITSV','','SQLOLEDB','远程服务器名或IP地址'execsp_addlinkedsrvlogin'ITSV','false',null,'用户名','密码'--查询示例select*fromITSV.数据库名.dbo.表名--导入示例select*into表fromITSV.数据库名.dbo.表名--以后不再使用时删除连接服务器
     execsp_dropserver'ITSV','droplogins'
    --连接远程/局域网数据(openrowset/openquery/opendatasource)--1、openrowset--查询示例select*fromopenrowset('SQLOLEDB','sql服务器名';'用户名','密码','数据库名.dbo.表名')--生成本地表select*into表fromopenrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)
    --把本地表导入远程表insert
    openrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)select*from本地表--更新本地表updatebsetb.列A=a.列Afromopenrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)asainnerjoin本地表bona.column1=b.column1--2openquery用法需要创建一个连接--首先创建一个连接创建连接服务器execsp_addlinkedserver'ITSV','','SQLOLEDB','远程服务器名或IP地址'--查询select*fromopenquery(ITSV,'select*from数据库.dbo.表名')--把本地表导入远程表insertopenquery(ITSV,'select*from数据库.dbo.表名')select*from本地表--更新本地表updatebsetb.列B=a.列Bfrom(ITSV,'select*from数据库.dbo.表名')asainnerjoin本地表bona.列A=b.列A
    --3opendatasource/openrowsetselect*fromopendatasource('SQLOlEDB','Data名;password=密码').text.dbo.roy_taSource=ip/serverName;UserID=登录
     --本地表导入远程表insertopendatasource('SQLOLEDB','DataSource=ip/ServerName;UserID=登录名;Password=密码').数据库.dbo.表名select*from本地表
    
    
  • 上一篇资讯: SQL语句性能优化
  • 下一篇资讯: SQL语句实现分页查询
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师