sql技术教程.docx

上传人:b****7 文档编号:10850482 上传时间:2023-02-23 格式:DOCX 页数:72 大小:602.22KB
下载 相关 举报
sql技术教程.docx_第1页
第1页 / 共72页
sql技术教程.docx_第2页
第2页 / 共72页
sql技术教程.docx_第3页
第3页 / 共72页
sql技术教程.docx_第4页
第4页 / 共72页
sql技术教程.docx_第5页
第5页 / 共72页
点击查看更多>>
下载资源
资源描述

sql技术教程.docx

《sql技术教程.docx》由会员分享,可在线阅读,更多相关《sql技术教程.docx(72页珍藏版)》请在冰豆网上搜索。

sql技术教程.docx

sql技术教程

目录

第一篇Sql常用命令的使用2

第一节4条常用命令2

一、select命令2

二、delete命令5

三、update命令6

四、insert命令(表必须存在)7

第二节函数8

一、聚合函数8

二、系统函数9

三、游标函数11

四、日期时间函数11

五、数学函数12

六、字符串函数12

第三节SET13

第四节控制流语言13

第五节常用系统存储过程15

第六节表、存储过程的创建16

第二篇如何制作外挂报表18

第一节编写相关的存储过程18

一、存储过程的标准格式18

二、报表书写的常见问题19

三、常用报表的取数方法26

第二节制作报表模板31

一、页面设置32

二、快速制表法32

三、手工制表法32

四、其他36

第三节报表外挂36

一、关于外挂报表的使用授权36

二、关于参数提示设置37

三、关于参数类型设置37

第三篇远程控制39

第一节pcAnywhere的安装39

第二节pcAnywhere的设置41

第一部分通过局域网对远程计算机的控制42

第二部分通过宽频ADSL对远程计算机的控制48

第三部分通过MODEN对远程计算机的控制49

第三节QQ的远程协助功能52

第一篇Sql常用命令的使用

第一节4条常用命令

一、select命令

虽然SELECT语句的完整语法较复杂,但是其主要的子句可归纳如下:

SELECT[DISTINCT][TOPn]select_list

[INTOnew_table_name]

FROMtable_list

[WHEREsearch_conditions]

[GROUPBY[ALL]group_by_list]

[HAVINGsearch_conditions]

[ORDERBYorder_list[ASC|DESC]]

1、select_list描述结果集的列。

它是一个逗号分隔的表达式列表。

每个表达式同时定义格式(数据类型和大小)和结果集列的数据来源。

每个选择列表表达式通常是对从中获取数据的源表或视图的列的引用,但也可能是其它表达式,例如常量或Transact-SQL函数。

在选择列表中使用*表达式指定返回源表中的所有列。

selecthzxm,zje-yhjezje,substring(jsrq,1,8)rq,casewhenjszt=1then”中途结帐”else“出院结帐”end类型,*

fromZY_BRJSK

wherejsrqbetween‘20050101’and‘2005011024’andybjszt=2andjlztin(0,1,2)

2、在系统中,可能有多个对象带有相同的名称。

例如,ZY_BRJSK和ZY_BRSYK都指定了syxh等列。

若要解析多义性并且指定syxh为ZY_BRJSK所有,请至少使用用户ID来限定表的名称,如:

ZY_BRJSK.syxh。

或者使用别名,如table_nameAStablealias和table_nametable_alias

如:

selecta.*

fromZY_BRSYKasa,ZY_BRJSKb

wherea.syxh=b.syxh

andb.jsrqbetween‘20050101’and‘2005011024’

andybjszt=2andjlztin(0,1,2)

3、以@local_variable=expression形式的变量赋值,如果SELECT语句返回多个值,则将返回的最后一个值赋给变量。

如果SELECT语句没有返回行,变量将保留当前值。

declare@syxhint

select@syxh=syxh

fromZY_BRJSK

wherexh=@xh

4、DISTINCT关键字可从结果集中除去重复的行。

selectksdm,count(distinctblh)rs

fromVW_MZBRJSK

wheresfrqbetween'20031201'and'2003121024'andybjszt=2andjlztin(0,1,2)

groupbyksdm

5、TOP关键字指定返回结果集的前n行。

TOPn[PERCENT],返回前n%的记录

