SQL Server 70 入门.docx
- 文档编号:27003181
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:28
- 大小:33.24KB
SQL Server 70 入门.docx
《SQL Server 70 入门.docx》由会员分享,可在线阅读,更多相关《SQL Server 70 入门.docx(28页珍藏版)》请在冰豆网上搜索。
SQLServer70入门
SQLServer7.0入门
(一)
交互式SQL(TransactSQL,TSQL)
它是SQLServer的查询语言。
提供以下命令:
·创建和数据库对象。
·访问和修改数据。
·数据聚合(aggregation,又称聚集)。
·实施安全措施。
数据库对象
数据库对象是数据库中的物理对象。
这些对象拥有唯一的名字,并保存数据和数据关系信息。
SQLServer定义了如下几种对象:
1、表(table)
表是用来存储数据的两维数组,它有行和列。
列也称为表属性或字段,表中的每一列拥有唯一的名字,每一列包含具体的数据类型,这个数据类型由列中的数据类型定义。
2、视图(view)
视图是虚拟的表,它只包含表的一部分。
与表不同的是,保存在视图中的数据并不是物理存储的数据,它是由表派生的,派生表被称为视图的基本表。
视图的定义存储在数据库中。
3、约束条件(constraint)
约束条件定义数据的完整性和有效性。
约束条件为列中的值建立规则。
换而言之,如果在某一列上定义了结束条件,则插入这一列的每一个值需要通过约束条件检查。
约束条件是在触发器和规则上保证数据完整性和有效性的较佳选择。
SQLServerQueryOptimizer利用约束条件产生出低成本的查询计划。
约束条件有如下类型:
·NOTNULL这个约束条件要求列中不能有NULL值。
·CHECK为列指定能拥有的值的集合后,检查约束条件。
列中任何在定义之外的数据都为无效数据。
有效值集合称为列的域。
·PRIMARYKEY主关键字是列或列组合,它用来唯一标识一行。
·FOREIGNKEY用来定义两个表之间的父子关系。
如果一个关键字既是一个表的主关键字的一部分,同时又是另一个表的主关键字,则称它为外来关键字。
外来关键字用来定义数据的引用完整性。
·UNIQUE唯一约束条件是指无任何两行在列中有相同的NON-NULL值。
唯一性由主关键字保证,但他们不允许NULL值,并且每一个表只能有一个关键字。
4、默认值(default)
默认值是为列定义的值,如果在插入一行时没有提供某一列的值,则此列使用默认值,默认值可以是以下的一种:
·常量
·数学表达式
·内部函数(Built-infunction)
5、规则(rule)
规则执行和CHECK约束条件同样的功能。
但规则和约束条件不同的是:
规则作为独立的对象存在,它可以用于多个表,而约束条件作为表的一部分存储。
然而,规则是作为向后兼容特点而提供的,建议用户使用约束条件。
6、触发器和存储过程
触发器和存储过程是一个TSQL命令集,它们作为一个对象存储在数据库中。
对象命名约定
SQLServer用三段式(three-part)名字标识对象:
<数据库名>.<所有者名>.<对象名>
前两部分可以省略,系统有一个默认值。
数据库名的默认值是当前数据库,所有者名的默认值是数据库所有者(dbo)。
数据类型
任何包含数据的对象都有一个数据类型和它关联。
数据类型是指定对象能包含何种数据的属性。
SQLServer数据类型
数据类型
说明
同义
Bit
1位,值为0或1
Int
Integer
4字节,值为-2^31~2^31-1
Smallint
2字节,值为-2^15~2^15-1
Tinyint
1字节,值为0~255
Decimal(p,s)
数字数据,固定精度为P,宽度为S
Numeric
Money
8字节,存放货币类型,值为-2^63~2^63-1
Smallmoney
4字节,存放货币类型,值为-214748.3648~+214748.3647近似数值数据类型
Float(n)
N在1~24之间,4字节,7位精度
N=1~7为real
N在25~53之间,8字节,15位精度
=8~15为float
Datetime
8字节,描述某天的日期和时刻,值的精确度为1/300秒
Smalldatetime
4字节,描述某天的日期和时刻,精度为分钟
Cursor
对游标的引用
Timestamp
8字节,存放在数据库内唯一的数据
Uniqueidentifier
16字节,存放全局唯一标识(GUID)
Char(n)
非unicode字符串的固定长度,n=1~8000
Character(n)
Varchar(n)
可变长度,非unicode字符串n=1~8000
Charvarying(n)
Text
服务器代码页中可变长度非unicode数据。
最大长度为231-1个字符
Nchar
固定长度unicode字符串n=1~4000
Nationalcharacter(n),
Nationalchar(n)
Nvarchar
固定长度unicode字符串n=1~4000
Nationalcharactervarying(n)
Ntext
可变长度unicode数据,最大长度为230-1个字符
Nationaltext
Binary(n)
固定长度二进制数据,n在1~8000之间,存储空间为n+4字节
Varbinary(n)
可变长度二进制数据,n=1~8000
Binaryvarying(n)
Tmage
可变长度二进制数据,大小为0~231-1
注意:
1)对于数值型数据类型,宽度(scale)是指存储在小数点后的数字位数,而精度(precision)是指能存储的包含小数点在内的所有数字位数。
2)money和smallmoney的存储宽度为4。
3)时间戳列值在每一行更新时系统自动更新,时间戳列不能是关键字或关键字的一部分。
4)唯一标识数据类型不能使用算术操作符(如+、-等),这种数据类型只能使用相等比较操作。
Unicode是所有字符集的一致存储数据的标准。
它要使用两倍于非Unicode数据存储的存储空间。
SQLServer7.0入门
(二)
存取数据
select语句
1.选择表中的所有列
“*”对Select语句有特殊意义。
它指定表中的所有列,而不用列出列的名字。
列的顺序和表中的顺序相同。
2.选择不同的值
如果被选择列表中的列有重复值,这时“distinct”关键字可以用来忽略重复值。
注意:
如果Selectlist中多于一列,则distinct关键字对它们总体有效。
如果一列有重复值,而其他列的值是唯一的,则有重复值的一列包含在结果中。
3.在结果数据集合中对列重命名
结果中列的默认名字是源数据库中的列名,用户可以用自己指定的列名来代替默认的列名。
SelectAuthorFirstName=au_fnamefromauthors
--将列名由“au_fname”改成“AuthorFirstName”
4.选择计算值
在Selectlist中可以包含计算值或常量。
计算值是在算术表达式的基础上计算而来的,它可包含在表中的一列或多列。
SelecttotalSale=price*ytd_salesfromtitles
条件选择(Where子句)
使用一个比较或逻辑操作在Where子句中指定过滤条件,来生成表中想得到的行。
1.比较操作
比较操作能比较数值、字符和日期数据,返回TRUE或FALSE。
比较操作符
<(小于)
>(大于)
=(等于)
<>(不等于)
>=(大于等于)
<=(小于等于)
!
=(不等于)
!
<(不小于)
!
>(不大于)
2.逻辑操作
逻辑操作测试某些条件是否正确,并根据测试结果返回TRUE或FALSE。
·LIKE如果操作和指定的字符串相同,则返回TRUE,指定的字符串也可包含通配符。
有通配符的like操作更有用。
·“%”规定所有字符串可代替字符“%”的位置。
任何在“%”之前或之后的指定字符串视为常量。
如:
“New%”表示所有以“New”开头的字符串,“%New”表示以“New”结尾的字符串。
·“_”规定任何单个字符可代入“_”的位置。
这在只有一个字符不同的相近字符的情况下非常有用。
·“[]”规定使用方括号中定义的字符代替一个字符。
方括号中可能是独立的字符(如[ahg]),也可是字符范围(如[c-i])。
·“[^]”规定方括号中“^”之后的字符为不能用来代入的字符,它可以是独立字符(如[ahg]),也可是字符范围(如[c-i])。
注意:
可以在一个表达式中组合运用这些通配符。
·BETWEEN如果操作数在提供的范围之内,则返回TRUE。
BETWEEN可和NOT操作符一同使用,如果数据在指定范围之外,则返回TRUE。
注意:
BETTEN操作符是指定范围。
例如,BETWEENAandB表示所有在A和B之间的值,包括A和B。
·IN如果操作数和任意的指定值相匹配,则IN操作符返回TRUE。
指定值可以是一个常量值列表,也可由另外的查询(称为子查询)产生。
IN操作符也可和NOT操作符联合使用,如果数据不在指定值中,它返回TRUE。
·AND它结合两个表达式,如果两个表达式都为TRUE,则它返回TRUE,否则返回FALSE。
·OR它结合两个表达式,如果两个表达式中有一个为TRUE,则它返回TRUE,如果两个都为FALSE,则返回FALSE。
·NOT它对逻辑操作值求反,它可和大多数逻辑操作联合使用,对操作返回的值求反。
·SOME|ANY这两个操作有相同的格式。
它们把操作数和指定值的集合比较。
如果操作数与任意指定值的比较返回TRUE,则它返回TRUE。
比较操作可以是任意SQLServer定义的比较操作。
指定值列表可以由另一个查询产生。
·ALLALL操作和SOME及ANY有相似的格式。
不同的是,如果所有操作数和指定值的比较返回TRUE,它才返回TRUE。
SQLServer7.0入门(三)
数据排序
ORDERBY子句按指定的顺序对数据排序(orderingdata)。
它要求一个列名字列表或非负整数列表来指定列的位置。
分别用ASC代表升序,DESC代表降序,默认为ASC。
限制返回行的数目
不使用WHERE子句而限制结果中的行数是可能的。
“TOP”子句能按指定数目或百分值来限制行数。
数据分组和计算聚合函数
聚合(aggregate)函数计算表中数据的总和。
SQLServer提供以下的聚合函数:
·AVG这个函数计算平均值。
语法如下:
AVG([ALL|DISTINCT]expression)
关键字DISTINCT只用来计算不同值的平均值,如果有许多重复值,这些值只计算一次,默认为ALL。
Expression可以是涉及一列或多列的算术表达式。
·MIN这个函数查找所提供表达式中的最小值。
语法如下:
MIN(expression)
·MAX此函数的功能是在提供的表达式中查找最大值。
语法如下:
MAX(expression)
注意:
如果地字符串类型使用MIN和MAX,则输出依赖于为SQLServer定义的顺序。
MIN和MAX不能在位上使用。
·SUMSUM计算所有数据值的和。
语法如下:
SUM([ALL|DISTINCT]expression)
注意:
SUM和AVG只能用于数值数据类型。
·COUNT计算表达式值的数目。
语法如下:
COUNT([ALL|DISTINCT]expression)
COUNT有另一种用法,它可以返回被选择的行数。
如:
SELECTNumRows=COUNT(*)FROMtitles
聚合函数忽略所有空值,但COUNT(*)除外。
尽管所有聚合函数的计算基于无空值的情况,然而COUNT(*)计算所有的行(包括有空值的行)。
1.GROUPBY子句
GROUPBY子句在被定义的数据的基础上建立比较小的组,并且对每一个组进行聚合函数计算。
换句话说,它产生每一组的总体信息。
GROUPBY可以把多于一列当成组合列(GroupingColumns)。
它总结组合列中不重复值的信息。
使用了GROUPBY子句的选择列表中只能包含以下项:
·常量值。
·组合列。
·表达式。
每个表达式为每组返回一个值(如聚合函数)。
如果一列除了在组合列中外,还在选择列表中,则它有多个值给组合列的每一个不重复值,这种结构类型是不允许的。
2.GROUPBY和HAVING
HAVING子句用来向使用GROUPBY子句的查询中增加数据过滤准则。
HAVING的用法和SELECT中的WHERE子句一样。
在一个包含GROUPBY子句的查询中使用WHERE子句是可以的。
HAVING和WHERE有相同的语法。
HAVING和WHERE的不同这处是:
·在WHERE子句中,在分组进行以前,去除不满足条件的行,在HAVING子句中,在分组之后条件被应用。
·HAVING可在条件中包含聚合函数,但WHERE不能。
注意:
GROUPBY和HAVING子句不能使用文本或图像数据类型。
3.COMPUTEBY子句
COMPUTEBY子句可以得到详细或总的记录。
它把数据分成较小的组,然后为每组建立详细记录结果数据集(象SELECT),它也可为每组产生总的记录(象GROUPBY)。
在COMPUTBY中,定义BY子句不是必要的。
如果没有定义BY子句,则认为整个表为一个组,并且只有两个结果数据集产生,一个拥有所有详细记录,另一个只有一行,它拥有总记录。
注意:
当在COMPUTE中使用BY时,则要求在所有组合列中包含ORDERBY。
Cube和Rollup操作
CUBE和ROLLUP操作可比简单的GROUPBY产生更多的聚合值。
在产生交叉标签报告(crosstabreports)时,这些操作非常有用。
如果查询使用n个组合列,则有2n个计算聚合的组合。
从多个表中访问数据
我们已讨论了如何访问单个表中的数据。
从多个表中访问数据也是可能的。
从多个表中访问数据称为连接表(joiningatable)。
1、CROSSJOIN(笛卡尔积)
CROSSJOIN是简单地、不加任何约束条件地把表组合。
CROSSJOIN后结果的行数是连接前两个表行数的乘积。
如果对两个分别有好几千行的表进行连接,则结果是不可想象的。
2、INNERJOIN
INNERJOIN是组合两个表最常用的方法。
INNERJOIN是基于一个判别式进行的,这个判别式称为连接条件。
连接条件和WHERE子句一起定义。
连接条件由来自两个表中的列组成,并使用一个比较条件来对列的值进行比较。
通过比较的值包含在结果数据集中,以下是InnerJOIN的语法:
语法1:
(ANSI92)
Select
FROM
ON
语法2:
Select
FROM
在FROM子句中可为表定义别名,并在任何地方都可用别名代替真名。
注意:
如果作为连接条件的列中有空值,则空值不能和任何值匹配,因此结果中不包含有空值的行。
3、LeftOuterJOIN
在InnerJOIN中,只有在两个表中匹配的行才能在结果数据集中。
但在LeftOuterJOIN中,所有左边表中的行都出现在结果数据集中,如果左边表中的某一行在右边表中没有匹配的行,则以空值取代右边表中的值和它连接。
语法如下:
(ANSI92)
Select
FROM
ON
4、RightOuterJOIN
RightOutJOIN和LeftOuterJOIN相似,不同的是把右边的表作为外部表(所有右边表中的行包含在结果数据集中)。
语法如下:
Select
FROM
ON
5、FullOuterJOIN
在FullOuterJOIN中,所有两个表中的行都包含在结果数据集中。
语法如下:
Select
FROM
ON
Case语句
当对不同条件产生不同的结果值时,可使用Case语句。
Case语句计算所有定义的条件,并按条件是否为真而返回结果。
语法如下:
CASE[
WHEN
[ELSE
END
Input_expression是任何有效的SQLServer表达式或布尔表达式。
When_expression是任何有效的SQLServer表达式或布尔表达式。
这个表达式和Input_expression比较,如果Input_expression没有定义,则When_expression应该是一个布尔表达式。
Result_expression是任何有效的SQLServer表达式。
如果When_expression和Input_expression的比较返回TRUE(如果定义了Input_expression)或When_expression的值为TRUE,则计算表达式,并返回其结果。
否则计算Else_expression中的表达式,并返回其结果。
例如:
SELECTau_fname,au_lname,
State=CASEstate
WHEN‘CA’THEN‘California’
WHEN‘KS’THEN‘Kansas’
END
FROMauthors
UNION
UNION语句把两个或多个查询的结果组合成一个结果集。
语法如下:
SELECT
FROM
WHERE
UNION[ALL]
SELECT
FROM
WHERE
ALL关键字指定重复的数据也将包含在最终结果数据集中。
如果需要,一个查询中可以有许多UNION语句。
所有Select_list应该有相同数目的列,且是相同或兼容的数据类型。
Go命令Go命令用来标志一个查询批处理(querybatch)的结束。
查询批处理是TSQL语句的集合,这些语句集合在一起执行。
Go与Osql或SQLServerQueryAnalyzer一起使用。
SQLServer7.0入门(四)
管理文本和图像数据
文本和图像数据类型列可以象其它列一样包含在SELECT语句的Select_list中。
通过SELECT语句检索的最大文本大小由TEXTSIZE设置来控制。
默认的TEXTSIZE的值是4096字节,使用SETTEXTSIZE语句可重新设置。
当前的TEXTSIZE设置的值存放在全局变量@@TEXTSIZE中。
另一种检索文本和图像数据的方法是通过TEXTPTR和READTEXT函数。
TEXTPTR函数把列名字作为输入参数并以二进制格式返回文本指针。
这个指针和被称为偏移量的读开始指针以及要读的字节数量一起传给READTEXT函数,以检索文本和图像数据。
修改数据
TSQL也提供从数据库插入、修改、删除的命令。
插入
INSERT命令用来在表中插入数据,语法如下:
INSERT[INTO]
Value_list是和在Column_list中列相应的值。
这些值可以是常量、TSQL变量或SQLServer内部函数。
值的顺序应和column_list中列的顺序相对应。
如果没有定义column_list,则值的顺序应和表中列的顺序对应。
INSERT的Values_list也可通过SELECT语句或一个存储过程来提供。
语法如下:
INSERT[INTO]
SELECT
INSERT[INTO]
EXECUTE
这里的SELECT语句可包含多种连接。
如果使用存储过程,则存储过程应返回能作为column_list的结果。
时间戳(timestamp,又称时标)值不应被提供。
同时,如果列的IDENTITY属性被定义,则这一列的值也不能提供。
这些值都由系统产生。
如果列有默认值,则它们的值不被提供,而使用默认值。
修改
UPDATE语句用来修改行,语法如下:
UPDATE
WHERE
Serach_condition是要修改的行应满足的条件。
没有WHERE子句的UPDATE语句将修改表中的所有行。
在UPDATE语句中也可使用连接。
删除
DELETE语句用来从表中删除行。
语法如下:
DELETE[FROM]
[WHERE
一个无条件DELETE语句将删除表中的所有行。
在DELETE语句中也可使用连接。
SQLServer7.0入门(五)
使用SQLServer开发应用程序
编写存储过程与触发器
存储过程和触发器是由用户创建的、驻留在服务器的一组TransactSQL查询语句。
触发器是系统在特定条件下执行的。
存储过程能够改善应用程序的性能。
当客户程序需要访问数据时,一般要经过5个步骤才能访问到数据:
1)查询语句被发送到服务器。
2)服务器编译SQL代码。
3)优化产生查询的执行计划。
4)数据引擎执行查询。
5)结果发回客户程序。
存储过程是在创建时编译的,当存储过程第一次执行时,SQLServer产生查询执行计划并将其存储进来,以利于将来使用。
当通过存储过程发出一个请求时,上述的第2和第3步就没有了,这能大大改善系统的性
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL Server 70 入门