类型转换函数
convert函数:convert(类型(长度),表达式)
cast函数:cast(表达式as类型)
select 1+2 --求和
select'a'+'b' --拼接
select'cbd'+convert(varchar,2) --把数字转换成字符串,拼接
select convert(varchar(10),getdate(),100) -- 日期格式
select cast('2019-11-13 00:00:00:000' as varchar(20))
select'cbd'+cast(2 as varchar) --要转换成的目标数据类型
字符串操作函数
--返回字符串中指定的子串出现的开始位置
select CHARINDEX('bc','abcdbc') --2 索引从1开始
--返回字符串中指定的子串出现的开始位置 子串前后必须带%
select PATINDEX('%bc%','abcdbc') --2
--大小写转换
select upper('ABCdefg') --ABCDEFG
select lower('ABCDEF') --abcdef
--取长度
select len('ABC')
--去空格
select LTRIM(' dbcd ') --'dbcd '去掉左边的空格
select RTRIM(' dbcd ')--' dbcd' 去掉右边的空格
--取子串
select LEFT('dbcddfeef',4)--dbcd 返回字符串从左边起4个字符
select RIGHT('dbcddfeef',6)--ddfeef 返回字符串从打开边起6个字符
select SUBSTRING('dbcddfeef',3,4)--cddf 返回字符串从左边起第3个开始,取4个字符
-- 将指定字符串重复4次后生成的字符串
select REPLICATE('abc',4)--abcabcabcabc
--字符串翻转
select REVERSE('abcdefg')--gfedcba
--字符串替换
select REPLACE('abcdefg','cd','ss')--abssefg
--用指定子串替换指定位置指定长度的子串后生成的字符串
select STUFF('abcdefg',2,3,'tt')--attefg
索引
索引的介绍
- 索引的作用:数据的查询 处理速度 —应用系统成败的标准。 最普遍—优化方式
- 索引是什么?一本书 目录 查找
- 索引—目录,快速的定位我们要查找的数据,而不必去扫描整个表—从而可以加快我们查询的速度—提高系统的性能。
- 索引有缺点:占用存储空间,索引并不是越多越好,索引并不总是能提高系统性能的。
- 索引的目的:可以更加快速高效地查询数据,减少系统的响应时间。
- 索引分为 聚集索引(如主键索引) 非聚集索引(如唯一索引)
聚集索引:Clustered 逻辑顺序与物理顺序是一致的 最多只能有一个,可以没有
非聚集索引:NonClustered 逻辑顺序与物理顺序是并不一致的 一个表可以用多个,也可以没有
非聚集索引比聚集索引 效率低
如果需要多个列上建立索引,这些列建立组合索引。
列:小数据类型的, 访问速度特别快。
索引是看不见的,但是如果你创建了索引,在查询大数据的时候,它的优势就是显而易见的。
脚本创建索引
drop_existing = on
先检查是否存在名称为PK_ProductInfo的索引,则先删除再创建,
如果已存在,则创建成功。
如果不存在,执行时直接报错。
drop_existing = off
不检查是否存在名称为PK_ProductInfo的索引,直接创建,
如果已存在,执行时直接报错。
如果不存在,则创建成功。
--默认非聚集
--聚集 主键索引
create clustered index PK_UserInfos
on UserInfos(UserId)
with
(
drop_existing=on
)
--唯一非聚集索引
create unique nonclustered index uq_UserInfos
on UserInfos(UserName)
with
(
pad_index=on, --当设置fillfactor才有用
fillfactor=50, --指定创建索引时,每个索引页的数据占索引页大小的百分比
ignore_dup_key=on
)
--fillfactor:
//读写比:100:1 100
//读写比:50:50 80~90
//读<写 50~70
--复合索引:多个列上建立的索引
create nonclustered index Index_UserInfos
on UserInfos(UserName,DeptId)
with
(
drop_existing=off
)
视图
视图的介绍
- 视图:虚拟表 由一个或多个表通过查询而定义的 将查询定义保存起来,实际不包括数据
- 与表的区别:表存储数据的地方,视图存储的是查询语句(索引视图除外,具体化了)
- 作用:简化查询 增加数据的保密性 安全性上得到保证
- 缺点:只是简化查询,并不提高查询速度 增加了维护成本
- 分类:标准视图:存储查询定义 没有存储数据
索引视图(被具体化了的,创建了索引,显著提高查询性能,聚合了很多行的查询,不太适合经常更新基本数据集)
分区视图:一台或多台服务器间水平连接一组成员表的分区数据
脚本创建视图
创建标准视图
语法:
create view 视图名称
as
T-SQL查询语句
--标准视图
create view vUserInfosNew
as
--T-SQL查询语句
select UserId,UserName,u.DeptId,DeptName
from UserInfos u
inner join DeptInfos d
on d.DeptId=u.DeptId
--使用视图 就和使用表一样
select * from vUserInfosNew
where DeptId>1
order by UserId desc
--索引视图 适合于聚合多行数据的情况下
--数据是实际存在,删除视图里的数据,基础表里的数据也被删除
--索引视图不要去删除修改数据
--*不可以出现 必须写字段名,表名前面要加所有者 dbo
create view vUserInfos_Index with schemabinding
as
select UserId,UserName,Age from dbo.UserInfos
--使用
select * from vUserInfos_Index
--索引视图创建唯一聚集索引
create unique clustered index uq_vUserInfos_Index
on vUserInfos_Index(UserId)
--分区视图
create view vTestInfos
as
select * from Test
union all //允许重复
select * from Test3
--使用视图
select * from vTestInfos
标准视图与分区视图 都不允许删除修改里面的数据,会影响基础表
索引视图 删除了,对应的基础表数据也被删除了,慎用。