EOS入门必备之SQL Server篇.docx
- 文档编号:15515703
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:19
- 大小:38.55KB
EOS入门必备之SQL Server篇.docx
《EOS入门必备之SQL Server篇.docx》由会员分享,可在线阅读,更多相关《EOS入门必备之SQL Server篇.docx(19页珍藏版)》请在冰点文库上搜索。
EOS入门必备之SQLServer篇
PRIMETONTECHNOLOGIES,LTD.
上海普元信息技术有限责任公司
EOS入门必备之
SQLServer篇
Nopartofthisdocumentmaybereproduced,storedinanyelectronicretrievalsystem,ortransmittedinanyformorbyanymeans,mechanical,photocopying,recording,otherwise,withoutthewrittenpermissionofthecopyrightowner.
COPYRIGHT2004byPrimetonTechnologies,Ltd.ALLRIGHTSRESERVED.
欢迎使用
本手册描述了使用普元EOS所需要掌握的SqlServer基本技能,主要是针对数据库表及数据的创建、添加、修改、删除和查询的基本操作。
本出版物包含Primeton的专利信息,它在许可协议下提供,并受版权法保护,本出版物包含的信息不包括任何产品保证。
通过您当地的Primeton代表或分部可订购出版物,或致电021-50805188订购出版物
当您发送信息给Primeton后,即授予Primeton非专有权,Primeton对于您所提供的任何信息,有权利以任何它认为适当的方式使用或散发,而不必对您负任何责任
©CopyrightPrimetonTechnologiesCorporation2002,2003.Allrightsreserved.
本书的相关文档
您可能会发现下列资料对您有用:
格式使用约定
本书对文本格式的使用有如下约定:
粗体:
表示突出显示,或可视化操作中的文字
【***】可视化操作中的选项
[***]:
Sql文件内容
1SQLServer简介
MicrosoftSQLServer是一种基于客户机/服务器的关系型数据库管理系统,它使用Transact-SQL语言在服务器和客户机之间传送,如图1-1所示。
图1-1
SQLServer用来对存放在计算机中的数据库进行组织、管理和检索。
SQLServer是一个综合的、通用的、功能极强的关系数据库语言,它包括数据定义、数据操纵、数据管理、存取保护和处理控制等多种功能。
利用表、索引、关键字、行和列等来确定存储位置。
SQLServer语言本身并不是一个很完整的编程语言,如它不支持流控制等。
它的主要特点如下:
1.一体化的特点
SQLServer语言能完成定义关系模式、录入数据以建立数据库、查询、更新、维护、数据库重构、数据库安全性控制等一系列操作要求,用SQL可以实现数据库生命期当中的全部活动。
2.统一的语法结构,多种使用方式
SQLServer有两种使用方式,一种是联机使用方式,另一种是嵌入程序方式。
大多数程序接口都采用嵌入的SQL语言。
3.高度非过程化
在SQLServer中,只需用户提出“干什么”,而无须指出“怎么干”,存取路径的选择和SQL语句操作的过程由系统自动完成。
4.语言简洁
1)数据定义语言(DataDefinitionLanguage,DDL),用于定义、撤消和修改数据库。
2)数据查询语言(QueryLanguage,QL)用于查询数据。
3)数据操纵语言(DataManipulationLanguage,DML)用于增、删、修改数据。
4)数据控制语言(DataControlLanguage,DCL)用于数据访问权限的控制。
5.Client/Server结构
SQLServer能使应用程序采取分布式客户机/服务器结构。
交互式查询、报表打印和应用程序称为数据库的“前端”,在个人机上运行,存储和数据管理的后端数据库引擎在服务器上运行,在此情况下,SQLServer作为用于与用户交互的前端工具和用于数据库管理的后端引擎之间的通信桥梁。
6.隐含的并发控制能力
SQLServer利用动态的锁定功能防止用户在查询或更新并发操作时相互之间发生冲突,动态锁定是隐含的,用户不需要关心锁定过程。
2数据表的操作
2.2表的操作
2.2.1创建表CREATETABLE
语法格式:
CREATETABLE表名[表约束]
(列名1数据类型[缺省值1,列约束1]
(列名2数据类型[缺省值2,列约束2]
………
列名n数据类型[缺省值n,列约束n]
[TABLESPACE表空间名称]
[STORAGE(存贮的子句)]
[ENABLE约束名]
[DISABLE约束名]
例如:
建立由id和name两列组成的TBL表。
CREATETABLETBL
(idchar(3)
Namechar(20))
2.2.2关键字和约束
2.2.2.1主键约束PRIMARYKEY
通过建立唯一索引保证指定列的实体完整性,在使用主键约束时,列的空值属性必须定义为NOTNULL,创建主键约束可以通过企业管理器和PRIMARYKEY子句来完成。
2.2.2.2外键约束FOREIGNKEY
FOREIGNKEY为表中一列或多列数据提供参照完整性,该约束限制插入到表中被约束列的值必须在被参照的表中已经存在
。
FOREIGNKEY可以是单列键或多列键。
2.2.2.3惟一约束UNIQUE
UNIQUE约束能够保证一列或多列的实体完整性,用于强制非主键列的唯一性。
2.2.2.4默认约束DEFAULT
DEFAULT约束用于指定一个字段的默认值,当字段值为空时,该字段中将自动添入这个默认值。
2.2.2.5检查约束CHECK
CHECK约束限制输入到一列或多列中的可能值,从而保证了数据库中的域完整性。
在CHECK约束中可以包含搜索条件,但不能包含子查询,在一个表中可以定义多个CHECK约束,对于列也可以定义多个CHECK约束,但是每个CREATTABLE语句中只能为每列定义一个CHECK约束。
2.2.2.6完整的表定义
下例显示pubs数据库中所创建的三个表(jobs、employee和publishers)的完整表定义,其中包含所有的约束定义。
/***************************jobstable***************************/
CREATETABLEjobs
(
job_idsmallint
IDENTITY(1,1)
PRIMARYKEYCLUSTERED,
job_descvarchar(50)NOTNULL
DEFAULT'NewPosition-titlenotformalizedyet',
min_lvltinyintNOTNULL
CHECK(min_lvl>=10),
max_lvltinyintNOTNULL
CHECK(max_lvl<=250)
)
/**************************employeetable**************************/
CREATETABLEemployee
(
emp_idempid
CONSTRAINTPK_emp_idPRIMARYKEYNONCLUSTERED
CONSTRAINTCK_emp_idCHECK(emp_idLIKE
'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]'or
emp_idLIKE'[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]'),
/*EachemployeeIDconsistsofthreecharactersthat
representtheemployee'sinitials,followedbyafive
digitstore_numberrangingfrom10000through99999andthenthe
employee'sgender(MorF).A(hyphen)-isacceptable
forthemiddleinitial.*/
fnamevarchar(20)NOTNULL,
minitchar
(1)NULL,
lnamevarchar(30)NOTNULL,
job_idsmallintNOTNULL
DEFAULT1
/*Entryjob_idfornewhires.*/
REFERENCESjobs(job_id),
job_lvltinyint
DEFAULT10,
/*Entryjob_lvlfornewhires.*/
pub_idchar(4)NOTNULL
DEFAULT('9952')
REFERENCESpublishers(pub_id),
/*Bydefault,theParentCompanyPublisheristhecompany
towhomeachemployeereports.*/
hire_datedatetimeNOTNULL
DEFAULT(getdate())
/*Bydefault,thecurrentsystemdateisentered.*/
)
/******************publisherstable*********************/
CREATETABLEpublishers
(
pub_idchar(4)NOTNULL
CONSTRAINTUPKCL_pubindPRIMARYKEYCLUSTERED
CHECK(pub_idIN('1389','0736','0877','1622','1756')
ORpub_idLIKE'99[0-9][0-9]'),
pub_namevarchar(40)NULL,
cityvarchar(20)NULL,
statechar
(2)NULL,
countryvarchar(30)NULL
DEFAULT('USA')
)
2.2.3修改表ALTERTABLE
1.使用ALTERCOLUMN子句修改字段定义
语法格式:
ALTERTABLE表名
ALTERCOLUMN字段名新数据类型字段长度
例如:
ALTERTABLEMyTable
ALTERCOLUMNNullCOlNVARCHAR(20)NOTNULL
2.使用ADD子句添加字段
语法格式:
ALTERTABLE表名
ADD{字段定义|字段名AS字段表达式}[,…n]
例如:
CREATETABLEdoc_exa(column_aINT)
GO
ALTERTABLEdoc_exa
ADDcolumn_bVARCHAR(20)NULL
3.使用DROPCOLUMN子句删除字段
语法格式:
ALTERTABLE表名
DROPCOLUMN字段名[,…n]
例如:
CREATETABLEdoc_exb(column_aINT,column_bVARCHAR(20)NULL)
GO
ALTERTABLEdoc_exb
DROPCOLUMNcolumn_b
2.2.4删除表DROPTABLE
语法格式:
DROPTABLE表名[,…..n]
例如:
删除数据库中的TBL表
DROPTABLETBL
2.3数据的操作
2.3.1添加INSERT
语法格式:
INSERTINTO表名[(列名1,…)]
VALUES(值1,值2,…,值n)
例如:
在TBL表中插入一条记录,id='013',name='thenameofpart013'
INSERTINTOTBL(id,name)
VALUES('013','thenameofpart013')
2.3.2删除DELETE
语法格式:
DELETE[FROM]目标表名
WHERE<条件表达式>
例如:
删除TBL表中仓库号=’1号’的记录。
DELETEFROMTBL
WHERESto_No='1号'
2.3.3修改UPDATE
语法格式:
UPDATE目标表名
SET字段名1=表达式1,字段名2=表达式2,…..字段名n=表达式n
WHERE<条件表达式>
例如:
对TBL表中仓库号=’1号’的零件价格更新为原价的2倍。
UPDATETBL
SETprice=price*2
WHERESto_No='1号'
3数据查询
SELECT语句是SQLServer中最基本和最重要的语句之一。
查询可以分为两类,一类是用于检索数据的选择查询,另一类是用于更新数据的行为查询。
SELECT语句除了用于查询外,还有其他一些用途,比如对记录进行排序、对字段进行汇总以及用检索倒的记录创建新表等。
3.2SELECT语句查询
3.2.1基本语句
语法格式:
SELECT[DISTINCT|ALL]列名
[INTO新表名]
FROM表名
[WHERE搜索条件]
[HAVING搜索条件]
[GROUPBY分组表达式]
[ORDERBY排序表达式[ASC|DESC]]
3.2.2使用SELECT子句选取字段和记录
1.选择所有列
表示选择指定表或视图中的所有列。
下面语句显示TBL表中的所有列:
SELECT*FROMTBL
2.选择部分字段
查询时可以在选择列表中指定需要显示部分的列名,而过滤掉表中不需要的列,所选列之间用逗号分开,查询结果集合中数据的排列顺序与选择列表中所指定列名排列顺序相同。
下面语句显示TBL表中的编号、名称和库存量:
SELECTid,name,store_numFROMTBL
3.设置字段别名
显示选择查询的结果时,通常在第一行显示各个输出字段的名称,为了方便阅读,可以用更容易理解的字段名称来取代原有字段。
下面语句将原表中部分的英文字段名替换为中文别名:
SELECTidas编号,nameas名称,store_numas库存量
FROMTBL
4.限制返回行数
如果SELECT语句返回的结果集合中的行数太多,可以使用TOPn选项来限制返回的数据行数,TOPn说明返回查询结果集合中的前n行数据,下面语句说明只显示TBL数据表中的前4条记录。
SELECTtop4*FROMTBL
3.3WHERE子句
1.比较运算符
在TBL表中选择编号=1和库存量不等于0的记录,并按照降序排列:
SELECT*FROMTBL
WHEREid=’1’and(store_num<>0)
OrderbyidDESC
2.范围运算符
使用BETWEEN运算符来设定范围。
在TBL表中选择库存量在30和60之间的记录:
SELECT*FROMTBL
WHEREstore_numbetween30and60
3.模式匹配符
在TBL表中选择库存量不等于0和名称为零件1的所有记录:
SELECT*FROMTBL
WHERE(store_num<>0)andnamelike‘零件1’
4.列表运算符
IN运算符用于测试给定的值是否在一个子查询或项目列表中。
在TBL表中选择库存量为30和60的记录,显示字段为名称和库存量:
SELECTname,store_numfromTBL
WHEREstore_numin(‘30’,‘60’)
5.空值运算符
空值意味着没有记录,它既不代表空格,也不代表0,空值与任何数据运算或比较时,其结果仍然为空。
在TBL中查询名称为空的记录:
SELECT*fromTBLWHEREnameisnull
6.逻辑运算符
逻辑运算符(AND、OR、NOT)在WHERE子句中连接多个查询条件,NOT用于对一个布尔表达式的值取反,它通常与LIKE、BETWEEN、IN、NULL等关键字一起使用。
如用AND查询说明在TBL表中选择编号为1,名称为螺丝的记录。
SELECT*fromTBL
WHERE(id=’1’)and(name=’螺丝’)
3.4GROUPBY子句
分组表达式是执行分组时的一个表达式,通常是一个字段名,在字段列表中指定的字段别名不能作为分组表达式来使用,在SELECT语句中,同时使用GROUPBY子句和集合函数对数据库进行分组统计。
例如:
在TBL数据库中查询编号和库存量,并按照仓库号Sto_No分组。
SELECTid,store_num
FROMTBL
GROUPBYSto_No
1.GROUPBY子句中使用WITHCUBE
在GROUPBY子句中使用WITHCUBE时,将在由GROUPBY子句提供的分组记录的基础上,针对结果集合中分组的每一种可能的集合都会返回一条汇总记录。
2.GROUPBY子句中使用WITHROLLUP
在GROUPBY子句中使用WITHROLLUP时,结果集合中除了由GROUPBY子句提供的记录外,还会将一些附加的汇总记录引入结果集合之中,各个组以分层形式汇总,排列顺序时从最低层到最高层。
3.5HAVING子句
HAVING子句用于指定一组或一个集合的搜索条件,HAVING子句与GROUPBY子句的关系和WHERE与SELECT子句的关系类型。
例如:
下列WHERE子句仅限定以高于$100的单价销售产品的订单,而HAVING子句进一步将结果限制为只包括100件以上的订单:
SELECTOrdD1.OrderIDASOrderID,
SUM(OrdD1.Quantity)AS"UnitsSold",
SUM(OrdD1.UnitPrice*OrdD1.Quantity)ASRevenue
FROMOrdD1
WHEREOrdD1.OrderIDin(SELECTDISTINCTOrdD2.OrderID
FROM[OrderDetails]ASOrdD2
WHEREOrdD2.UnitPrice>$100)
GROUPBYOrdD1.OrderID
HAVINGSUM(OrdD1.Quantity)>100
3.6ORDERBY子句
语法格式:
ORDERBY<排序表达式>[ASC|DESC]
ASC设定字段的值按照升序排列,DESC指定排序方式为降序排序。
例如:
从TBL表中检索所有记录,并按照id进行升序排列。
SELECT*FROMTBL
ORDERBYidASC
3.7子查询
子查询是嵌套在SELECT、INSERT、UPDATE或DELETE语句的WHERE子句或HAVING子句中的SELECT查询语句,它也可以嵌套在另一个子查询中。
例如:
从TBL数据表中使用子查询检索仓库号为‘1号’的零件信息以及退货数量。
SELECT*
FROMTBL
WHERE(Sto_NO=
(SELECTsto_no
FROMtbl_no
WHEREsto_no=’1号’))
3.7.1[NOT]IN子查询
[NOT]IN子查询引出的子查询的结果集合可以包含多个值,在使用IN子查询时,如果该表达式的值与此列中的任何一个值相等,则集成员测试返回TRUE,否则返回FALSE。
例如:
以下查询查找没有出版过商业书籍的出版商的名称。
SELECTpub_name
FROMpublishers
WHEREpub_idNOTIN
(SELECTpub_id
FROMtitles
WHEREtype='business')
3.7.2[NOT]EXISTS子查询
例如,要查找不出版商业书籍的出版商的名称:
SELECTpub_name
FROMpublishers
WHERENOTEXISTS
(SELECT*
FROMtitles
WHEREpub_id=publishers.pub_id
ANDtype='business')
3.7.3比较子查询
例如:
下面语句列出退货数量大于平均退货数量的原料信息:
SELECT*
FROMTBL
WHERE(ExitAmou>
(SELECTAVG(ExitAmou)
FROMTBL))
3.8使用集合函数
3.8.1SUM函数
SUM函数用于统计数值型字段的和,它只用于数值型字段,而NULL值将被忽略。
语法格式:
SUM([ALL|DISTINCT]表达式)
ALL表示SUM函数对所有字段求和
DISTINCT说明SUM函数仅对唯一的值求和。
例如:
从TBL表中查询仓库号=’1号’的零件,并计算价格总和。
SELECTSUM(DISTINCTprice)
FROMTBL
WHERESto_No='1号'
3.8.2AVG函数
AVG函数用于计算一个数值型字段的平均值,该字段中的NULL值在计算过程中被忽略。
语法格式:
AVG([ALL|DISTINCT]表达式)
例如:
从TBL表中查询仓库号=’1号’的零件,并计算价格平均值。
SELECTAVG(DISTINCTprice)
FROMTBL
WHERESto_No='1号'
3.8.3COUNT函数
COUNT函数用于统计字段中选取的项目数,或查询输出的记录行数。
语法格式:
COUNT({[[ALL|DISTINCT]表达式]|*})
1)COUNT(*):
返回组中的项目数,包括NULL值和重复的值在内。
2)COUNT(ALL表达式):
返回组中取非空值的数目。
3)COUNT(DISTINCT表达式):
针对组中的每条记录计算表达式,并返回唯一非空值的数目。
例如:
下面统计TBL数据表中的记录数
SELECTCOUNT(*)as记录总数
FROMTBL
3.8.4MAX/MIN函数
MAX、MIN函数用于返回表达式中的最大、最小值,在计算过程中遇到NULL值时予以忽略。
语法格式:
MAX|MIN([ALL|DISTINCT]表达式)
例如:
需要在TBL数据表中列出仓库号为’1号’,进货数量最多和进货数量最少的记录。
SELECTMAX(InAmou)AS最大进货量,MIN(In
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EOS入门必备之SQL Server篇 EOS 入门 必备 SQL Server
![提示](https://static.bingdoc.com/images/bang_tan.gif)