第四章 SQL Server 2008数据表管理
字段的数据类型
整数
Bigint、int、smallint、tinyint
小数
decimal、numeric
货币
money、smallmoney
浮点型
float、real
二进制
Bit
字符数据类型
Char()后面跟长度
Nchar
Varchar
Text
nvarchar
ntext
日期和时间数据类型
Datetime:存储日期从1753年到9999年,时间精度为3.33毫秒
smalldatetime:存储日期从1900到2079,时间精度为1分钟
二进制数据类型
binary、varbinary与char、varchar差别相同
image:存储图像信息
创建表
Create table table_name
(
<column_definition>|<table_constraint>|column_name
列名 数据类型 表名
as computed_column_expression
on filegroup |default
文件组
textimage on filegroup|default
)
临时表
本地临时表:以#打头,仅对当前的用户连接可见,当用户断开连接时自动被删除
全局临时表:以两个数字符号##打头,创建后对任何用户都是可见的,当用户断开连接时自动被删除
(一个用户就是一个新建查询)
修改表
Exec sp_rename'表名'
修改列
Alter table 列名
设置列内具体信息
Alter column
删除列
Drop 列名
用户自定义数据类型
必须包括的三个参数:
数据类型的名称
所基于的系统数据类型
数据类型的可空性
使用规则
一个列只能使用一个规则,但是一个规则可以应用于多列。
一个列可以使用多个check约束,但是一个约束只能应用于一个列
Create rule rule_name
规则名
As
Condition_expression
取值表达式
第五章 操作架构、索引和视图
创建视图(查看某列,进行保存)
Create view view_name(view_column_name)
视图名 列名
As query_expression
With check option
修改和删除视图
Alter view <view_name><column name list>
As
<select statement>
[With check option]
视图修改数据
注意事项
Select列表中含有DISTINCT
select列表中含有表达式,如计算列、函数
在FROM子句中引用多个表
引用不可更新的视图
Group by或者having子句
只能在视图里含有的数据进行修改
索引
是一个单独的物理的数据结构,是某个表中的一列或者若干列的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单表的存储由两部分组成,一部分用来存放表的数据页面,另一部分存放索引页面。
索引一旦创建,将由数据库维护和自动管理
优点:
1.保证数据记录的唯一性
2.加快数据检索速度(最重要优点)
3.加快表与表之间的连接速度
4.在使用order by和group by子句中进行检索数据时,减少时间。
5.在检索数据的过程中使用优化隐藏器,提高系统性能
创建索引
Create
[unique] [clustered][nonclustered]
微型索引 聚集索引 非聚集索引
Index index_name
On
Table_name(column_name)|view_name
一个表可以创建一个聚集索引和多个非聚集索引
删除索引
Drop index_表名.索引名
全文索引
使用原因:文件特别大的话,就使用
创建架构
Create schema schema_name_clause [架构权限]
Authorization owner_name
架构所有者
架构可以赋予架构所有者权限
聚集索引和非聚集索引
聚集索引:确定表中数据的物理数据,用物理数据来排列数据。
何时使用聚集索引?
1.含有大量非重复的列
2.使用between,>,>=,<,<=返回一个范围值的列
3.被连续访问的列
4.返回大型结果集的查询
5.经常被使用连接或group by子句的查询访问的列
非聚集索引:数据存储在一个位置,索引存储在另一个位置,索引的项目按索引值的顺序存储,表中的信息可以不用顺序存储
非聚集索引与聚集索引具有相同的B-Tree结构,但是有重大区别
1.数据行不按非聚集索引键的顺序排序和存储
2.非聚集索引的页层不包含数据页,相反叶节点包含索引行。
第六章 数据查询和管理
Select语法格式
Select [all|distinct] select list as 指定列名
消除重复列 列名
From table_source
表名
Where search_conditions
条件
Group by group_by_expression
进行分组进行查询
Having search_conditions
进行判断
Order by order_expression
进行排序
排序
Order by 列名 desc/asc
降序 升序
分组
Group by
按照规则分类汇总,进行合并。
Rollup 多出一行平均值
使用函数
Select Top 3 列名 表示前三行信息
使用having子句
Having 聚合函数+条件
插入数据
Insert [into] table_or_view[(column_list)] values data_values
数据值
Insert select语法格式
Insert table_name(column_list)
表名 (无数据) 列名
Select column_list
From table_list
其他表名(有数据)
Where search_condirions
条件
Select into语句语法
Select<select_list>
需要查看的列
Into new_table
From<table_source>
Where<search_condition>
Select into与insert select区别
Select Into 是新建一个表不是在原有的表上插入数据
Update语句
Update [top] table_name|view_name
行数
set
Column_name[=expression]
Where [search_conditions]
update语句中使用from子句
delete语句
Delete from table_name
Where search_condition
Top关键字和top表达式
Top (expression)[percent]
With ties(如果数据相等,但是大于了相应的百分比,也可以加入进来)
compute子句
Compute
Avg|count|max|min|stdev|stdevp|var|varp|sum
Expression
By expression
第七章 操作查询
基本连接
内连接
Select select_list
From table1 [inner] join table2 [on join_conditions]
条件
内连接实现效果是一样的,只是表达形式不同
外连接
返回from子句中提到的至少一个表或者视图的所有行,只要符合这些行的搜索条件。
全连接包括左外连接和右外连接
交叉连接
不带where子句时,返回的是被连接的两个表所有数据行的笛卡儿积
语法格式
Select select_list
From table1 cross join table2
Where search_conditions
Order by order_expression
联合查询
两个select语句中间用union [all]
有all的话就会把重复的项保存。
使用子查询
子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块。当一个查询是另一个查询的条件时,称之为子查询。
xml查询
XML是可扩展标记语言
是 英文 eXtensible Markup Language 的简写
用来传输和存储数据。
For xml子句
能将查询出的数据转换成xml格式的数据.
exists关键字查询
判断子查询是否有结果
交查询
两个select语句中间用intersect
差查询
两个select语句中间用except
在一个结果集的基础上去除第二个结果集上相同的数据
第八章 Transact-SQL编程
Transact-SQL
分为三种基本类型
数据定义语言:drop、alter表
数据操纵语言:对数据进行增删改查
数据控制语言:安全性进行控制
常量与变量
Declare
@local_variable [as] 数据类型
变量名
给声明的局部变量赋值
Set @local_variable=expression
Select @local_variable=expression
if条件语句
If Boolean_expression
Else
Case语句
Case input_expression
When when_expression Then result_expression
Else else_expression
End
while语句
While Boolean_expression
Break
跳出整个循环
Continue
跳出本次循环
waitfor延迟语句
Waitfor
{
Delay time
Time time
}
Try catch错误处理语句
Begin try
{}
End try
Begin catch
{}
End catch
数学函数
ABS返回数值表达式绝对值
ceiling返回大于或等于数值表达式的最小整数
floor返回小于或等于数值表达式的最大整数
sing返回表达式的正号、负号或零
square返回表达式平方
sqrt返回表达式平方根
字符串函数
日期和时间函数
标量值函数
声明函数
Create function function_name
Returns scalar_return_data_type
as
Begin
Function_body
Return scalar_expression
End
表值函数
声明函数
Create function function_name
Returns table
As
return
表值函数与标量值函数不同
表值函数返回的是一张表结果,就和一个select查询语句一样,只不过里面带入了参数或者很复杂;
标量值函数返回的只是一个值
游标的声明
Declare coursor_name [insensitive] [scroll] cursor
使更新不受影响 可以跳跃提取
For select_statement
For {read only|update }
只读 可修改
释放游标
Deallocate coursor_name
操作游标
步骤
打开游标
Open 游标名称
检索游标
Fetch
[next|prior|first|last|absolute]
检索标识 指定行
From 游标名
Into
赋值给
关闭游标
close
释放游标
Deallocate
判断游标提取状态
0 fetch语句成功
-1 fetch语句失败或者行不在结果集中
-2 提取的行不存在
事务
Begin transaction 开始事务
Commit transaction 提取
Rollback transaction 回滚
Save trasaction 挽救
锁
就是一个事务向系统提出请求,对被操作的数据加锁,其他事务必须等到此事务解锁之后才能访问该数据。
共享锁:用于读操作
独占锁:用于写操作
更新锁:
系统与原数据函数
Convert() 将一种数据类型的数据转换成另一种数据类型的数据
Current user 返回当前用户的名称
Isdate() 判断它的输入是不是一个有效的日期
Isnull() 用一个指定替换值替换任何空值
Isnumeric() 判断它的输入是不是一个数值
事务模式
自动提交事务
显式事务
隐式事务
批处理级事务
死锁
相互等待或者互斥