仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 836|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL网页编程之典范SQL语句年夜汇合

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我们分析上面的两个操作,都有一个“删除数据”的过程。典范SQL语句年夜汇合,以下语句部分是Mssql语句,不成以在access中利用。以下语句部分是Mssql语句,不成以在access中利用。
SQL分类:
DDL—数据界说言语(CREATE,ALTER,DROP,DECLARE)
DML—数据利用言语(SELECT,DELETE,UPDATE,INSERT)
DCL—数据把持言语(GRANT,REVOKE,COMMIT,ROLLBACK)
起首,扼要先容基本语句:
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]
总数:selectcount*astotalcountfromtable1
乞降: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、leftouterjoin:
左外毗连(左毗连):了局集几包含毗连表的婚配行,也包含左毗连表的一切行。
SQL:selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONa.a=b.c
B:rightouterjoin:
右外毗连(右毗连):了局集既包含毗连表的婚配毗连行,也包含右毗连表的一切行。
C:fullouterjoin:
全外毗连:不但包含标记毗连表的婚配行,还包含两个毗连表中的一切纪录。
其次,人人来看一些不错的sql语句
1、申明:复制表(只复制布局,源表名:a新表名:b)(Access可用)
法一:select*intobfromawhere11
法二: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.排序字段
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、申明:删除反复纪录
Deletefromtablenamewhereidnotin(selectmax(id)fromtablenamegroupbycol1,col2,...)
20、申明:列出数据库里一切的表名
selectnamefromsysobjectswheretype=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
随机选择数据库纪录的办法(利用Randomize函数,经由过程SQL语句完成)
对存储在数据库中的数据来讲,随机数特征能给出下面的效果,但它们大概太慢了些。你不克不及请求ASP“找个随机数”然后打印出来。实践上罕见的办理计划是创建以下所示的轮回:
Randomize
RNumber=Int(Rnd*499)+1
WhileNotobjRec.EOF
IfobjRec("ID")=RNumberTHEN
...这里是实行剧本...
endif
objRec.MoveNext
Wend
这很简单了解。起首,你掏出1到500局限以内的一个随机数(假定500就是数据库内纪录的总数)。然后,你遍历每纪录来测试ID的值、反省其是不是婚配RNumber。满意前提的话就实行由THEN关头字入手下手的那一块代码。假设你的RNumber即是495,那末要轮回一遍数据库花的工夫可就长了。固然500这个数字看起来年夜了些,但比拟更加安定的企业办理计划这仍是个小型数据库了,后者一般在一个数据库内就包括了不计其数笔记录。这时候候不就逝世定了?
接纳SQL,你就能够很快地找出正确的纪录而且翻开一个只包括该纪录的recordset,以下所示:
Randomize
RNumber=Int(Rnd*499)+1
SQL="SELECT*FROMCustomersWHEREID="&RNumber
setobjRec=ObjConn.Execute(SQL)
Response.WriteRNumber&"="&objRec("ID")&""&objRec("c_email")
不用写出RNumber和ID,你只必要反省婚配情形便可。只需你对以上代码的事情中意,你自可按需操纵“随机”纪录。Recordset没有包括其他内容,因而你很快就可以找到你必要的纪录如许就年夜年夜下降了处置工夫。
再谈随机数
如今你下定决计要榨干Random函数的最初一滴油,那末你大概会一次掏出多条随机纪录大概想接纳必定随机局限内的纪录。把下面的尺度Random示例扩大一下就能够用SQL应对下面两种情形了。
为了掏出几条随机选择的纪录并寄存在统一recordset内,你能够存储三个随机数,然后查询数据库取得婚配这些数字的纪录:
SQL="SELECT*FROMCustomersWHEREID="&RNumber&"ORID="&RNumber2&"ORID="&RNumber3
假设你想选出10笔记录(大概是每次页面装载时的10条链接的列表),你能够用BETWEEN大概数学等式选出第一笔记录和得当数目的递增纪录。这一操纵能够经由过程好几种体例来完成,可是SELECT语句只显现一种大概(这里的ID是主动天生的号码):
SQL="SELECT*FROMCustomersWHEREIDBETWEEN"&RNumber&"AND"&RNumber&"+9"
注重:以上代码的实行目标不是反省数据库内是不是有9条并发纪录。
随机读取多少笔记录,测试过
Access语法:SELECTtop10*From表名ORDERBYRnd(id)
Sqlserver:selecttopn*from表名orderbynewid()
mysqlselect*From表名OrderByrand()Limitn
Access左毗连语法(比来开辟要用左毗连,Access匡助甚么都没有,网上没有Access的SQL申明,只要本人测试,如今记下以备后查)
语法selecttable1.fd1,table1,fd2,table2.fd2Fromtable1leftjointable2ontable1.fd1,table2.fd1where...
利用SQL语句用...取代太长的字符串显现
语法:
SQL数据库:selectcasewhenlen(field)>10thenleft(field,10)+...elsefieldendasnews_name,news_idfromtablename
Access数据库:SELECTiif(len(field)>2,left(field,2)+...,field)FROMtablename;
Conn.Execute申明
Execute办法
该办法用于实行SQL语句。依据SQL语句实行后是不是前往纪录集,该办法的利用格局分为以下两种:
1.实行SQL查询语句时,将前往查询失掉的纪录集。用法为:
Set工具变量名=毗连工具.Execute("SQL查询言语")
Execute办法挪用后,会主动创立纪录集工具,并将查询了局存储在该纪录工具中,经由过程Set办法,将纪录集赋给指定的工具保留,今后工具变量就代表了该纪录集工具。
2.实行SQL的操纵性言语时,没有纪录集的前往。此时用法为:
毗连工具.Execute"SQL操纵性语句"[,RecordAffected][,Option]
·RecordAffected为可选项,此出可安排一个变量,SQL语句实行后,所失效的纪录数会主动保留到该变量中。经由过程会见该变量,便可晓得SQL语句队几笔记录举行了操纵。
·Option可选项,该参数的取值一般为adCMDText,它用于告知ADO,应当将Execute办法以后的第一个字符注释为命令文本。经由过程指定该参数,可以使实行更高效。
·BeginTrans、RollbackTrans、CommitTrans办法
这三个办法是毗连工具供应的用于事件处置的办法。BeginTrans用于入手下手一个事物;RollbackTrans用于回滚事件;CommitTrans用于提交一切的事件处置了局,即确认事件的处置。
事件处置能够将一组操纵视为一个全体,只要全体语句都乐成实行后,事件处置才算乐成;若个中有一个语句实行失利,则全部处置就算失利,并恢复各处里前的形态。
BeginTrans和CommitTrans用于标志事件的入手下手和停止,在这两个之间的语句,就是作为事件处置的语句。判别事件处置是不是乐成,可经由过程毗连工具的Error汇合来完成,若Error汇合的成员个数不为0,则申明有毛病产生,事件处置失利。Error汇合中的每个Error工具,代表一个毛病信息。
SQL语句年夜全精要
2006/10/2613:46
DELETE语句
DELETE语句:用于创立一个删除查询,可从列在FROM子句当中的一个或多个表中删除纪录,且该子句满意WHERE子句中的前提,可使用DELETE删除多个纪录。
语法:DELETE[table.*]FROMtableWHEREcriteria
语法:DELETE*FROMtableWHEREcriteria=查询的字
申明:table参数用于指定从个中删除纪录的表的称号。
criteria参数为一个表达式,用于指定哪些纪录应当被删除的表达式。
可使用Execute办法与一个DROP语句从数据库中保持全部表。不外,若用这类办法删除表,将会得到表的布局。分歧的是当利用DELETE,只要数据会被删除;表的布局和表的一切属性仍旧保存,比方字段属性及索引。
UPDATE
有关UPDATE,急!!!!!!!!!!!
在ORACLE数据库中
表A(ID,FIRSTNAME,LASTNAME)
表B(ID,LASTNAME)
表A华夏来ID,FIRSTNAME两个字段的数据是完全的
表B华夏来ID,LASTNAME两个字段的数据是完全的
如今要把表B中的LASTNAME字段的响应的数据填进到A表中LASTNAME响应的地位。两个表中的ID字段是互相联系关系的。
updateaseta.lastname=(selectb.lastnamefrombwherea.id=b.id)
为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。
蒙在股里 该用户已被删除
沙发
发表于 2015-1-19 06:28:43 | 只看该作者
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
柔情似水 该用户已被删除
板凳
发表于 2015-1-25 19:07:58 | 只看该作者
sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
小魔女 该用户已被删除
地板
发表于 2015-2-3 15:59:18 | 只看该作者
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
乐观 该用户已被删除
5#
 楼主| 发表于 2015-2-9 04:06:57 | 只看该作者
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
6#
发表于 2015-2-26 21:31:17 | 只看该作者
XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
精灵巫婆 该用户已被删除
7#
发表于 2015-3-8 18:03:37 | 只看该作者
原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。
因胸联盟 该用户已被删除
8#
发表于 2015-3-16 09:59:25 | 只看该作者
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 18:35

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表