用友SQL培训资料U8U9文档格式.docx
《用友SQL培训资料U8U9文档格式.docx》由会员分享,可在线阅读,更多相关《用友SQL培训资料U8U9文档格式.docx(42页珍藏版)》请在冰豆网上搜索。
第三节连接(Join)语句16
第四节数据操作语句20
第五节Select子查询语句21
第三章SQL高级应用24
第一节创建、删除数据库和表24
第二节创建视图和索引25
第三节创建和执行存储过程、触发器和游标27
第四节系统存储过程、系统表30
第四章事件探查器33
第一节创建跟踪33
第二节事件探查器的精确跟踪37
第三节实际工作中事件探查器的应用38
附录:
40
第一章概述
SQL(StructuredQueryLanguage,结构化查询语言)是一种现今流行的数据库语言,目前主流的数据库产品都支持这种语言,如常见的MicrosoftAccess、MicrosoftSQLServer、
Oracle、Sybase、MySQL等,并且这些数据库产品都不同程度上对标准的SQL进行了扩展,以使SQL应用更为高效。
用友产品以MicrosoftAccess(如8.12A版本)或MicrosoftSQLServer(如U8以上版本)作为后台数据库,目前(8.x、U8)不支持其他的数据库产品。
第一节U8数据库简述
1.1U8数据库
用友U8系列产品的后台数据库是采用MicrosoftSQLServer。
U8系列产品的数据库按功能主要可分为三类:
A.系统数据库UFSystem;
B.账套数据库UFData_xxx_xxxx(如UFData_999_2003,其中999表示账套号,2003表示会计年度);
C.模板数据库UFModel。
其中UFSystem库用于存储一些公共系统信息,如操作员信息、账套系统信息等,UFData_xxx_xxxx库用于存储账套数据,UFModel库在新建账套时作为模板数据库使用。
每个SQLServer数据库是由两类文件组成:
一类是数据文件,包括主数据文件(扩展名为mdf)和次要数据文件(扩展名为ndf,该类文件不是必须的,U8数据库通常没有该文件);
一类是日志文件(扩展名为ldf)。
1.28.X数据库
用友早期产品以Access为后台数据库,这些产品(如8.12A)目前仍有很多用户在使用。
大部分8.X产品的系统库和账套数据库都是Access数据库类型。
每个Access数据库只对应一个文件,以mdb为扩展名。
以Access为后台数据库的产品,用Access软件可以直接打开对应的数据库文件,该数据库文件可以作为参考的数据字典使用(点击每个表的设计模式,内有详尽的字段含义解释)。
另外,以Access为后台数据库的产品安装盘中有压缩的演示账套数据库文件,直接用Winzip解压缩后,手工将该文件扩展名更改为以.mdb为结尾,就可以作为参照的数据字典使用。
1.3SQLServer和MSDE的关系
MSDE是SQLServer的一个简版,该版本是免费使用的,功能和SQLServer基本相同,只是在多用户条件下运行效率低于SQLServer产品,而且,MSDE本身没有一个可视化的操作界面,只是在后台运行,不过,SQLServer等数据库软件仍可以在远程访问控制该数据库。
虽然用友支持SQLServer的产品也支持MSDE,但用友产品需要的某些数据库高级功能则要求用户必须使用SQLServer作为后台数据库(如数据库的数据抽取功能)。
而且在实际的维护实践中,也会发现,MSDE出现异常的情况远多于SQLServer。
所以,在维护中如果遇到以MSDE作为后台数据库的情况应多加注意此方面的问题。
1.4MicrosoftSQLServer、MSDE与Access数据库的比较
MicrosoftSQLServer和MSDE支持的功能远多于Access,Access通常不支持SQL的高级功能,如:
存储过程、触发器等。
MicrosoftSQLServer配有强大的辅助工具,特别是事件探查器工具,而Access产品没有实现此类功能的工具。
另外,Access的产品的安全性也远低于SQLServer产品。
第二节常用的SQL工具简介
SQL本身是一种语言,需要在特定的环境中运行。
U8产品的MicrosoftSQLServer、MSDE以及8.12A产品的Access都为SQL提供了运行环境。
为了使8.X、U8系列产品正常运行,必须要先安装好对应的后台数据库产品(关于MicrosoftAccess和MicrosoftSQLServer如何安装,请参阅安装盘帮助文件)。
2.1MicrosoftSQLServer
SQLServer中常用的工具包括:
企业管理器、查询分析器、事件探查器等。
如图1所示:
图1
企业管理器:
可进行各种可视化的操作,功能强大,但由于其运行时消耗资源较大,所以当计算机硬件条件不好或者SQLServer负载太大时,会有操作反映迟钝等问题。
查询分析器:
是交互式图形工具,它使数据库管理员或开发人员能够编写查询、,同时执行多个查询、,查看结果、,分析查询计划和获得提高查询性能的帮助。
事件探查器:
是图形工具,使系统管理员得以监视Microsoft®
SQLServer™实例中的事件。
可以捕获有关每个事件的数据并将其保存到文件或SQLServer表中供以后分析。
2.2MicrosoftAccess
快捷方式如图1所示。
第三节数据库中的常用术语和概念
本节主要介绍一些常用的SQLServer术语和概念,更多术语请参考联机帮助中的“词汇表”内容,查询位置如图2所示。
图2
数据库(database):
为特定目的(如搜索、排序和重新组织数据)而组织和提供的信息、表和其它对象的集合。
数据库存储在文件中。
如:
UFData_999_2003就是一个数据库。
表(table):
一种二维数据对象,由行和列组成,用于存储关系数据库中的数据。
每个表存储有关由数据库建模的一类对象的信息。
例如,某个教育数据库将具有一个教师表、一个学生表和一个课程表。
字段(field):
存储单个数据值的窗口或记录中的某个区域。
某些数据库(如MicrosoftAccess)将字段用作列的同义词。
如Accinformation表中的cSysID字段。
记录(record):
视作一个单元信息的一组相关字段(列)。
在SQL数据库中记录更经常被称作行。
第四节SQL语法格式说明
在SQLServer联机帮助中,可看到如下语句语法:
SELECT[ALL|DISTINCT]
[TOPn[PERCENT][WITHTIES]]
<
select_list>
<
:
:
=
{*
|{table_name|view_name|table_alias}.*
|{column_name|expression|IDENTITYCOL|ROWGUIDCOL}
[[AS]column_alias]
|column_alias=expression
}[,...n]
如何理解上句中的各种符号的涵义呢?
在联机帮助中搜索“Transact-SQL语法规则”,会找到如图3所示内容,其中包含了详细的SQL语法符号的具体涵义。
图3
本章小结:
本章只是简要介绍了一些比较基础的术语和概念,目的是使读者对SQLServer有个总体的印象,以便能有效的进行后续的学习。
更多的内容还请参阅联机帮助。
第二章SQL基础应用
让我们从Select语句开始对SQL语法的学习。
本专刊中所使用的SQL语句均在SQLServer查询分析器中执行。
对SQL语言的学习,关键是要边学习边实践,读者可以在SQLServer查询分析器中实际练习本专刊提供的语句。
Select语句的功能为从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列,该语句包含众多的子句,功能强大,使用灵活。
下面先简要说明在SQLServer查询分析器中执行SQL语句的步骤:
第一步:
运行查询分析器,如图3所示:
第二步:
执行选中待操作的数据库语句。
如图3所示:
选中useufdata_887_2004后,点击绿色箭头(或直接按F5)执行,该语句中,use为连接目标数据库的SQL关键字,ufdata_887_2004是要进行相应操作的目标数据库。
第三步:
执行相应的SQL语句(如图3中的select*fromaccinformation语句)。
第一节简单的SELECT查询
在SQLServer的查询分析器中执行如下两句SQL语句:
USENorthwind
SELECT*FROM[OrderDetails]
执行该语句返回OrderDetails表中包含所有列的记录。
这两句SQL语句也可以合并为一条语句:
SELECT*FROMNorthwind..[OrderDetails]
Northwind..[OrderDetails]表示[OrderDetails]表是Northwind数据库中的表,使用这种形式,就不用再提前连接数据库了(即不用使用use语句来连接数据库)。
由于上面语句中表名OrderDetails两个单词之间存在空格,所以使用中括号,如果表名中不存在空格,如表名为Orderdetails,则中括号可以省略。
第二节Select语句中的常用子句及函数
2.1SQL中函数的使用
在SQL中的函数可以执行一些储如对某一列进行汇总或将一个字符串中的字符转换为大写的操作。
比较常用的函数有聚合函数、日期与时间函数、数学函数、转换函数和字符函数等,具体内容参见附录。
在这里以一个最常用的聚合函数为例。
sum()就如同它的本意一样,返回某一列的所有数值的和。
可以到查询分析器中执行如下语句(求数量的总和):
SELECTsum(quantity)FROMNorthwind..[OrderDetails]
此处必须指定要合计的具体列而不能使用*,并且该列必须是数值型。
2.2Select语句的常用子句
Select中的常用子句包括:
Where,OrderBy,Groupby,Having,Join等。
Join语句会在第三节重点讲解。
本节主要讲解前四个子句的用法。
2.2.1Where子句
Where子句的作用是指定查询返回行的条件。
返回Northwind数据库中OrderDetails表中的数量(quantity)字段值大于100的记录,SQL语句可写为:
SELECT*FROMNorthwind..[OrderDetails]Wherequantity>
100
2.2.2OrderBy子句
OrderBy子句是用来指定在SELECT语句返回的列中所使用的排序次序。
根据某一列排序(如OrderID列),SQL语句可写为:
SELECT*FROM[OrderDetails]ORDERBYOrderID
2.2.3GroupBy子句
GroupBy子句主要和函数连用(如sum函数),按指定列汇总。
返回Northwind数据库中OrderDetails表中,productID字段相同的数量之和,SQL语句可写为:
SELECTProductID,sum(quantity)FROMNorthwind..[OrderDetails]GroupByProductID
2.2.4Having子句
Having子句一般要和GROUPBY子句连用。
上句中要再加一个条件,数量之和大于1000的返回记录,SQL语句可写为:
SELECTProductID,sum(quantity)FROMNorthwind..[OrderDetails]GroupByProductIDHavingsum(quantity)>
1000
2.2.5Where子句和Having子句的区别
Where子句和Having子句的主要区别:
和GroupBy连用时,Where后面的条件是先排除再进行GroupBy汇总;
而Having是在GroupBy汇总后,再用后面的条件进行筛选。
另外Having语句后的条件可以是聚合函数(如sum函数、Max函数),而where后不能接聚合函数。
如下面的语句:
如果用Where语句后加相同筛选条件则无法实现目标功能。
第三节连接(Join)语句
Join子句的主要作用,就是将两个表横向连接起来。
Join分为内连接和外连接。
内连接为[Inner]Join(默认形式,Inner可以省略);
外连接分为三个LeftOuterJoin、RightOuterJoin、FullOuterJoin(其中的Outer可以省略)。
下面举一个例子来说明Join子句的用法。
有两个表father和son结构如下(其中father表的Fid字段和Son表的Fid字段是对应的):
father表
Fid
Name
1
A
2
B
3
C
Son表
Sid
Ason1
Ason2
Ason3
4
Cson1
5
Cson2
6
Dson1
3.1使用内连接语句InnerJoin连接
InnerJoin返回两个表中匹配的行。
两个表中不匹配的行不在结果中显示。
如果未指定联接类型,则该连接形式为默认形式。
在SQLServer查询分析器中执行如下语句:
Select*FromfatherJoinsonOnfather.fid=son.fid
结果如下:
3.2使用左连接语句LeftOuterJoin连接
LeftOuterJoin指定在结果集中除包含左右表中匹配的数据外,还返回左表中所有不满足联接条件的行,且右表中相应字段值为NULL。
其中Outer可以省略,但Left和Join关键字不可省略。
Select*FromfatherLeftJoinsonOnfather.fid=son.fid
结果如下(注意下表中的NULL):
NULL
Select*fromfatherleftjoinsononfather.fid=son.fidwhereson.nameisnull
实现的功能为:
找出在father表中有,而在son表中没有对应的记录。
3.3使用右连接语句RightOuterJoin连接
RightOuterJoin语句和LeftOuterJoin语句的用法原理相同。
RightOuterJoin语句是在结果集中除包含左右表中匹配的数据外,还返回右表中所有不满足联接条件的行,且左表中相应字段值为NULL。
其中Outer可以省略,但Right和Join关键字不可省略。
Select*FromfatherRightJoinsonOnfather.fid=son.fid
Select*fromfatherRightjoinsononfather.fid=son.fidwherefather.nameisnull
找出在Son表中有,而在father表中没有对应的记录。
3.4使用全连接语句FullOuterJoin连接
FullOuterJoin是指定在结果集中包含左表或右表中不满足联接条件的行,并将对应于另一个表的输出列设为NULL。
这是对通常由INNERJOIN返回的所有行的补充。
其中Outer可以省略,但Full和Join关键字不可省略。
Select*FromfatherFullJoinsonOnfather.fid=son.fid
7
Select*fromfatherFulljoinsononfather.fid=son.fidwherefather.nameisnullOrson.nameisnull
实现的功能为:
找出在Son表中有,而在father表中没有对应的记录以及在Father表中有,而在son表中没有对应的记录。
3.5Join子句小结
在U8产品中,大量使用了InnerJoin、LeftJoin、RightJoin和FullJoin子句。
Join语句以其灵活的应用方式,可以方便的实现各种的复杂查询功能。
有些简单的功能也能用另外的一个子句:
IN子句可以实现,但IN子句实现的功能要比Join语句简单很多。
因此一定要重点学习Join语句的各种灵活使用的方法。
In子句会在Select语句子查询语句中讲解。
3.6Union子句的用法
Join子句是用来将两个表横向连接起来组成一个新表,而Union子句是将两个表纵向连接起来组成一个新表。
当然,Union纵向连接两个表是有限制条件的:
两个表的列数相等,且对应列的类型兼容(可以简单的理解为类型相同)。
具体的Union语法请查询联机帮助。
第四节数据操作语句
数据操作语句包括INSERT、UPDATE和DELETE等
4.1插入InsertInto子句使用方法
可以使用INSERTINTO在当前表中创建新行。
INSERTINTOpubs..titles
(title_id,title,type,pub_id,price)
VALUES('
BU9876'
'
CreatingWebPages'
business'
1389'
29.99)
Pubs..titles是插入操作的目标数据表,title_id、title、type、pub_id、price是目标数据表的列名字,Values关键字后面是要插入对应列的具体数据。
4.2DELETE删除子句使用方法
DELETE从表中删除行。
为了尽可能的减少误操作最好在执行delete语句之前,先执行对应的select语句,以确定Where后面条件的准确性。
在SQLServer查询分析器中执行如下语句(删除刚才插入的记录):
select*frompubs..titleswheretitle_id='
deletefrompubs..titleswheretitle_id='
4.3UpDate子句使用方法
UPDATE子句是用于更改表中的现有数据。
为了尽可能的减少误操作最好在执行UPDATE语句之前,先执行对应的select语句,以确定Where后面条件的准确性。
在SQLServer查询分析器中执行如下语句(更改刚才插入的记录,如果已经删除,请重新用InsertInto插入语句插入相应的数据):
sel