大学SQLServer复习资料辛苦整理.docx
《大学SQLServer复习资料辛苦整理.docx》由会员分享,可在线阅读,更多相关《大学SQLServer复习资料辛苦整理.docx(69页珍藏版)》请在冰豆网上搜索。
大学SQLServer复习资料辛苦整理
第一章
一、SQLServer2000版本:
1.企业版(具备所有功能)
---作为生产数据库服务器使用。
支持SQLServer2000中的所有可用功能。
2.个人版(安装个人数据库)
---一般供移动的用户使用。
3.开发版(适用于我们安装,支持企业版的所有功能)
---供程序员用来开发将SQLServer2000用作数据存储的应用程序。
4.标准版(适用于简洁开发)。
---作为小工作组或部门的数据库服务器使用。
注意:
企业版和标准版只能安装在服务器版本的操作系统中,如(2000Server、NT4.0Server等)。
二、SQLServer2000安装组件
1.安装数据库服务器(我们选择该组件)
---启动SQLSERVER安装程序。
2.安装AnalysisServices
---在处理OLAP(联机分析处理)多维数据集的计算机上安装AnalysisServices。
3.安装EnglishQuery
---可通过英语查询数据库。
三、目录路径:
1.\ProgramFiles\MicrosoftSQLServer\MSSQL\Binn
---置放程序文件。
包含程序文件及通常不会更改的文件,需要的空间不大。
2.\ProgramFiles\MicrosoftSQLServer\MSSQL\Data
---置放数据文件。
包含数据库和日志文件、系统日志、备份数据、复制数据所在的目录文件夹,需要的空间大。
3.\ProgramFiles\MicrosoftSQLServer\80
---置放一些共享工具和com组件。
比如联机丛书、开发工具等组件。
四、自带的系统和示例数据库
1.系统数据库
a.master数据库
---记录SQLServer系统的所有系统级别信息。
它记录所有的登录帐户和系统配置设置。
b.model数据库
---用作在系统上创建的所有数据库的模板。
充当所有数据库的原始模板
c.tempdb数据库
---保存所有的临时表和临时存储过程。
在SQLServer每次启动时都会重新创建该数据库,也就说该数据库在每次启动服务器时是没有任何数据的,是干净的。
d.msdb数据库
---供SQLServer代理程序调度警报和作业以及记录操作员时使用。
2.示例数据库
a.pubs数据库
---以一个图书出版公司为模型。
可以演示SQLServer数据库中的许多操作。
b.NorthwindTraders数据库
---包含一个名为NorthwindTraders的虚构公司的销售数据,该公司从事世界各地的特产食品进出口贸易。
五、各种主要SQLServer工具
1.查询分析器
---创建查询和其它SQL脚本,并针对SQLServer数据库执行它们等功能。
2.企业管理器
---管理和配置SQLServer,复制、导入、导出和转换数据等所有功能。
3.服务管理器
---启动、关闭服务器。
4.事件探查器
---查找并诊断有问题、运行慢的查询,监视SQLServer的性能以精细地调整工作负荷。
5.导入和导出数据
6.联机丛书
六、SQLServer2000的特性
1.Internet集成
---SQLServer2000程序设计模型与WindowsDNA构架集成,用以开发Web应用程序。
2.可伸缩性和可用性
---同一个数据库引擎可以在不同的平台上使用
3.企业级数据库功能
4.易于安装、部署和使用
5.数据仓库
---析取和分析汇总数据以进行联机分析处理(OLAP)
*********************************************************
第二章
结构化查询语言(SQL---StructuredQueryLanguage):
通过SQL我们可以与数据库交互(访问、修改、删除数据等操作),MSSQLServer2000在SQL-92基础上加入了一些特有的性质,称之为Transact-SQL(T-SQL)。
(SQL是由国际标准化组织(ISO)和美国国家标准学会(ANSI)发布的标准的主题)
一、T-SQL数据类型:
1.字符串
a.char---固定长度的非Unicode字符数据,最大长度为8,000个字符
b.varchar---可变长度的非Unicode数据,最长为8,000个字符。
c.text---可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
2.Unicode字符串
a.nchar---固定长度的Unicode字符数据,最大长度为4,000个字符
b.nvarchar
c.ntext
3.整数
a.bigint---从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据(所有数字)。
b.int---从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据(所有数字)。
c.smallint---从-2^15(-32,768)到2^15-1(32,767)的整数数据。
d.tinyint---从0到255的整数数据。
e.bit---1或0的整数数据
f.decimal和numeric---从-10^38+1到10^38–1的固定精度和小数位的数字数据。
g.money---货币数据值介于-2^63(-922,337,203,685,477.5808)与2^63-1(+922,337,203,685,477.5807)之间,精确到货币单位的千分之十。
h.smallmoney---货币数据值介于-214,748.3648与+214,748.3647之间,精确到货币单位的千分之十。
4.浮点精度数字
a.float---从-1.79E+308到1.79E+308的浮点精度数字。
b.real---从-3.40E+38到3.40E+38的浮点精度数字。
5.日期
a.datetime---从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒(或3.33毫秒)。
b.smalldatetime---从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。
6.二进制字符串
a.binary---固定长度的二进制数据,其最大长度为8,000个字节。
b.varbinary---可变长度的二进制数据,其最大长度为8,000个字节。
c.image---可变长度的二进制数据,其最大长度为2^31-1(2,147,483,647)个字节。
7.其它
a.timestamp---数据库范围的唯一数字,每次更新行时也进行更新。
b.sql_variant---种存储SQLServer支持的各种数据类型(text、ntext、timestamp和sql_variant除外)值的数据类型。
c.cursor---游标的引用。
二、SQL语句:
1.DML
---SQL语句的子集,用于检索和操作数据。
2.DCL
---用于控制对数据库对象的权限的SQL语句的子集。
使用GRANT和REVOKE语句来控制权限
3.DDL
---一种语言,通常是数据库管理系统的一部分,用于定义数据库的所有特性和属性,尤其是行布局、列定义、键列(有时是选键方法)、文件位置和存储策略。
DQL
三、DML:
1.Select子句
用于将数据返回给应用程序或另一个Transact-SQL语句、或者用以填充游标的Transact-SQL语句。
SELECT语句返回一个表格格式的结果集,它通常由从一个或多个表中析取的数据组成。
语法:
SELECT[ALL|DISTINCT]select_column_list
[INTO[new_table_name]]
[FROM{table_name|view_name}[(optimizer_hints)][[,{table_name2|view_name2}[(optimizer_hints)]
[WHEREclause]
[GROUPBYclause][HAVINGclause]
[ORDERBYclause][COMPUTEclause]
[FORBROWSE]
简单语法:
SELECTselect_column_list
[FROM{table_name}]
(所有例子及练习均使用pubs数据库)
例1:
检索Shippers表中的所有书籍信息:
SELECT*FROMShippers
“*”代表所有的表字段,即所有列。
例2:
检索所有作者的姓:
(authorstable)
SELECTau_lnameFROMauthors
可以在SELECT之后接我们所要查找的所有作者的姓字段。
例3:
检索所有作者的姓和名:
(authorstable)
SELECTau_lname,au_fnameFROMauthors
可以得知,在SELECT之后我们可以接一个到多个表字段(列)。
练习:
1.打印所有员工的职位ID。
(employeetable)
2.打印所有出版图书的种类、标题、发行日期。
(titlestable)
例4:
检索所有作者的姓、名,并且以以下格式显示:
作者姓
作者名
...
...
...
...
分析:
通过上面的学习,我们得知,显示的结果表格的列名都是默认的取查询表的对应列名。
但我们发现,为了简洁方便,我们一般将部分表列名缩写,比如作者姓---au_lname,可是对客户来说就不怎么友好了,客户可能希望以上格式的结果,因此,SQL提供了一种“用户自定义标题”的功能,从而实现客户友好化。
解答1:
SELECTau_lname'作者姓',au_fname'作者名'FROMauthors
解答2:
SELECT'作者姓'=au_lname,'作者名'=au_fnameFROMauthors
解答3:
SELECTau_lnameas'作者姓',au_fnameas'作者名'FROMauthors
例5:
需求1:
检索所有员工详细信息。
需求2:
检索所有名为’Helen’的员工详细信息(如员工ID、职位ID、受雇日期等)。
解答1:
通过以上所学,我们可以很快得出解决方案:
SELECT*FROMemployee
解答2:
这是一个带条件的需求了,客户只想看到名为’Helen’的员工信息,也就是说其余的员工信息不是他所关心的,光靠以上所学我们是满足不了客户的需求的,SQL提供了带条件查询的解决方案:
SELECTlnamefromemployee
WHEREfname=‘Helen’
WHERE子句语法:
SELECTselect_column_list
[FROM{table_name}]
[WHERE]
该子句用于返回满足搜索条件的特定行。
例6:
检索员工ID为’F-C16315M’的员工的职位ID以及雇用日期。
解答:
SELECTjob_id,hire_dateFROMemployee
WHEREemp_id=‘F-C16315M’
练习:
1.按以下格式打印发货人的相关信息:
发货人ID
公司名称
联系电话
...
...
...
2.打印订单ID为’10253’的订单中订购的所有产品ID及每种产品数量。
*********************************************************
第三章
一、算术运算符:
可以在数据类型为数字的列或者数字常量上进行加、减、乘、除、求模。
1.+(加)
两个数相加。
这个加法算术运算符也可以将一个以天为单位的数字加到日期中。
例1:
需求:
计算客户可订购的总单元数
解答:
useNorthwind
SELECTProductName,UnitsInStock+UnitsOnOrder
FROMProducts
例2:
需求:
打印订单号为’10248’的订单签订日期后10天的具体日期
解答:
useNorthwind
SELECTorderdateas‘10天之前日期’,
orderdate+10as’10天之后日期’
FROMorders
WHEREOrderID=‘10248’
2.-(减)
两个数相减。
该减法算术运算符也可以从日期中减去一个以天数为单位数值。
3.*(乘)
例1:
需求:
检索现代食谱图书的标识号和价格,并将价格乘以1.15。
解答:
USEpubs
SELECTtitle_id,price*1.15ASNewPrice
FROMtitles
WHEREtype='mod_cook'
4./(除)
例:
需求:
打印编写商务图书的作者应得的版税
解答:
USEpubs
SELECT((ytd_sales*price)*royalty)/100AS'RoyaltyAmount'
FROMtitles
WHEREtype='business'
5.%(求模)
模是两个整数相除后剩余的整数。
例:
SELECT20%6结果为2
SELECT20%2结果为0
运算符优先级:
优先级分别为先乘(*),除(/),求模(%),后为减(-)和加(+)
二、赋值运算符:
‘=’
例:
USENorthwind
GO
SELECTFirstColumnHeading='xyz',
SecondColumnHeading=ProductID
FROMProducts
GO
请大家预测一下结果?
三、比较运算符:
测试两个表达式是否相同。
一般用于WHERE子句中。
=,>,<,<>,>=,<=
例:
需求:
检索折扣大于10的所有折扣类型。
解答:
SELECTdiscounttype
FROMdiscounts
WHEREdiscount>10
四、逻辑运算符:
多个查找条件可以通过用以下的逻辑运算符的结合来做:
OR当任何一个指定查找条件是真时返回结果
trueorture返回true
trueorfalse返回true
falseorfalse返回false
两个条件之一成立。
例1:
需求:
检索类型为商业书籍或心理学书籍的书名
解答:
SELECTtitle,type
FROMtitles
WHEREtype='business'ORtype='psychology'
例2:
需求:
检索标题ID为’BU2075’或价格大于20的书名。
解答:
SELECTtitle
FROMtitles
WHEREtitle_id=‘BU2075’ORprice>20
AND当所有指定的查找条件是真时返回结果
trueorture返回true
trueorfalse返回false
falseorfalse返回false
两个条件必须同时成立。
例:
需求:
检索标题ID为’BU2075’且价格大于20的书名。
解答:
SELECTtitle
FROMtitles
WHEREtitle_id=‘BU2075’ANDprice>20
请大家预测一下结果。
NOT否定其后的表达式
反转搜索条件的结果
例:
需求:
检索除德国出版商以外的其余出版商的名称。
解答:
SELECTpub_name,country
FROMpublishers
WHERENOT(country=‘Germany’)
五、范围运算符:
1.between,notbetween
语法:
test_expression[NOT]BETWEENbegin_expressionANDend_expression
例1:
需求:
检索年度至今单位销售额为4095到12000之间的书标题ID。
解答:
SELECTtitle_id,ytd_sales
FROMtitles
WHEREytd_salesBETWEEN4095AND12000
请大家思考以下语句执行结果:
SELECTtitle_id,ytd_sales
FROMtitles
WHEREytd_sales>4095ANDytd_sales<12000
分析以下语句执行结果:
SELECTtitle_id,ytd_sales
FROMtitles
WHEREytd_salesNOTBETWEEN4095AND12000
六、列表运算符:
确定给定的值是否与子查询或列表中的值相匹配。
如果匹配则显示匹配的结果集。
例:
需求:
列出所有居住在加利福尼亚、印地安纳或马里兰州的作者。
解答1:
SELECTau_lname,state
FROMauthors
WHEREstateIN('CA','IN','MD')
解答2:
大家思考!
NOTIN正好相反。
七、串联运算符:
可以通过’+’运算符将字符串串联起来。
例:
需求:
打印完整的作者姓名,并按特定格式显示(姓名),比如姓为joe,名为zhou,则应显示命名格式为’joezhou’。
解答:
SELECT(au_lname+‘’+au_fname)‘name’
FROMauthors
上机练习:
1.打印姓名为’SmithAnn’的员工信息。
(pubs--employee)
2.查找姓为Carson、Carsen、Karson或Karsen的作者所在的行。
(使用通配符)
3.查找所有员工的ID(pubs--employee)
4.打印食品种类的ID、名称、描述。
(northwind--Categories)
5.打印所有居住在西雅图的客户的电话号码。
(northwind--customers)
6.打印所有装运所在城市为France,且运费大于30的订单详细资料。
(northwind--orders)
7.打印产品ID为1到10之间的所有产品名称。
(northwind--products)
8.打印产品供应商ID为2或者产品种类ID为2的产品名称。
(northwind--products)
9.检索订单日期为1996年7月19日的所有订单。
(northwind--orders)
10.打印产品单价为12.75、16.75、20的所有产品名称。
(northwind--products)
11.按以下格式检索:
出版者
详细地址
其中,地址格式应为:
国家|州|城市(pubs--publishers)
*********************************************************
第四章
一、通配符:
通过关键字LIKE来查找带通配符机制的字符串。
LIKE关键字用来选择那些与字符串的指定部分匹配的行
SQLSERVER2000有以下通配符:
通配符
描述
%
包含零个或更多字符的任意字符串
_
任何单个字符
[]
指定范围([a-f])或集合([abcdef])中的任何单个字符
[^]
不属于指定范围([a-f])或集合([abcdef])的任何单个字符。
例1:
查找出版商名称以字符串’books’结束的所有出版商信息。
解答:
selectpub_namefrompublishers
wherepub_namelike'%books'
思考:
如果改成’%books%’,会返回什么结果?
思考:
查找出版商名称以字符串’books’开始的所有出版商信息。
例2:
查找出版商名称第二个字符为’i’的所有出版商信息。
解答:
selectpub_namefrompublishers
wherepub_namelike'_i%'
思考:
如果改成’_i_’会返回什么结果?
例3:
查找出版商名称包含字符’a’或’b’或’c’的所有出版商信息。
解答:
selectpub_namefrompublishers
wherepub_namelike'%[a-c]%'
思考:
’%[abc]%’,结果
思考:
’%[^abc]%’,结果
二、ISNULL和ISNOTNULL关键字:
在SQL中,NULL是一个未知值,或者是一个尚未提供数据的值。
注意:
NULL和零意义不相同
例:
查找stor_id为NULL的所有折扣类型
解答:
SELECT*
FROMdiscounts
WHEREstor_idISNULL
ISNOTNULL意义和ISNULL相反。
ISNULL系统函数---使用指定的替换值替换NULL
语法:
ISNULL(check_expression,replacement_value)
例:
检索书名、类型及价格,当价格为null时应显示0.00。
解答:
SELECTtitleASTitle,typeASType,
ISNULL(price,0.00)ASPrice
FROMtitles
三、ORDERBY关键字:
指定结果集的排序。
语法:
SELECTselect_column_list
FROMtable_name
[ORDERBYcolumn_name|select_list_number|expression[ASC|DESC][,column_name|select_list_number|expression
[ASC|DESC]...]
其中ASC代表升序(缺省值),从最低值到最高值对指定列中的值进行排序。
DESC代表降序,从最高值到最