SQL Server基础知识教程Word文档下载推荐.docx
《SQL Server基础知识教程Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《SQL Server基础知识教程Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
3、约束种类:
二、关系条件表达式13
1、条件运算符13
2、逻辑运算符13
3、通配符14
4、常用的两个关键字14
第四章SQL语言编写14
一、SQL语言知识14
1、T-SQL语言的组成:
14
2、T-SQL中的注释:
二、使用T-SQL语言建库建表14
1、建立数据库14
2、建立数据表15
3、建立数据表的一些常用表达式16
三、使用DML进行数据操作17
1、数据简单查询:
17
2、增加数据:
3、复制数据:
4、删除数据:
18
5、修改数据:
第五章SQL语言查询19
一、DML语言查询格式19
二、DML语言查询19
1、条件查询一(where)19
2、条件查询二(top)19
3、查询排序(与top子句合用)20
4、聚和函数20
5、数据分组【groupby】20
6、筛选组【having】21
三、T-SQL中使用函数查询21
1、数据类型的转换21
2、字符串函数21
3、日期函数22
四、多表查询24
1、交叉联接【crossjoin】24
2、内联接【innerjoin】24
3、外联结【left/right[outer]join】24
4、多表内联接24
第一章数据库基础
1、数据库定义
按照数据结构来组织、储存和管理数据的仓库
2、数据库基础
(三建四句)建库、建表、建约束;
句增、句删、句改、句查
3、数据库的作用
①实现数据共享和集中控制
②减少数据储存冗余度
③保持数据的一致性和完整性
④通过智能分析,产生新的数据
4、数据库的发展过程
萌芽阶段————初级阶段————中级阶段————高级阶段
(文件系统)(层次网状模型)(关系模型、结构化查询)(超越关系模型)
5、数据库的组成
5、表、关系、高级对象
在数据表中:
先列后行;
行决定实体、列决定结构
数据库是由数据库管理系统(DBMS)和物理文件两大部分组成
第二章创建数据库
一、系统数据库
1、master数据库:
用于记录SQLServer系统的所有系统信息
2、msdb数据库:
用于警报和计划作业
3、model数据库:
是所有数据库的模板
4、Resource数据库:
只读数据库,包含SQLServer2005中所有的系统对象
5、tempdb数据库:
临时数据库,用于保存临时对象和结果集
二、数据库的文件类型
1、主要数据文件(PrimaryDatabaseFile):
*.mdf(有且仅有一个)
2、次要数据文件(SecondaryDatabaseFile):
*.ndf(可选有无)
3、日志文件(TransactionLogFile):
*.ldf(至少有一个)
4、文件组(FileGroup):
每个数据库有一个主要文件组,分为主文件组和次文件组
三、创建和管理数据库和数据表
1、创建数据库
(1)数据库的选项:
A、兼容级别:
数据库向以前版本兼容的级别
B、设置数据库为只读,当数据库不允许被修改时,可设置。
默认为允许修改false
C、访问限制:
指定哪些用户可以访问该数据库,有三种值
a、Multiple:
正常状态,允许多个用户同时访问
b、Single:
用于维护操作状态,一次只允许一个用户访问
c、Restricted:
只有管理员或特定的成员可以访问
D、自动关闭:
如设置为true,则最后一个用户退出后,数据库自动关闭且释放资源;
对于经常被使用的数据库,不要设置为true,否则会增加开关次数而带来负担
E、自动收缩:
如果设置为true,则该数据库定期将自动收缩,释放没有使用的空间
2、创建数据表
每个数据库最多包含20亿个表,每个表可以创建1024列,常用的数据类型如下:
数据分类
数据类型
描述
二进制类型
image
用于储存图像
(var)binary
文本数据
char
固定长度的非Unicode字符
varchar
可变长度的非Unicode字符
nchar
固定长度的Unicode字符
nvarchar
可变长度的Unicode字符
text
储存非Unicode长文本信息
ntext
储存Unicode长文本信息
日期时间
datetime
1753.1.1-9999.12.31,精确到3.33ms
smalldatetime
1900.1.1-2079.6.6,精确到1分钟
整数型
bigint
储存8字节整数
int
储存4字节整数
smallint
储存2字节整数(-32768~32727)
tinyint
储存1字节整数(0-255)
浮点数型
float
小数类型
real
货币类型
money
布尔类型
bit
true
(1)、false(0)
四、SQL数据库数据类型详解
1、精确数字类型
A.整数类型:
整数类型是最常用的数据类型之一,它主要用来存储数值,可以直接进行数据运算,而不必使用函数转换。
整数类型包括以下四类:
(1)Bigint:
Bigint数据类型可以存储从(-9223372036854775808)到(9223372036854775807)范围之间的所有整型数据。
每个Bigint数据类型值存储在8个字节中。
(2)Int(Integer)
Int(或integer)数据类型可以存储从(-2147483648)到(2147483647)范围之间的所有正负整数。
每个Int数据类型值存储在4个字节中。
(3)Smallint:
可以存储从(-32768)到32767范围之间的所有正负整数。
每个smallint类型的数据占用2个字节的存储空间。
(4)Tinyint
可以存储从0~255范围之间的所有正整数。
每个tinyint类型的数据占用1个字节的存储空间。
B.位数据类型(Bit)
Bit称为位数据类型,其数据有两种取值:
0和1,长度为1字节。
在输入0以外的其他值时,系统均把它们当1看待。
这种数据类型常作为逻辑变量使用,用来表示真、假或是、否等二值选择。
C.Decimal数据类型和Numeric数据类型
Decimal数据类型和Numeric数据类型完全相同,它们可以提供小数所需要的实际存储空间,但也有一定的限制,可以用2~17个字节来存储-1038+1到1038-1之间的固定精度和小数位的数字。
也可以将其写为Decimal(p,s)的形式,p和s确定了精确的总位数和小数位。
其中p表示可供存储的值的总位数,默认设置为18;
s表示小数点后的位数,默认设置为0。
例如:
decimal(10,5),表示共有10位数,其中整数5位,小数5位。
D.货币数据类型(Money,SmallMoney)
货币数据类型包括Money和SmallMoney两种:
(1)Money:
用于存储货币值,存储在money数据类型中的数值以一个正数部分和一个小数部分存储在两个4字节的整型值中,存储范围为(-9223372136854775808)到(9223372136854775807),精确到货币单位的千分之十。
(2)Smallmoney:
与money数据类型类似,但范围比money数据类型小,其存储范围为-2147483468到2147483467之间,精确到货币单位的千分之十。
当为money或smallmoney的表输入数据时,必须在有效位置前面加一个货币单位符号。
2、近似数据类型
近似数字类型包括Real和Float两大类。
(A)Real
可以存储正的或者负的十进制数值,最大可以有7位精确位数。
它的存储范围从-3.40E-38~3.40E+38。
每个Real类型的数据占用4个字节的存储空间。
(B)Float
可以精确到第15位小数,其范围从-1.79E-308~1.79E+308。
如果不指定Float数据类型的长度,它占用8个字节的存储空间。
Float数据类型也可以写为Float(n)的形式,n指定Float数据的精度,n为1~15之间的整数值。
当n取1~7时,实际上是定义了一个Real类型的数据,系统用4个字节存储它;
当n取8~15时,系统认为其是Float类型,用8个字节存储它。
3、时间和日期数据类型
(A)Datetime
用于存储日期和时间的结合体,它可以存储从公元1753年1月1日零时起~公元9999年12月31日23时59分59秒之间的所有日期和时间,其精确度可达三百分之一秒,即3.33毫秒。
Datetime数据类型所占用的存储空间为8个字节,其中前4个字节用于存储基于1900年1月1日之前或者之后日期数,数值分正负,负数存储的数值代表在基数日期之前的日期,正数表示基数日期之后的日期,时间以子夜后的毫秒存储在后面的4个字节中。
当存储Datetime数据类型时,默认的格式是MMDDYYYYhh:
mmA.M./P.M,当插入数据或者在其他地方使用Datetime类型时,需要用单引号把它括起来。
默认的时间日期是January1,190012:
00A.M。
可以接受的输入格式如下:
Jan41999、JAN41999、January41999、Jan19994、19994Jan和1999Jan4。
(B)Smalldatetime
与Datetime数据类型类似,但其日期时间范围较小,它存储从1900年1月1日~2079年6月6日内的日期。
SmallDatetime数据类型使用4个字节存储数据,SQLServer2000用2个字节存储日期1900年1月1日以后的天数,时间以子夜后的分钟数形式存储在另外两个字节中,SmallDatetime的精度为1分钟。
4、字符数据类型
字符数据类型也是SQLServer中最常用的数据类型之一,它可以用来存储各种字母、数字符号和特殊符号。
在使用字符数据类型时,需要在其前后加上英文单引号或者双引号。
(A)Char
其定义形式为Char(n),当用Char数据类型存储数据时,每个字符和符号占用一个字节的存储空间。
n表示所有字符所占的存储空间,n的取值为1~8000。
若不指定n值,系统默认n的值为1。
若输入数据的字符串长度小于n,则系统自动在其后添加空格来填满设定好的空间;
若输入的数据过长,将会截掉其超出部分。
如果定义了一个Char数据类型,而且允许该列为空,则该字段被当作Varchar来处理。
(B)Varchar
其定义形式为Varchar(n)。
用Char数据类型可以存储长达255个字符的可变长度字符串,和Char类型不同的是Varchar类型的存储空间是根据存储在表的每一列值的字符数变化的。
例如定义Varchar(20),则它对应的字段最多可以存储20个字符,但是在每一列的长度达到20字节之前系统不会在其后添加空格来填满设定好的空间,因此使用Varchar类型可以节省空间。
(C)Text
用于存储文本数据,其容量理论上为1~231-1(2,147,483,647)个字节,但实际应用时要根据硬盘的存储空间而定。
5、Unicode字符数据类型
Unicode字符数据类型包括Nchar、Nvarchar、Ntext三种:
(A)Nchar
其定义形式为Nchar(n)。
它与Char数据类型类似,不同的是Nchar数据类型n的取值为1~4000。
Nchar数据类型采用Unicode标准字符集,Unicode标准用两个字节为一个存储单位,其一个存储单位的容纳量就大大增加了,可以将全世界的语言文字都囊括在内,在一个数据列中就可以同时出现中文、英文、法文等,而不会出现编码冲突。
(B)Nvarchar
其定义形式Nvarchar(n)。
它与Varchchar数据类型相似,Nvarchar数据类型也采用Unicode标准字符集,n的取值范围为1~4000。
(C)Ntext
与Text数据类型类似,存储在其中的数据通常是直接能输出到显示设备上的字符,显示设备可以是显示器、窗口或者打印机。
Ntext数据类型采用Unicode标准字符集,因此其理论上的容量为230-1(1,073,741,823)个字节。
6、二进制字符数据类型
二进制数据类型包括Binary、Varbinary、Image三种:
(A)Binary
其定义形式为Binary(n),数据的存储长度是固定的,即n+4个字节,当输入的二进制数据长度小于n时,余下部分填充0。
二进制数据类型的最大长度(即n的最大值)为8000,常用于存储图像等数据。
(B)Varbinary
其定义形式为Varbinary(n),数据的存储长度是变化的,它为实际所输入数据的长度加上4字节。
其他含义同Binary。
(C)Image
用于存储照片、目录图片或者图画,其理论容量为231-1(2,147,483,647)个字节。
其存储数据的模式与Text数据类型相同,通常存储在Image字段中的数据不能直接用Insert语句直接输入。
7、其它数据类型
(A)Sql_variant
用于存储除文本、图形数据和Timestamp类型数据外的其他任何合法的SQLServer数据。
此数据类型极大地方便了SQLServer的开发工作。
(B)Table
用于存储对表或者视图处理后的结果集。
这种新的数据类型使得变量可以存储一个表,从而使函数或过程返回查询结果更加方便、快捷。
(C)Timestamp
亦称时间戳数据类型,它提供数据库范围内的惟一值,反应数据库中数据修改的相对顺序,相当于一个单调上升的计数器。
当它所定义的列在更新或者插入数据行时,此列的值会被自动更新,一个计数值将自动地添加到此Timestamp数据列中。
如果建立一个名为“Timestamp”的列,则该列的类型将自动设为Timestamp数据类型。
(D)Uniqueidentifier
用于存储一个16字节长的二进制数据类型,它是SQLServer根据计算机网络适配器地址和CPU时钟产生的全局惟一标识符代码(GloballyUniqueIdentifier,简写为GUID)。
此数字可以通过调用SQLServer的newid()函数获得,在全球各地的计算机经由此函数产生的数字不会相同。
(E)XML
可以存储XML数据的数据类型。
利用它可以将XML实例存储在字段中或者XML类型的变量中。
注意存储在XML中的数据不能超过2GB。
五、SQLserver中易混淆的数据类型
1、char、varchar、text和nchar、nvarchar、ntext
char和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。
所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;
而变长字符数据则不会以空格填充。
text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
后面三种数据类型和前面的相比,从名称上看只是多了个字母"
n"
,它表示存储的是Unicode数据类型的字符。
写过程序的朋友对Unicode应该很了解。
字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。
nchar、nvarchar的长度是在1到4000之间。
和char、varchar比较:
nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;
而char、varchar最多能存储8000个英文,4000个汉字。
可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
2、datetime和smalldatetime
datetime:
从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒。
smalldatetime:
从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。
3、bigint、int、smallint、tinyint和bit
bigint:
从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据。
int:
从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据。
smallint:
从-2^15(-32,768)到2^15-1(32,767)的整数数据。
tinyint:
从0到255的整数数据。
bit:
1或0的整数数据。
4、decimal和numeric
这两种数据类型是等效的。
都有两个参数:
p(精度)和s(小数位数)。
p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从1到38之间的值。
s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p之间的值,默认小数位数是0。
5、float和real
float:
从-1.79^308到1.79^308之间的浮点数字数据。
real:
从-3.40^38到3.40^38之间的浮点数字数据。
在SQLServer中,real的同义词为float(24)。
六、数据库表及字段命名、设计规范
(1)表的前缀必须是系统英文名称或模块英文名的缩写(大写)。
如果系统功能简单,没有划分为模块,则可以以系统英文名称的缩写(大写)作为前缀,否则以各模块的英文名称缩写(大写)作为前缀。
如果有一个模块叫做ORG(缩写为ORG),那末你的数据库中的所有对象的名称都要加上这个前缀:
ORG_+数据库对象名称,ORG_CstInfo标示组织结构模块中的客户信息表
(2)表的名称必须是易于理解,能表达表的功能的英文单词或缩写英文单词,无论是完整英文单词还是缩写英文单词,单词首字母必须大写。
如果当前表可用一个英文单词表示的,请用完整的英文单词来表示;
系统资料中的客户表的表名可命名为:
SYS_Customer。
如果当前表需用两个或两个以上的单词来表示时,可采用两个英文单词的缩写形式;
系统资料中的客户物料表可命名为:
SYS_CustItem。
(3)表名称不得超过三个英文单词。
(4)在命名表时,用单数形式表示名称。
例如,使用Employee,而不是Employees。
2、表字段命名规范
数据库字段的命名必须遵循以下规范:
(1)采用有意义的字段名。
字段的名称必须是易于理解,能表达字段功能的英文单词或缩写英文单词,无论是完整英文单词还是缩写英文单词,单词首字母必须大写。
如果当前字段可用一个英文单词表示的,请用完整的英文单词来表示;
系统资料中的客户表中的客户地址名可命名为:
Address。
如果当前字段需用两个或两个以上的单词来表示时,可采用两个英文单词的缩写形式。
建议尽量用完整英文单词来命名字段名称。
(2)字段名称不得超过三个英文单词。
(3)系统中所有属于内码字段,其应不代表任何业务字段信息。
系统建议采用全球唯一号GUID(从程序界面中获得并存贮)。
字段名称为:
代表当前表的英文单词+“GUID”;
数据类型为varchar(40)。
例如在客户资料中需要一个内码来唯一标识一笔客户信息。
则此内码字段为:
CustomerGUID;
请注意,此内码与给每个客户一个客户编号CustomerID有区别。
(4)系统中属于是业务范围内的编号的字段,其代表一定的业务信息,这样的字段建议命名为:
代表当前这字段含意的英文单词+“ID”;
职工编号EmployeeID;
客户编号:
CustomerID;
货料编号:
ItemID等等。
3、表字段设计规范
所有字段在设计时,除以下数据类型timestamp、image、datetime、smalldatetime、uniqueidentifier、binary、sql_variant、binary、varbinary外,必须有默认值。
字符型的默认值为一个空字符值串’’;
数值型的默认值为数值0;
逻辑型的默认值为数值0;
其中:
系统中所有逻辑型中数值0表示为“假”;
数值1表示为“真”。
datetime、smalldatetime类型的字段没有默认值,必须为空。
第三章建立约束和添加关系
一、数据的完整性和约束
检验行数据及列数据是否符合要求
①实体完整性约束:
索引、唯一键、主键、标识列
②域完整性约束:
输入有效性,如数据类型、检查约束、输入格式、外键、默认值、非空约束
③引用完整性约束:
保持表之间已定义关系,主、从表关系
④自定义完整性约束:
自定义特定规则
①主键约束:
(primarykey)指定列不能有重复数据、唯一不同身份的区别。
当列被指定为主键是,其特征为:
值不允许重复;
不能为null;
一个表中可以有一个或多个主键,多个主键用ctrl选择。
当一个表中无法创建主键时,可以创建标识列(identity)作为主键
②外键约束:
(foreignkey)主表和从表之间的关系约束,可以有多个
③唯一性约束:
(uniqe)指定列值的唯一性,功能同主键
④非空约束:
(notnull)可指定列是否允许为空
⑤默认值约束:
(default)在值为空的情况下采用默认值
⑥检查约束(check)检查输入的合法性
二、关系条件表达式
1、条件运算符
大于(>
);
小于(<
等于(=);
大