selecttop10ghdwmc供货单位,sum(jjje)as进价金额

fromYK_YPRKZD

wherejzrqbetween'20040101'and'2004011024'andjzbzin(1,2)andgzbz=0

groupbyghdwmc

orderby进价金额desc

注:

如果查询包含ORDERBY子句,将输出由ORDERBY子句排序的前n行(或前百分之n行)

6、INTOnew_table_name

指定使用结果集来创建新表。

new_table_name指定新表的名称。

创建一个使用IDENTITY属性的新列(selectinto),注意列名的4种写法

selectidentity(int,100,1)as序号,blh"病历号",hzxm病人姓名,性别=sex

into#temp

fromZY_BRSYK

whereryrqbetween'20040220'and'2005022124'

7、From:

指定在DELETE、SELECT和UPDATE语句中使用的表、视图、派生表和连接表。

如果表或视图存在于同一服务器的其它数据库中,应按格式database.owner.object_name如果表或视图存在于本地服务器之外的一台链接的服务器上,应按以下格式使用由四部分组成的名称:

linked_servername.database.owner.object_name

与其他服务器的连接:

sp_addlinkedserver其他服务器名。

视图提示只能用在SELECT语句中,而不能用于UPDATE、DELETE或INSERT语句。

Where中*=,=*的使用

8、WHERE子句是一个筛选,它定义了源表中的行要满足SELECT语句的要求所必须达到的条件。

只有符合条件的行才向结果集提供数据。

不符合条件的行中的数据不会被使用。

1)Between…and….的使用

Wherezjebetween0and500[0,500]等同于zje>=0andzje<=500

Wherezjenotbetween0and500>500or<0

2)常用子查询的语句

∙WHEREexpression[NOT]IN(subquery)

∙WHERE[NOT]EXISTS(subquery)

Select*

fromZY_BRJSK

wherejsrqbetween'20031201'and'2003121024'andybjszt=2andjlztin(0,1,2)

andybdmin(selectybdmfromYY_YBFLKwherepzlx='12')

或:

Select*

fromZY_BRJSKa

wherejsrqbetween'20031201'and'2003121024'andybjszt=2andjlztin(0,1,2)

andexists(select1fromYY_YBFLKbwherea.ybdm=b.ybdmandpzlx='12')

3)Like/notlike,通配符:

%、_、[]、[^]

Select*fromYK_YPRKZD

Whererkrqlike'20050101%'

9、GROUPBY子句和ALL关键字

只有在SELECT语句还包括WHERE子句时,ALL关键字才有意义。

列出所有进过货的单位:

selectghdwmc供货单位,sum(jjje)as进价金额

fromYK_YPRKZD

wherejzrqbetween'20040101'and'2004011024'andjzbzin(1,2)andgzbz=0

groupbyallghdwmc

列出满足条件的单位:

selectghdwmc供货单位,sum(jjje)as进价金额

fromYK_YPRKZD

wherejzrqbetween'20040101'and'2004011024'andjzbzin(1,2)andgzbz=0

groupbyghdwmc

10、使用HAVING子句选择行

WHERE子句用来筛选FROM子句中指定的操作所产生的行。

GROUPBY子句用来分组WHERE子句的输出。

HAVING子句从中间结果集对行进行筛选。

带聚合函数的HAVING子句

selecthzxm,sum(zje)

fromZY_BRJSK

wherejsrqbetween'20050101'and'2005011024'andybjszt=2andjlztin(0,1,2)

groupbyhzxm

havingsum(zje)>10000

不带聚合函数的HAVING子句

SELECThzxm

FROMZY_BRJSK

wherejsrqbetween'20050101'and'2005011024'andybjszt=2andjlztin(0,1,2)

GROUPBYhzxm

HAVINGhzxmLIKE'张%'

11、orderby….[ASC|DESC]

对结果集排序。

ASC和DESC关键字用于指定行是按升序还是按降序排序。

使用union时,只能对最后结果排序。

12、union

UNION运算符使您得以将两个或多个SELECT语句的结果组合成一个结果集。

使用UNION组合的结果集都必须具有相同的结构。

而且它们的列数必须相同,并且相应的结果集列的数据类型必须兼容。

UNION运算符从结果集中删除重复的行。

如果使用ALL关键字,那么结果中将包含所有行并且将不删除重复的行。

