第一部分
系统数据库功能简介
一、Master数据库:数据库记录了一个SQLServer系统的所有系统信息,这些信息主要有:A、所有的登录信息B、系统设置信息C、SQLServer初始化信息D、系统中其它系统数据库和用户数据库的相关信息,包括其主文件的存放位置等;二、Model数据库:是所有用户数据库和Tempdb数据库的创建模板,当创建数据库时系统会将Model数据库中的内容复制到新建的数据库中去。A、数据库的最小容量B、数据库选项设置C、经常使用的数据库对象,如用户自定义的数据类型函数规则缺省值等;三、Msdb数据库:存储计划信息与备份和恢复相关的信息。四、五、Tempdb数据库:临时的表和存贮过程,在此数据库上数据操作比别的数据库要快两例示例数据库pubs和northwind为学习工具,帮助的代码都可运行。
第二部分
一、创建数据库:1、格式:
创建和管理数据库
Createdatabase数据库名On[Primary](Name=逻辑文件名,Filename=物理文件名,Size=文件起始大小,Maxsize=文件最大容量,Filegrowth=文件增量),……Filegroup文件组名(Name=逻辑文件名,Filename=物理文件名,Size=文件起始大小,Maxsize=文件最大容量,Filegrowth=文件增长容量)……Logon(Name=逻辑文件名,Filename=物理文件名,Size=文件起始大小,Maxsize=文件最大容量,Filegrowth=文件增长容量)
……
-1-
说明:(1)Primary:指定下面文件为主文件组的文件。可省略。(2)Filename:指定文件的实际存储位置。(3)Size:指定文件的起始大小(512K/1M)。(4)Maxsize:指定文件可达到的最大容量。(5)Filegrowth:定义的文件的增量。文件的增量设置不能超过Maxsize设置。可以指定一个确切的增长数值,也可以指定增长的百分比(起始值的百分比),默认为10%。(10%/1M)(6)Logon:指定下面为日志文件。(7)主要数据文件扩展名*.Mdf,次要数据文件扩展名*.ndf,日志文件扩展名*.ldf2、实例:创建带有多个文件组的数据库CreatedatabasebookOnPrimary(Name=book_mdf,Filename='d:\books\book_mdf.mdf',Size=3,Maxsize=30,Filegrowth=3),Filegroupgroup1(Name=book_ndf1,Filename='d:\books\book_ndf1.ndf',Size=2MB,Maxsize=20MB,Filegrowth=25%),Filegroupgroup2(Name=book_ndf2,Filename='d:\books\book_ndf2.ndf',Size=4,Maxsize=30,Filegrowth=4)Logon(Name=book_ldf1,Filename='d:\books\book_ldf1.ldf',Size=5,Maxsize=40,Filegrowth=5),(Name=book_ldf2,Filename='d:\books\book_ldf2.ldf',Size=6,Maxsize=60,Filegrowth=30%)二、修改和删除数据库:
1、修改数据库:
-2-
(1)添加数据文件:a)格式:Alterdatabase数据库名AddFile(Name=逻辑文件名,Filename=物理文件名,Size=文件起始大小,Maxsize=文件最大容量,Filegrowth=文件增量)[ToFileGroup文件组名]
b)说明:ToFileGroup:指定添加的数据文件到哪个文件组中,该文件组必须存在,默认为主文件组。c)实例:Alterdatabasestudentaddfile(Name=student_ndf,Filename='d:\sql\student_ndf.ndf',Size=1,Maxsize=5,Filegrowth=1)(2)添加日志文件:
a)格式:Alterdatabase数据库名AddLogFile(Name=逻辑文件名,Filename=物理文件名,Size=文件起始大小,Maxsize=文件最大容量,Filegrowth=文件增量)
b)实例:AlterdatabasestudentAddLogFile(Name=student_ldf1,Filename='d:\sql\student_ldf1.ldf',Size=4,Maxsize=40,Filegrowth=15%)(3)添加文件组:
a)格式:Alterdatabase数据库名AddFilegroup文件组名。
b)实例:AlterdatabasestudentAddFilegroupgroup1向该文件组中添加文件AlterdatabasestudentAddFile(Name=student_ndf2,Filename='d:\sql\student_ndf2.ndf',Size=3,Maxsize=30,Filegrowth=3)
-3-
ToFilegroupgroup1(4)修改文件(数据文件和日志文件):
a)格式:Alterdatabase数据库名ModifyFile(Name=逻辑文件名,[Size=新的文件大小,][Maxsize=将要达到的容量,][Filegrowth=修改后的增量])
b)说明:修改数据文件和日志文件的格式是相同的,但逻辑文件名和物理文件名不能修改。在修改文件时,必须指定文件的逻辑名,用来标识将要修改的文件。而不必指定文件的物理名,否则将出现错误。如果指定修改文件的Size,则新的文件大小必须比当前文件大小要大。而修改文件的Maxsize和Filegrowth时,数值可以增大,也可以和原来的相同,也可以减小。c)实例:AlterdatabasestudentModifyFile(Name=student_ldf1,Filegrowth=20%)(5)删除文件:
a)格式:Alterdatabase数据库名RemoveFile文件名
b)说明:不能删除主要数据文件和主要日志文件。c)实例:AlterdatabasestudentRemoveFilestudent_ldf1(6)删除文件组:
a)格式:Alterdatabase数据库名RemoveFilegroup文件组名
b)说明:要删除的文件组中不能包含数据文件。c)实例:AlterdatabasestudentRemoveFilestudent_ndf2AlterdatabasestudentRemoveFilegroupgroup12、删除数据库:
(1)格式:Dropdatabase数据库名
(2)实例:Dropdatabasestudent三、设置数据库选项:
1、格式:SP_dboption数据库名[,‘选项名’[,ture|false]]
2、说明:SP_dboption:系统的存储过程(systemprocedure),可以通过它设置数据库选项,它支持对所有可用的数据库选项进行设置。a)如果只设置{SP_dboption数据库名},那么将显示在本数据库中设置为True的选项。b)如果设置{SP_dboption数据库名,‘选项名’},那么将显示指定的选项当前处于什么状态(ON或者OFF)3、实例:将student数据库的readonly选项设置为True,即打开此选项。常用三项(readonly|singleuser|dbouseonly)SP_dboptionstudent,'readonly','true'四、压缩数据库:有时,人们可能为预期有一定程度活动的数据库分配了太多的空间,当意识到分配了太多空间时,可能决定压缩分配的空间大小。SQLSERVER提供三种可以压缩数据库大小的方法,autoshrink数据库选项,“企业管理器”和“数据库一致性检查器(DBCC)”
-4-
命令。1、使用DBCCShrinkdatabase压缩数据库:DBCCShrinkdatabase命令在默认情况下会对数据库的数据和日志部分都进行压缩。如果您只想减少数据和日志部分,则您必须首先压缩整个数据库,然后使用Alterdatabase语句来增加数据库的数据或日志部分。a)、格式:DBCCShrinkdatabase(数据库名,压缩后可使用的百分比,[NOTRUNCATE|TRUNCATEONLY])b)、说明:NOTRUNCATE:不会将可用的空间释放给操作系统,而是留给数据库文件。TRUNCATEONLY:将数据文件未用的空间释放给操作系统。c)、实例:DBCCShrinkdatabase(student,20,TRUNCATEONLY)2、使用“企业管理器”压缩数据库:有两种方式:a)在企业管理器中,选中要压缩的数据库,点击鼠标右键,点击属性,从弹出的“数据库属性”的对话框中选中“选项”标签,在复选框中选中“自动压缩”选项即可。b)在企业管理器中,选中要压缩的数据库,点击鼠标右键,“所有任务”选中,点击“收缩数据库”,填充相应的选项即可。
第三部分
一、数据类型:
存储数据
指定列、数据存储参数和局部变量的数据特性。数据按照数据类型存储在列中。数据类型可以分为两大类:1、系统数据类型:是SQLSERVER支持的内置数据类型。1)字符型:char、nchar、varchar、nvarchar、text、ntext。a)char:固定长度的非Unicode字符数据,最大的长度为8000字符。b)nchar:固定长度的Unicode数据,最大的长度为4000字符。c)varchar:可变长度的非Unicode数据,最大的长度为8000字符。d)nvarchar:可变长度的Unicode数据,最大的长度为4000字符。e)text:可变长度的非Unicode数据,最大的长度为2^31-1个字符。f)ntext:可变长度的Unicode数据,最大的长度为2^30-1个字符对于定义为char或nchar的列,SQLSERVER将用字符串来填满指定的字节数。定义为varchar或nvarchar的列只存储输入的实际长度,可能舍去尾部空间。SQLSERVER处理尾部空间,取决于SETANSI_PADDING,以及该列是固定长度还是可变长度。
根据SETANSI_PADDING值处理尾部空间
-5-
ANSI_PADDING
char和nchar串被空格填充到列的长度串被空格填充到列的长度
Varchar和nvarchar串未被空格填充到列的长度,尾部空间被保留串未被空格填充到列的长度,串未被空格填充到列的长度,尾部空间被截掉串未被空格填充到列的长度,
ONOFF
2)日期和时间型:smalldatetime、datetime。a)smalldatetime:从1900年1月1日到2079年6月6日,精确到1分钟。b)datetime:从1753年1月1日到9999年12月31日,精确到三百分之一秒,即3.33毫秒。3)数值型数据类型:A、整型:smallint、int、tinyint。a)smallint:从-2^15到2^15-1。b)int:从-2^31到2^31-1。c)tinyint:从0到255。B、近似数字数据类型:float和real。a)float:浮点精度数字数据,从-1.79E+308到1.79E+308。b)real::浮点精度数字数据,从-3.40E+308到3.40E+308。C、精确数字数据类型:decimal和numeric。a)decimal:不带符号的整数,按10进位。b)numeric:decimal(十近制)的同义词,可带小数(numeric(3,2)—共有三位数,其中有两位是小数,e.g.1.23;有最大值问题0-9正确,10报错)D、货币数据类型:money和smallmoney。a)money:从-2^63到2^63-1,精确到每个货币单位的万分之一。b)smallmoney:从-214,748.3648到+214,748.3647,精确到每个货币单位的万分之一。4)逻辑数据类型:bit。Bit:整形数据,值为1或0。2、用户自定义类型:用户可以通过两个系统存储过程创建和删除用户定义类型。(它们不是真正的新数据类型,而像是一种复合型数据类型或结构。)Sp_addtype过程创建用户定义的数据类型,Sp_droptype过程删除定义的数据类型。创建自定义的数据类型:(1)、格式:Sp_addtype自定义数据类型名,系统的数据类型,’[null|notnull]’(2)、说明:A、用户自定义的数据类型是基于系统的数据类型创建的。B、[null|notnull]:指定该列是否为空。默认为null。C、如果系统数据类型包括圆括弧,必须用引号把它括起来。(3)、实例:Sp_addtypebirthday,datetime,’notnull’Createtablestu1(sidint,sbirthdaybirthday)删除自定义的数据类型:(1)、格式:[Exec]sp_droptype自定义的数据类型。(2)、实例:[Exec]sp_droptypebirthday。注意:我们还可以通过企业管理器创建自定义的数据类型。首先,选中一个数据库,点击右键,选中“新建”,从弹开的菜单中选中“用户定义的数据类型”,在打开的窗体中填充相应的选项即可。
-6-
二、表操作:表操作
1、创建表:(1)、格式:Createtable表名(字段名1数据类型,………字段名n数据类型)(2)说明:表名的定名原则要遵循标识符的定名原则。、字段和字段之间用逗号隔开。(3)、实例:UsebookgoCreatetablebook(bookidint,booknamevarchar(10))2、修改表:(1)、增加字段:a)、格式:Altertable表名Add字段名字段类型b)、实例:Altertablebookaddprovideridvarchar(10),addressvarchar(20)(2)、修改字段:a)格式:Altertable表名Altercolumn字段名字段类型b)实例:AltertablebookAltercolumnaddressvarchar(10)(3)、删除字段:a)格式:Altertable表名Dropcolumn字段名b)实例:Altertablebookdropcolumnaddress3、删除表:(1)、格式:Droptable表名(2)、说明:把不再起作用的表从数据库中删除。(3)、实例:Droptablebook
三、数据完整性:是通过实现过程数据完整性和声明数据完整性来强制执行的。数据完整性
1、Identity:identity属性可以生成唯一标识表中每一行的连续值。1)格式:Identity(初始值,增量)2)实例:Createtabletab1(idintidentity(1,1),namevarchar(10))3)说明:一个表中只能有一个identity标识的列,字段必须是整型。不能更新定义有identity属性的列。不能向定义有identity属性的列赋null值或附加默认约束。2、Uniqueidentifier:使用Uniqueidentifer和Newid函数也可以生成列的唯一值,与Identity属性类似。如果创建的列是uniqueidentifer数据类型,则必须使用newid函数为它生成新值。实例:Createtabletab2(iduniqueidentifier,namevarchar(10))插入值:insertintotab2values(newid(),'mary')createtables(stuidintidentity(2,2),ageuniqueidentifier)insertintotab2values('mary',newid())3、使用约束:(1)主键(primarykey):唯一标识每一行。1)说明:一个表中只可以定义一个主键。
-7-
不能在主键列中输入null值。最多可定义16列作为主键。定义之后,则不能禁用primarykey约束.2)实例:A、创建单一主键:Createtabletab3(idintprimarykey,bidint)B、创建复合主键:Createtabletab4(idint,bidint,constraintpk_id_bidprimarykey(id,bid))
(2)外键(foreignkey):Foreignkey定义列值与另一个表的Primarykey相匹配的列。1)说明:Foreignkey约束必须引用另一个表的Primarykey或Unique约束。相关表中定义为主键的所有列必须作为Foreignkey所包含在当前表中。如果使用Withnocheck选项,将不会验证表中的现有数据。2)实例:Createtabletab5(cidintprimarykeynotnull,idint,foreignkey(id)referencestab3(id))(3)CHECK约束:根据指定值测试列中的输入值。每次再列中插入或更新数据时均要进行这一测试。1)说明:可以为Check约束定义Where字句中的类似条件,但它们不能包含子查询。Check约束条件可以引用同一个表中的列。Check约束条件必须对布尔表达式求值。可以绑定有规则的列定义Check约束2)实例:createtabletab6(idint,sexchar(2)constraintchk_tab6_sexcheck(sexin('m','w')))(4)默认约束(default):此约束用于在用户未提供列值的情况下,提供一个自动添加的列值。1)说明:一个表中只能有一列定义有Default约束。不能在数据类型为Timestamp的列或具有Identity属性的列中定义Default约束。2)实例:Createtabletab7(idint,addressvarchar(20)constraintDef_tab7_adddefault'吉林省长春市')或者Altertabletab7addconstraintdef_tab7_iddefault100forid(5)唯一性约束(Unique):在列中应用unique约束以确保列中不输入重复值。列中所有行的值均不相同。1)说明:可以向表中的多列应用unique约束。向现有表应用unique约束时,一直会验证现有数据。
-8-
可以向notnull列应用unique约束,但仅有其中一行能包含null值(候选建)。2)实例:Createtabletab8(idintunique)或者Createtabletab9(idint)Altertabletab9addconstraintunq_idunique(id)(6)删除约束:Altertable表名dropconstraint约束名实例:Altertabletab9dropconstraintunq_id
第四部分
处理数据
第一节TRANSACT—SQL语言—
一、Transact-SQL语言介绍:A、SQL(structuredquerylanguage)语言是一种结构化的查询语言。它的功能包括查询、操作、定义和控制四个方面。它是一种综合的、通用的、功能强大的关系数据库语言;B、Transact-SQL:是SQL语言的一种版本,并且只能在SQLSERVER上使用。TSQL是SQLSERVER功能的核心。不管应用程序的用户界面是什么形式,只要和数据库服务器连接最终都必然体现为Transact-SQL.二、插入数据:可以使用不同的INSERT语句向表或视图添加全部列数据或只带一部分列数据的行。1、插入单行:语法:Insertinto表名(字段清单)values(列值)实例:insertintostudentvalues(4,’mike’,5,’男’)2、插入多行:语法:Insertinto表名select语句实例:Createtablestu(snovarchar(10),snamevarchar(10),classint,sexchar(2))Insertintostuselect*fromstudent三、修改数据:可以对以前添加到表中的数据进行修改。UPDATE语句用来更改现有行中的数据,可以是添加新数据,也可以是修改现有的数据。语法:Update表名set字段1=列值1,字段2=列值2,……字段n=列值nwhere条件实例:insertintostudentvalues(5,'jack',6,'男')select*fromstudent;updatestudentsetclass=5wherestuno=5
-9-
select*fromstudent;四、删除表中的数据:可以使用DELETE语句删除不在起作用的数据。语法:Deletefrom表名where条件实例:Deletefromstudentwherestuno=5五、检索数据:是数据库最频繁执行的活动。在SQL中,使用SELECT语句可以在需要的表单中检索数据。格式:Select[All|Distinct]字段表列from表名[Where查询条件][Groupby字段表列(分组)[Having分组条件(用于已分组的结果)]][Orderby字段表列[Asc(升序)|Desc(降序)]]实例:UsestudentgoCreatetablestudent(stunointprimarykey,stunamevarchar(10)notnull,Classint,sexchar(2)check(sexin(‘男’,’女’)))插入值:insertintostudentvalues(1,'tom',5,'男')insertintostudentvalues(2,'rose’,6,'女')insertintostudentvalues(3,'smith',6,'男')insertintostudentvalues(4,'mary',5,'女')1、基本语句检索数据:全表查询:Select*fromstudent选择字段查询:Selectstuno,stunamefromstudent排列数据:Selectstuname,classfromstudentorderbystunodesc消除重复项:Selectclassfromstudent|Selectdistinctclassfromstudent约束结果:Selectstunamefromstudentwherestuno=12、选择语句检索数据:(1)比较运算符:<小于>大于<=小于等于>=大于等于<>或!=不等于实例:Selectstunamefromstudentwhereclass<>2(2)between……and……或notbetween……and……运算符:between后是数值的下限,and后是数值的上限。between……and……包括上下限。notbetween……and……包括上下限。(上下限以外的值,包括上下限)实例:Select*fromstudentwherestunobetween2and4(3)In运算符:查找属性值属于指定集合的元组。实例:Select*fromstudentwherestunoin(1,3,4)(4)like运算符:属于字符串匹配条件查询。有四个通配符:a)‘_’(下划线):代表任意单个字符。
-10-
实例:Select*fromstudentwherestunamelike‘t_m’|‘_h’|‘f__h’|‘_d_’b)%(百分号):代表任意长度的字符串。实例:Select*fromstudentwherestunamelike‘%m’|‘m%’|‘%m%’c)[](方括号):范围操作符号。’[a-h]%’d)^(角号):不在此范围符号。[^a-h]%e)escape转意字符。(5)is[not]null运算符(未知值):实例:Select*fromstudentwhereclassisnotnull(6)and或者or运算符:多重条件查询。实例:Select*fromstudentwherestuno=1orstuno=2orstuno=3Select*fromstudentwherestuno=1andstuname=’tom’3、其它选择:(1)使用常量:实例:Select‘’,stunamefromstudent(2)计算列:实例:Selectstuno,class+2fromstudent(3)给结果集起别名:两种方式:a、字段名as别名b、别名=字段名实例:Select‘’=stuname,sexas‘性别’fromstudent4、SQL函数:在SQL中,函数对数据或数据组执行操作,然后返回需要的值。函数表达式可以出现在SELECT列表中,或者在任何允许出现的位置上。SQL包含了七种函数:聚合函数:返回汇总值。转型函数:将一种数据类型转换为另外一种。日期函数:处理日期和时间。数学函数:执行算术运算。字符串函数:对字符串、二进制数据或表达式执行操作。系统函数:从数据库返回在SQLSERVER中的值、对象或设置的特殊信息。文本和图像函数:对文本和图像数据执行操作。A.聚合函数:它对其应用的每个行集返回一个值。函数AVG(表达式)COUNT(表达式)COUNT(*)MAX(表达式)MIN(表达式)SUM(表达式)返回值返回表达式中所有的平均值。仅用于数字列并自动忽略NULL值。(int|numeric)返回表达式中非NULL值的数量。可用于数字和字符列,忽略NULL值。返回表中的行数(包括有NULL值的列)。返回表达式中的最大值,忽略NULL值。可用于数字、字符(ASCII码值)和日期时间列。返回表达式中的最小值,忽略NULL值。可用于数字、字符和日期时间列。返回表达式中所有的总和,忽略NULL值。仅用于数字列。(int|numeric)
B.转型函数:有CONVERT和CAST两种。CONVERT实例:Selectconvert(varchar(10),stuno)asstuno,stunamefromstudentCAST实例:Selectcast(stunoasvarchar(10))asstuno,stunamefromstudent
-11-
注意:如果没有指定表达式转换后的所得到的数据类型的长度,则SQLSERVER自动提供的长度为30。转换为位(bit)类型时,会将任何非零值转换为1。转换为money或smallmoney类型时,假定货币单位为整数。仅当char或varchar数据类型表示数字时,可以转换为整数数据类型。将char或varchar数据类型转换为money类型时,可包含小数点和美元符号($)。将char或varchar数据类型转换为浮点或实数类型时,可包含指数符号。如果对新的数据类型的而言值过长,则值将被截断。可以显示的方法将Text列转换为char或varchar列,以及将image列转换为binary或varbinary列。但是,不能超过255个字符。C.日期函数:由于不能直接执行算术函数,所以日起函数就十分有用。它可以帮助您析取出日期值中的天、月和年,这样就可以分别处理它们。在SQL中,日期的表示方法及有效范围,如下:日期部分年季度月一年中的天一月中的天一周中的天日期函数如下:函数GETDATE()当前的系统日期。返回值缩写YyQqMmDyDdDw值1753-99991-41-121-3661-311-7日期部分周小时分钟秒毫秒缩写wkhhmissms值1-530-230-590-590-999
DATEAD(datepart,number,date)返回带有指定数字(number)的日期(date),该数字添加到指定的日期部分(datepart)DATEDIFF(datepart,date1,date2)返回两个日期中指定的日期部分之间的差值。DATENAME(datepart,date)DATEPART(datepart,date)D.返回日期中日期部分的字符串形式。返回日期中指定的日期部分的整数形式。
数字函数:对数字值执行代数运算。函数返回值返回数值表达式的绝对值。返回角(以弧度表示)它的余弦值近似于指定的浮点表达式。,返回角(以弧度表示)它的正弦值近似于指定的浮点表达式。,返回角(以弧度表示)它的正切值近似于指定的浮点表达式。,返回角(以弧度表示),它的正切值在两个近似的浮点表达式之间。返回大于或等于数值表达式的最小整数。返回以浮点表达式表示的近似于指定角度(以弧度表示)的
ABS(num_expr)ACOS(float_expr)ASIN(float_expr)ATAN(float_expr)ATN2(float_expr1,float_expr2)GEILING(num_expr)COS(float_expr)
-12-
余弦三角函数的值。COT(float_expr)DEGREES(num_expr)EXP(float_expr)FLOOR(num_expr)LOG(float_expr)LOG10(float_expr)PI()POWER(num_expr,y)RADIANS(num_expr)RAND([seed])ROUND(num_expr,length)SIGN(num_expr)SIN(float_expr)SQUARE(float_expr)SQRT(float_expr)TAN(float_expr)返回以浮点表达式表示的近似于指定角度(以弧度表示)的余切三角函数的值。返回数值表达式表示的弧度值对应的度值。根据指定的近似浮点表达式,返回指数值。返回小于或等于数值表达式的最大整数根据指定的近似浮点表达式,返回自然对数值。根据指定的近似浮点表达式,返回以10为底的对数。返回常量值3.141592653589793返回幂为y的数值表达式的值。返回数值表达式表示的度值对应的弧度值。随机返回的0到1之间的近似浮点值,可以对seed指定为整数表达式(可选)。对数值表达式截取指定的整数长度,返回四舍五入后的值。对正数执行+1操作,对负数和零执行-1操作。返回以浮点表达式表示的近似于指定角度(以弧度表示)的正弦三角函数的值。返回浮点表达式的平均值。返回指定的近似浮点表达式的平方根。返回以浮点表达式表示的近似于指定角度(以弧度表示)的正切三角函数的值。
E.
字符串函数:可用于binary和varbinary数据类型列,但主要用于char和varchar数据类型。函数返回值返回值返回两个表达式的组合形式的字符串。返回表达式最左边字符的ASCⅡ代码值。返回0到255之间的整数表达式的ASCⅡ字符值。如果输入的值不在有效范围内,则返回NULL。返回字符表达式中指定模式的起始位置。根据比较两个字符表达式的相似度,返回1到4之间的值。4表示匹配度最佳。返回字符表达式的长度。将字符表达式全部转换为小写。返回删除掉前面空格的字符表达式。返回表达式中模式第一次出现的起始位置。返回0表示不存在模式形式。返回重复指定次数的字符表达式产生的字符串。反转字符表达式。返回从字符表达式最右端起根据指定的字符个
Expr1+expr2ASCⅡ(char_expr)CHAR(int_expr)
CHARINDEX(’pattern’,char_expr)DIFFERENCE(char_expr1,char_expr2)LEN(char_expr)LOWER(char_expr)LTRIM(char_expr)PATINDEX(’%pattern%’,expr)REPLICATE(char_expr,int_expr)REVERSE(char_expr)RIGHT(char_expr,int_expr)
-13-
数得到的字符。RTRIM(char_expr)SOUNDEX(char_expr)SPACE(int_expr)STR(float_expr[,length[,decimal]])STUFF(char_expr1,start,length,char_expr2)SUBSTRING(char_expr,start,length)UPPER(char_expr)F.返回删除掉其后空格的字符表达式。评估两个字符串的相似度后得到的4位代码。返回包含指定空格数的字符串。返回浮点表达式的字符串表示法。使用字符表达式2替换字符表达式1的一部分字符,从指定的位置开始替换指定的长度。返回从字符表达式的指定位置开始,截取指定长度得到的字符集。将字符表达式全部转换为大写。
系统函数:用于返回元数据或配置设置。函数返回值返回第一个非NULL表达式。返回列的长度。返回指定的表中的列名。返回任何数据类型的实际长度。返回数据库的标识号。返回数据库的名称。返回数据库的默认空性(Nullability)。返回工作站的标识号。返回工作站的名称。有新的记录添加入到表中时计数加1。返回标识列的起始编号。使用指定的值替换的NULL表达式。Expr1与Expr2相等时,返回Null。返回数据库对象标识号。返回数据库对象名。返回上次更新指定索引的统计的日期。返回用户的登录标识号。返回用户的登录标识号。这个函数类似于SUSER_SID()函数,并且保留了向后的兼容性。返回用户的登录标识号。返回用户的登录标识号。这个函数类似于SUSER_SNAME()函数,并且保留了向后的兼容性。返回用户的数据库标识号。返回用户的数据库名称。
COALESCE(expr1,expr2,xprN)COL_LENGTH(’table_name’,’column_name’)COLNAME(table_id,column_id)DATALENGTH(’expr’)DB_ID([‘database_name’])DB_NAME([database_id])GETANSINULL([‘database_name’])HOST_ID()HOST_NAME()IDENT_INCR(’table_or_view’)IDENT_SEED(’table_or_view’)ISNULL(expr,value)NULLIF(expr1,expr2)OBJECT_ID(’obj_name’)OBJECT_NAME(’object_id’)STATS_DATE(table_id,index_id)SUSER_SID([‘login_name’])SUSER_ID([‘login_name’])
INDEX_COL(’table_name’,index_id,key_id)返回索引的列名。
SUSER_SNAME([server_user_id])SUSER_NAME([server_user_id])
USER_ID(’user_name’)USER_NAME([’user_id’])G.
文本和图像函数:通常返回有关文本和图像数据所需的信息。文本和图像数据是
-14-
以二进制格式的形式进行存储的。函数TEXTPTR(col_name)TEXTVALID(’table_name.col_name’,text_ptr)返回值返回varbinary格式的文本指针值。对文本指针进行检查以确保它指向第一个文本页。检查给定的文本指针是否有效。返回1表示有效,返回0表示指针无效。
六、进行查询时,可以联接多个表来执行相关的查询,通常,我们用一个公用列来联接表,经常是指定一列的主键和外键关系。可以有两种方式来联接表。首先,可以在WHERE子句中指定联接条件。这是以前联接表的方式,但现在仍然支持。如果使用SQL很久了,可能会习惯这种方法。也可以通过FROM子句指定联接条件。下面列出了SQLSERVER支持的连接类型:联接类型CROSSINNERLEFTOUTERRIGHTOUTERFULLOUTERSelf1.描述返回联接类型左右两侧的表中的所有行的所用组合。即笛卡尔积。返回联接类型左侧表和右侧表中有相同值的所有行。返回左侧表中的所有行,以及与左侧表相匹配的右侧表中的那些行。如果不存在匹配,就在该字段以null值替代。返回右侧表中的所有行,以及与右侧表相匹配的左侧表中的那些行。如果不存在匹配,就在该字段以null值替代。返回左右两侧表中的所有行。它们完全相同,就输出两遍,否则就根据需要填以null值。类似于INNEERJOIN,只是左右两侧的表为同一个表。
内联接(Innerjoin):两表组合常用方法,经常采用主键和外键匹配的形式。实例:Selecthuowu.hwid,hwname,ddid,hwjefromhuowujoindingdanonhuowu.hwid=dingdan.hwid左外联接(LEFTOUTERJOIN):左边的表不加限制。右外联接(RIGHTOUTERJOIN):右边的表不加限制。全外联接(FULLOUTERJOIN):不受条件约束,显示两表中所有内容。
2.
外联接(Outerjoin):
3.
实例:Selecthuowu.hwid,hwname,ddid,hwjefromhuowuleftouterjoindingdanonhuowu.hwid=dingdan.hwid交叉联接(Crossjoin):典型的笛卡尔积,没有on。实例:Selecthuowu.hwid,hwname,ddid,hwjefromhuowucrossjoindingdan。
-15-
自联接(Selfjoin):表自身的连接。实例:Selectc1.hwid,c2.hwid,c1.hwnamefromhuowuasc1joinhuowuasc2onc1.hwid=c2.hwid在查询的基础上创建个新表:格式:Select列名清单into新表名from旧表名实例:Select*intonewstudentfromstudent七、子查询:是在其他查询结果的基础上提供一种自然而有效的方式表示WHERE子句的条件。子查询是一个SELECT语句,它定义在另一个SELECT、INSERT、UPDATE或DELETE语句中或定义在另一个子查询中。子查询会受到一定限制规则。这些规则为:子查询的选择列表中不能包括文本或图像数据类型。由未修改的比较运算符(不跟有ANY或ALL关键字的一种运算符)引入的子查询不能包括GROUPBY和HAVING子句,因为这些子查询必须返回单一值。包含GROUPBY子句的子查询不能使用DISTINCT关键字。由比较运算符引入的子查询的选择列表中只能包含一个表达式或一个列名。子查询不能内部地处理它们自己的结果,因为它们不能包含COMPUTE子句、ORDERBY子句或INTO关键字。因为系统首先通过排序结果消除重复的记录,所以可选的DISTINCT关键字可对不包含GROUPBY子句的子查询的结果进行有效排序。使用EXISTS的子查询的选择列表规则等同于那些标准选择列表规则,这是因为使用EXISTS的子查询构成了一个存在性测试,并且它返回TURE(真)或FALSE(假)值而非数据值。根据惯例,使用EXISTS的子查询的选择列表由有星号(*)构成而不是单个列名。不要指定多个列。实例:子查询只返回一行和一列。UsepubsgoSelecttitlefromtitleswherepub_id=(selectpub_idfrompublisherswherepub_name='Binnet&;Hardley')可以使用IN运算符来操作返回一列或多行的子查询。Selectpub_namefrompublisherswherepub_idin(selectpub_idfromtitleswheretype='business')可以返回多行或多列的子查询(事实上是所有的列)使用EXISTS关键字。下面的例子返回与上例相同的结果集:Selectpub_namefrompublisherspwhereexists(select*fromtitlestwherep.pub_id=t.pub_idandtype='business')八、使用TOP返回选定的行数1、Selecttopn字段名from表名orderby字段名2、Selecttopnpercent字段名from表名orderby字段名4.
-16-
第二节
创建索引和视图
一、视图A.概述:虚拟的表或存储查询。B.功能:通过视图可以实现(1)将用户限定在特定的行上;(2)将用户限定在特定的列上;(3)将多个表的列联接起来构成一个“表”(4)聚合信息而非提供详;细信息;(5)可以使用视图更新表的数据,但关联表之间一般不可以;1、创建视图格式:Createview视图名[(列名)]Asselect语句[withcheckoption]说明:A、withencryption:加密syscomments系统表项,该表项包含有Createview语句文本。B、withcheckoption:强制所有对视图进行的数据修改语句都要遵守select语句对视图设置的条件。注意:定义视图的查询不可以包含Orderby,Compute或Computeby子句或者into(a)关键字;(b)不能在临时表上创建视图;例1/*在单个表上创立视图*/Createviewvw_studentAsSelectstuno,sname,entrancedateFromstudentWhereentrancedate>'2002-01-01'Go注:每个字段可以定义一个别名,表或其他对象也可创建别名例2创建一个视图用以显示学生的,和所学的课程名称CreateviewVw_studentinfoAsSelecta.StuNoas'学生',a.SNameas'学生',c.SourceNameas'课程名称'FromStudentasaJoinscoreasbOn(a.StuNo=b.StuNo)JoinsourceascOn(b.SourceNo=c.SourceNo)注:Join用来连接两个或多个表,on参数指定连接条件2、删除视图Dropviewvw_student3、修改视图
-17-
如:Alterviewvw_studentinfoAsSelecta.Snameas‘学生名称’,c.SourceNameas‘课程名称’FromStudentasaJoinScoreasbOn(a.StuNo=b.StuNo)JoioSourceascOn(b.SourceNo=c.SourceNo)4、通过视图修改数据:可以将视图看作表输入数据例如Createviewvw_SourceAsSelectSourceNoas‘课程号’,SourceNameas‘课程名’,SourceDescas‘课程详细’FromSourceInsertintovw_Sourcevalues(‘102’,’VB’,’第二学期的重点课程’)二、索引1、索引的概述:索引是数据库的一种对象,利用索引可以快速检索表中的数据。索引经常被建立在表的主键,外键或哪些经常访问的字段。一般对于记录较少的表格可不创立索引;2、索引的分类A.聚集索引:实际物理数据的行次序与索引次序相同。创建聚集时会对表中的数据重新排序每个表只有一个聚集索引;使用主键或唯一性约束性该索引自动创立。B.非聚集索引:是SQLServer中默认的索引类型。表的逻辑次序由索引指定。每个表可以有多个非聚集索引。C.唯一性索引和组合索引:聚集索引和非聚集索引中又可以创建唯一性索引,可以确保表中索引的列值不重复;还可将多个列组合在一起创建一个组合索引,组合索引效率更高一些。3、索引的创建格式:
Create[Unique][Clustered|Nonclustered]Table_Name(Column1,Column2..)
Index
IndexName
On
例1:在authors表上创立一个关于title_id列的聚集索引。CreateclusteredIndexcdx_title_idonauthors(title_id)例2:在titles表上的title_id列创立非聚集的唯一性索引。CreateUniqueNonclusteredIndexucdx_title_idontitles(title_id)例3:在auhtors表频繁访问的city列和state列上创立组合非聚集索引。CreateIndexucdx_cityAndStateonauthors(city,state)4、索引的删除格式:DropIndex表名.索引名
-18-
例:DropIndexauthors.ucdx_cityAndState
-19-