SQLServer重点整理
1、数据库技术发展经历了人工管理、文件系统、数据库系统三个阶段
2、数据库系统的组成:数据库(数据)、数据库管理系统、数据库管理人员、支持数据库系统的软件和硬件(应用开发工具、应用系统等)、用户五部分
3、数据库三级模式结构:
1.模式:逻辑模式或概念模式,所有用户的公共数据视图,一个数据库只有一个概念模式。
2.外模式:用户模式,是数据库用户的数据视图。外模式是逻辑模式的子集,一个数据库可以有多个外模式。
3.内模式:存储模式。一个数据库只有一个内模式,是数据物理结构和存储方式的描述,是数据在数据内部的表示方式。
4、数据模型:描述数据之间的的联系,语义等概念的集合,包括数据结构、数据操作(关系操作集合)、完整性约束3个部分。
5、常见的数据模型:层次模型、网状模型、关系模型
6、关系模型术语:
1.关系:一个二维表就是一个关系
2.元组:二维表中的一行,即表中的记录
3.属性:二维表中的一列,用类型和值表示
4.域:每个属性取值的变化范围,如性别的域为、
7、关系中的数据约束:
1.实体完整性约束:约束关系的主键中属性值不能为空值
2.参照完整性约束:关系之间的基本约束
3.用户定义的完整性约束:反映具体应用中数据的语义要求。
8、关系数据库的规范化:
1.第一范式:消除重复字段(无重复属性,无重复列)
2.第二范式:消除部分依赖
3.第三范式:消除传递依赖,非主关键字全部依赖于主关键字
9、数据库常用对象:
1.表:二维表,包括行和列。
2.字段:表中的每一列成为一个字段,字段具有自己的属性:字段类型、字段大小。
SQL规范支持五种基本字段类型:字符型、文本型、数值型、逻辑型和日期类型。
3.索引:单独的、物理的数据库结构,依赖于表建立。
4.视图:从一张或多张表中导出的表。
10、存储过程:为了完成特定功能的SQL语句集合(包含查询、插入、删除和更新等操作)
11、SQLserver命名规则:
1.标识符格式:
1.1标识符首字符必须是:字母、下划线“_”、
(局部变量或参数)、“#”(临时表或过程)1.2标识符的后续字符:字母、十进制数字、“_”、
、“#”或$1.3标识符不允许是保留字
1.4不允许有空格或其他特殊字符
2.标识符分类:常规标识符、分隔标识符(包含在“”或内的标识符,该标志符可以不符合),字符数必须在1~之间,对于本地临时表,标识符最多可以有个字符。
3.对象命名规则:
数据库对象的名字由1~个字符组成,不区分大小写,也可以使用标识符。数据库对象的完整名称应该由服务器名,数据库名,拥有者名和对象名。指定了所有4个部分的对象名称被称为完全合法名称。服务器名,数据库名,拥有者名即称为对象名称限定符。不允许存在四部分名称完全相同的数据库对象。
12、创建数据库:createdatabase数据库名称
修改数据库:ALTERDATABASE数据库名称
数据库更名:execSP_renamedb‘原名称’,‘更改后的名称’
删除数据库:dropdatabase数据库名称
13、基本数据类型:
1.整数数据类型:常用,可以存储整数或小数:bit、int、smallint、tinyint
2.货币数据类型:用于存储货币值,使用时在数据前加上货币符号,不加货币符号时默认为¥:money、smallmoney
3.浮点数据类型:用于存储十进制小数:real、float、decimal、numeric
4.日期/时间数据类型:用于存储日期类型和事件类型的组合数据:datetime、smalldatetime、date、datetime(2)、datetimestampoffset
5.字符数据类型:用于存储各种字母、数字和特殊符号:char、varchar、nchar(n)、nvarchar(n)--纯英文或者数字可以不带n
6.二进制数据类型:用于存储二进制数据:Binary、varbinary
7.图像和文本数据类型:用于存储大量的字符及二进制数据(binarydata):text、ntext、image
14、用T-SQL创建用户自定义数据类型:execSP_addtype类型名,类型,是否为空
execSP_addtypepostcode,char(8),notnull
15、创建表:createtable表名(列名类型约束,...,...)
16、修改表结构:Altertable表名ADD列名类型char(10)
ALtertable表名dropcolumn列名
17、删除表:droptable表名
18、向表中插入记录:insertinto表名(列名,列名,列名)values(...),添加所有字段时,可以省略列名
19、修改数据:update表名set列名=...where...
20、删除数据:deletefrom表名where...(如果不指定,则删除表中所有数据)
21、修改非空约束:altertable表名altercolumn列名原列类型null/notnull(altertablemingrialtercolumncolumn_nameintnull)
22、创建表时创建主键约束:
1.createtable表名(列名类型constraint约束名primarykey,...)
2.createtable表名(列名类型,列名类型,constraint约束名primarykey(列名,列名..))
23、现有表中添加主键约束:
altertable表名ADDconstraint约束名primarykey(列名,列名)
24、删除主键约束:
altertable表名dropconstraint约束名
25、创建表时创建唯一约束:
1.createtable表名(列名类型constraint约束名unique,...)
26、现有表中添加唯一约束:
altertable表名ADDconstrain约束名unique(列名)
27、修改唯一约束:必须删除现有unique约束,然后用新定义重新创建
28、删除唯一约束:altertable表名dropconstrain约束名
29、创建检查约束:createtable表名(列名类型constraint约束名check(列名in(...))
30、现有表中创建检查约束:altertable表名ADDconstraint约束名check(...)
如现有表中数据不符合约束,则约束无法创建成功(规则可以绑定成功,但是对现有数据不起作用规则是一个向后兼容的功能,用于执行一些与CHECK约束相同的功能。CHECK约束是用来限制列值的首选标准方法。CHECK约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个CHECK约束。CHECK约束作为CREATETABLE语句的一部分进行指定,而规则以单独的对象创建,然后绑定到列上。)
31、删除检查约束:altertable表名dropconstraint约束名
32、创建默认约束:createtable表名(列名类型constraint约束名default默认值)
constraint约束名可以省略,系统会指定默认约束名称
33、现有表中创建默约束:altertable表名ADDconstraint约束名default默认值for列名
34、删除默认约束:altertable表名dropconstraint约束名
35、创建外键约束:createtable表名(列名类型约束,constraint约束名foreignkey(列名,列名)references父表名(列名,列名)
36、现有表中添加外键约束:altertable表名addconstraint约束名foreignkey(列名,列名)references父表名(列名,列名)
37、删除外键约束:altertable表名dropconstraint约束名
38、表与表之间的三种关系:一对一关系、一对多关系、多对多关系。
39、T-sql的组成部分:数据定义语言、数据控制语言、数据操纵语言
40、数据定义语言:对数据对象(数据库、表、视图、索引等)进行创建和管理,create、alter、drop
41、数据控制语言:用于实现对数据库中的数据完整性、安全性的控制、grant、revoke
42、数据操纵语言:用于插入、修改、删除和查询数据库中的数据,insert、update、delete、select
43、T-SQL语句分类:
1.变量说明语句:用来说明变量的命令
2.数据定义语句:用来建立数据库、数据对象和定义列,大部分是以create开头的命令
3.数据操纵语句:用来操纵数据库中数据的命令,如select、insert、update、delete和cursor等
4.数据控制语句:用来控制数据库组件的存取许可、存取权限等命令,如grant、revoke等
5.流程控制语句:用于设计应用程序流程的语句,如ifwhile和case
6.内嵌函数:说明变量的命令
7.其他命令:嵌于命令中使用的标准函数
44、SQL中的常量:数字常量、字符串常量、日期和时间常量、符号常量
45、数字常量:整数常量、小数常量以及浮点常量(在数字常量的各个位之间不可以加逗号,例如,,浮点常量使用符号e来指定1.5e3,e读作“乘10的几次幂”)
46、字符串常量:常在单引号内,字母(大小写a-Z)、数字(0~9)或者特殊符号(~!
#¥%等)如果单引号中包含一个嵌入的单引号,可以使用两个单引号表示嵌入的单引号。
47、日期和时间常量:需要用单引号,SQL规定日期、时间和时间间隔的常量值被指定为日期和时间常量,‘/09/27’
48、符号常量:出用户提供的常量外,SQL包含几个特殊的常量,代表常用的数据值:current_date、current_time、current_timestamp
49、变量:局部变量、全局变量
50、局部变量:是用户可自定义的变量,作用范围仅在程序内部。局部变量必须以
开头,要符合标识符命名规则。51、声明局部变量:declare
varailble_namedatatypedaclare
someonechar(10)52、为局部变量赋值:select、set
use数据库名
declare
局部变量名nchar(10)selecte
局部变量名=列名from表名where列名=XXXor
decalare
bintselect(set)
b=153、为多个局部变量一起赋值:
declare
bint,Cint,....select(set)
b=1,c=2...54、全局变量:SQLserver系统内部事先定义好的变量,不用用户参与定义,任何程序均可随时调用。全局变量通常用于存储一些SQLserver的配置设定值和效能统计数据。SQLserver一going使用了30多个全局变量。以
开头。55、注释符:单行注释(--),多行注释/*、*/快捷键(Ctrl+K+C、Ctrl+K+U)
57、运算符:算术运算符、复制运算符、比较运算符、逻辑运算符、位运算符、连接运算符
58、算术运算符:加减乘除(+-*/)余(%)
59、比较运算符:、、=、=、=、(不等于)、!=、!、!
60、比较运算符返回结果:布尔数据类型:TRUE、FALSE及UNKNOWN
61、逻辑运算符:ALL、AND、ANY、BETWEEN、exists、in、like、not、or、some
62、逻辑运算符优先级:NOTANDOR
63、位运算符:(按位AND)、
(按位OR)、^(按位互斥OR,按位异或)、~(按位NOT)
64、位运算符的操作数:整数数据类型或二进制串数据类型(image除外)
65、运算符优先级:
(1)+(正)、-(负)、~(位反)
(2)*(乘)、/(除)、%(取余)
(3)+(加)、-(减)、+(字符串串联运算符)
(4)、、=、=、=、(不等于)、!=、!、!(比较运算符)
(5)^(按位异或)、
(按位或)、(按位与)
(6)NOT
(7)AND
(8)ALL、ANY、SOME、BETWEEN、IN、LIKE、EXIST、OR、NOT、AND(逻辑运算符)
(9)=(赋值)
66、通配符:
(1)%(包含零个或更多字符的任意字符)
(2)_(任何单个字符)
(3)[~](指定范围或集合中的任何单个字符)
(4)[^](不属于指定范围或集合的任何单个字符)
67、流程控制语句:BEGIN...AND、WAITFOR、GOTO、WHILE、IF...ELSE、BREAK、RETURN、CONTINUE
68、CASE函数:
CASEinput_expression(有效表达式)
WHENwhen_expression(同input_expression,数据类型必须一样,或者是隐性转换)
THENresult_expression(当input_expression=when_expression取值为true时,返回结果)
[n](占位符,表示可以使用多个WHEN...THEN...)
ELSEelse_result_expression(当比较运算取值不为true时返回的表达式,如果此参数省略且比较运算取值不为true,CASE将返回NULL值)
END
69、CASE搜索函数
CASE
WHENBoolean_Expression
THENresult_expression
[n]
ELSEelse_result_expressionEND
70、WHILE条件表达式BEGIN命令行
程序块END
71、WHILE...CONTINUE..BREAK
WHILE条件表达式BEGIN命令行
程序块[BREAK][CONTINUE]命令行
程序块END
其中,continue命令可以让程序跳过continue命令之后的语句,回到while循环的第一行命令。
break命令则让程序完全跳出循环,结束while命令的执行。
72、RETURN:用于从查询或过程中无条件退出。return语句可在任何时候用于从过程、批处理或语句块中退出。位于RETURN之后的语句不会被执行。
RETURN[整数值]括号内可以指定一个返回值。如果没有指定返回值,SQLserver系统会根据程序在执行的结果返回一个内定值。
73、GOTO:GOTO命令用来改变程序执行的流程,使程序跳到标识符指定的程序行再继续往下执行。
GOTO:标识符标识符需要在其名称后加上一个‘:’
74、WAITFOR:指定触发器、存储过程或事务执行的时间、时间间隔或者事件。还可以用来暂时停止程序的执行,直到所设定的等待时间已过才继续往下执行。
WAITFORDELAY‘时间’
TIME时间
DELAY:用来设置等待的时间,最多可达24小时
TIME:用来设定等待结束的时间点
75、常用命令:
DBCC(databasebaseconsistencychecker,数据库一致性检查程序)、
DBCCCHECKALLOC(检查指定数据库的磁盘空间分配结构的一致性)、
DBCCSHOWCONTIG(显式指定表的数据和索引的碎片信息)、
CHECKPOINT(用于检查当前工作的数据库中被更改过的数据页或日志页,并将这些数据从数据缓冲器中强制写入硬盘)、
DECLARE(用于声明一个或多个局部变量,游标变量或表变量)、
PRINT(向客户端返回一个用户自定义的信息,即显示一个字符串,局部变量或全局变量的内容)、PAISERROR(返回错误信息的同时返回用户指定的信息)、
READTEXT(用于读取text、ntext或者image列中的值,从指定位置开始读取指定的字符数)、BACKUP(将数据库内容或者其事务处理日志备份到存储介质上)、
RESTORE(将数据库内容或者其事务处理日志由存储介质还原到SQLServer系统中)、SELECT(除查询之外的功能,给变量赋值,可一次给多个变量赋值)、
SET(仅可一次给一个变量赋值)、
SHUTDOWN(立即停止SQLServer的运行)、
WRITETEXT(允许对数据类型为text、ntext或者image的列进行交互式更新)、
USE(用于在前工作区打开或关闭数据库)
76、聚合函数:SUM(求和)、AVG(平均值)、MAX(最大值)、MIN(最小值)、COUNT(计数)、DISTINCT(返回一个集合,并从指定集合中删除重复的元组)
77、HAVING:用来指定组或者聚合的搜索条件,与select一起使用,通常在groupby子句中
78、数学函数:数学函数数据类型:整型(int)、实型(real)、浮点型(float)、货币型(money)或smallmoney
79、常用数学函数及说明:
ABS(绝对值)
COS(三角余弦)
COT(三角余切值)
PI(圆周率)
POWER(乘以指定次方)
RAND(返回0~1之间的随机float数)
ROUND(将数字四舍五入为指定的长度或精度)
SIGN(返回指定表达式的零0、正号+1、或负号-1)
SIN(三角正弦)
SQUARE(平方)
SQRT(平方根)
TAN(三角正切)
80、字符串函数:数据类型:CHAR、VARCHAR、BINARY、VARBINARY或可以隐式转换为char或varchar的数据类型。
81、常用的字符串函数及说明:
ASCII(返回表达式最左端字符的ASCII代码值)、
CHARINDEX(返回字符串中指定表达式的起始位置)、
LEFT(从最左边开始,取得字符串左边指定个数的字符)、
LEN(返回指定字符串的字符个数,单双字节返回相同值)、
REPLACE(将指定的字符串替换为另一指定的字符串)、
REVERSE(返回字符表达式的反转)、
RIGHT(从右边开始,取得字符串右边指定个数的字符)、
STR(返回由数字数据转换来的字符数据)、STR(float_expression[,length[,decimal]]),总长度,小数点后的位数
SUBSTRING(返回指定个数的字符)、
82、日期和时间函数:
DATEADD:指定日期加上一段时间的基础上,返回新的datetime
DATEDIFF:返回跨两个指定日期的日期和时间边界数,
DATEDIFF(datepart,startdate,enddate)
DATEDIFF(DAY,-6-8,‘-9-7’)
GETDATE:返回当前系统日期和时间,无参数,返回29个字符
DAY:返回指定日期中的天的整数
MONTH:返回指定日期中的月份的整数
YEAR:返回指定日期中年份的整数
83、转换函数:CAST(expressionASdata_type)、CONVERT
84、显性转换:使用CAST、CONVERT将数值从一种数据类型转换到另外一种数据类型。
85、隐性转换:不是用转换函数,SQLSERVER自动处理某些数据类型的转换。
86、元数据函数:主要返回与数据库相关的信息
COL_LENGTH:返回列的定义长度(table,column)
COL_NAME:返回数据库列的名称,该列具有相应的表标志号和列标志号
DB_NAME:返回数据库名
OBJECT_ID:返回数据库对象标识号
87、SELECT
88、WITH子句:用于指定临时命名的结果集,这些结果集称为公用表达式。
eg.创建公用表达式,计算Employee数据表中Age字段中每一年龄员工的数量。
89、SQL数据查询基础:select..from..where..groupby...having..orderby...
90、COMPUTE子句:生成合计作为附加的汇总列出现在结果集的最后。
SELECT...FROM...RODERBY...COMPUTE聚合函数(包含两个结果集:1、选择列表中所有字段的详细记录;2、汇总函数合计的结果)
SELECT...FROM...RODERBY...COMPUTE聚合函数BY。。。(查询结果根据BY后的字段名称进行分组)
91、DISYINCT关键字:去重
92、TOP关键字:限制查询结果显示的行数selecttopn*from...
93、Union合并多个查询结果:两表合并,不做修改。
94、Union规则:
1、两个select语句选择列表中的列数目必须一样多,对应位置的列的数据类型必须相同或者兼容。
2、列的名字或者别名是由第一个select欲绝选择列表决定的。
3、可以为每个select都增加一个表示行的数据来源的表达式
4、selectinto必须放在第一个select里
5、合并操作默认去重,如需返回重复行,必须加ALL关键字
6、对于所有select语句的合并操作结果进行排序的ORDERBY子句,必须放到最后一个select里,但是排序列名必须是第一个select选择列表中的列名
95、UNION和联接的区别:
1、合并为上下合并,列的数据类型(相同或者兼容)和数量必须一样,联接为VLOOKUP
2、合并中,行的最大数量为两表行的‘和’,联接为‘乘积’。
96、Union中的自动数据类型转换
1、文本数据类型:字符长度短的列等于字符长度长的列的长度
2、数据类型:同文本类型,以长为准
97、Union合并不同类型的数据,须借助数据类型转换函数。
98、使用UNION合并不同列数的两个表:补列(添加NULL值)
99、使用UNION进行多表合并:可多达十多个
、子查询:嵌套在SELECT、insert、update或delete等语句中的查询。任何允许使用表达式的地方都可以用子查询。
、子查询语法规则:
1、不能包括