Selecthzxm,sum(zje)zje

fromZY_BRJSK

wherejsrqbetween'200312101'and'2003121024'andybjszt=2andjlztin(0,1,2)

groupbyhzxm

union

Select'合计',sum(zje)

fromZY_BRJSK

wherejsrqbetween'200312101'and'2003121024'andybjszt=2andjlztin(0,1,2)

orderbysum(zje)

二、delete命令

DELETE语法的简化形式为:

DELETEtable_or_view

[FROMtable_sources]

[WHEREsearch_condition]

1、删除全部行

Delete#temp=TRUNCATETABLE#temp

如果要删除在表中的所有行,则TRUNCATETABLE比DELETE快。

DELETE以物理方式一次删除一行,并在事务日志中记录每个删除的行。

TRUNCATETABLE则释放所有与表关联的页。

因此,TRUNCATETABLE比DELETE快且需要的事务日志空间更少。

注意droptable与delete的区别

2、在行集上使用delete

deletefrom#tempwhere…

3、在游标的当前行上使用DELETE

下例显示在名为cs_dxmdm的游标上所做的删除。

它只影响当前从游标提取的单行。

DELETEFROM#dxmdm

WHERECURRENTOFcs_dxmdm

4、据与关联表、子查询上使用delete

deleteZY_BRSYK

fromZY_BRSYKa,ZYB_BRYJKb

wherea.syxh=b.syxhanda.brzt=9

三、update命令

简单格式:

updatetable_nameset列=表达式

[FROMtable_sources]

[WHEREsearch_condition]

1、使用简单的update

UPDATEYF_YFZKC

SETdjsl=0

2、把WHERE子句和UPDATE语句一起使用

UPDATEYF_YFZKC

SETjxje=0

Whereabs(jxje)>1000000

3、通过UPDATE语句使用来自另一个表的信息

update#temp

setksmc=b.name

from#tempa,YY_KSBMKb

wherea.ksdm=b.id

4、在游标的当前行上使用update

update#dxmdm

setzje=@zje

WHERECURRENTOFcs_dxmdm

四、insert命令(表必须存在)

所提供的数据值必须与列的列表匹配。

数据值的数目必须与列数相同,每个数据值的数据类型、精度和小数位数也必须与相应的列匹配。

1、使用INSERT...SELECT插入多行

insert#mzybtemp(hzxm,pzh,jzks,jzrq,jzcs,zje,ybdm,sjh,zzbz,sfzh,zddm,bjqk)

selecthzxm,convert(varchar(17),substring(cardno,1,10)),ksdm,

substring(sfrq,1,8),1,zje-zfyje-yhje,ybdm,sjh,substring(zhbz,1,1),

substring(sfzh,1,18),zddm,substring(zhbz,2,1)

fromVW_MZBRJSKa(nolock)

wheresfrqbetween@ksrqand@jssjandybjszt=2andghsfbzin(0,1)

andsubstring(zhbz,4,1)='0'

andsubstring(zhbz,12,1)='0'

andexists(select1fromYY_YBFLKb(nolock)

whereb.ybdm=a.ybdmandb.pzlx=10)

2、使用INSERT...Values插入一行。

如果没有指定列的列表,指定值的顺序必须与表或视图中的列顺序一致。

insertinto#temp(syxh,jsxh)values(@syxh,@jsxh)

3、SETIDENTITY_INSERT表ON|OFF

允许将显式值插入表的标识列中

如果插入值大于表的当前标识值,则SQLServer自动将新插入值作为当前标识值使用。

CREATETABLEproducts(idintIDENTITYPRIMARYKEY,productvarchar(40))

GO

--Insertingvaluesintoproductstable.

INSERTINTOproducts(product)VALUES('screwdriver')

INSERTINTOproducts(product)VALUES('hammer')

INSERTINTOproducts(product)VALUES('saw')

INSERTINTOproducts(product)VALUES('shovel')

GO

--删除第三行

DELETEproducts

WHEREproduct='saw'

GO

--试图插入id=3的记录,将报错

INSERTINTOproducts(id,product)VALUES(3,'gardenshovel')

GO

--SETIDENTITY_INSERTtoON时,能插入id=3的记录.

SETIDENTITY_INSERTproductsON

GO

INSERTINTOproducts(id,product)VALUES(3,'gardenshovel').

GO

SETIDENTITY_INSERTproductsOFF

GO

第二节函数

一、聚合函数

SUM、AVG、COUNT、MAX和MIN忽略空值,而COUNT(*)不忽略。

1、count()

COUNT(*)返回组中项目的数量。

它对每行分别进行计数,包括含有空值null的行。

COUNT(ALLexpression)=count(expression)对组中的每一行都计算expression并返回非空值的数量。

COUNT(DISTINCTexpression)对组中的每一行都计算expression并返回唯一非空值的数量。

selectcount(*)总行数,

count(zlf_pt)有值的行数,

count(allzlf_pt)有值的行数,

count(distinctzlf_pt)不重复的行数

fromYY_KSBMK

总行数有值的行数有值的行数不重复的行数

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

20561613

2、sum()

sum(ALLexpression)=sum(expression)对所有的非空的值求和

sum(DISTINCTexpression)返回唯一非空值的和

例:

createtable#temp(aaint,bbmoney)

insert#tempvalues(1,null)

insert#tempvalues(2,2)

insert#tempvalues(3,2)

insert#tempvalues(4,3)

selectsum(bb),sum(allbb),sum(distinctbb)

from#temp

7.00007.00005.0000

3、avg()

avg(ALLexpression)=avg(expression)对所有的非空的值求平均值

avg(DISTINCTexpression)返回唯一非空值的平均值

createtable#temp(aaint)

insert#tempvalues(null)

insert#tempvalues(20)

insert#tempvalues(30)

insert#tempvalues(30)

selectavg(aa)from#temp--26

selectavg(distinctaa)from#temp--25

4、max()、min()

二、系统函数

1、@@IDENTITY

@@IDENTITY中包含此语句产生的最后的标识值。

若此语句没有影响任何有标识列的表,则@@IDENTITY返回NULL。

若插入了多个行,则会产生多个标识值,@@IDENTITY返回最后产生的标识值。

insertintoSF_MZCFK(jssjh,hjxh,czyh,lrrq,patid,hzxm,ybdm,zje,zfyje,yhje,zfje)

select@sjh,@hjxh,@czyh,@now,patid,hzxm,@ybdm,@zjecf,@zfyjecf,@yhjecf,@zfje

from#brxxk

if@@error<>0or@@rowcount=0

begin

select"保存收费处方出错!

"

return

end

select@xhtemp=@@identity

insertintoSF_CFMXK(cfxh,cd_idm,gg_idm,dxmdm,ypmc,ypdm,ypdw,dwxs,ykxs,ypfj,ylsj,ypsl,ts,cfts,zfdj,yhdj)

select@xhtemp,idm,gg_idm,dxmdm,ypmc,xxmdm,ypdw,dwxs,ykxs,ypfj,ylsj,

fysl,1,cfts,zfdj,yhdj

from#sfmxwherecfxh=@cfxh

if@@error<>0

begin

select"保存收费处方明细出错!

"

return

end

2、@@ERROR

Transact-SQL语句的执行时,如果语句执行成功,则@@ERROR设置为0。

若出现一个错误,则返回一条错误信息。

@@ERROR返回此错误信息代码,直到另一条Transact-SQL语句被执行。

updateSF_MZCFKsetjlzt=0,

lrrq=(casewhen@jsrq=''then@nowelse@jsrqend),

czyh=@czyh

wherejssjh=@sjh

if@@error<>0

begin

select"更新门诊处方信息出错!

"

return

end

8、@@ROWCOUNT

返回受上一语句影响的行数,直到另一条Transact-SQL语句被执行。

任何不返回行的语句将这一变量设置为0.

Select@pzlx=pzlx

fromYY_YBFLK(nolock)

whereybdm=@ybdm

if@@rowcount=0or@@error<>0

begin

select"患者费用类别不正确!

"

return

end

9、CAST和CONVERT

CAST(expressionASdata_type)

CONVERT(data_type[(length)],expression[,style])

将某种数据类型的表达式显式转换为另一种数据类型。

CAST和CONVERT提供相似的功能。

 

三、游标函数

@@FETCH_STATUS

@@FETCH_STATUS返回被FETCH语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。

0表示FETCH语句成

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1