- 升序ASC 降序DESC
- 统计某个字段count(字段),一般都需要根据该字段分组group by(字段)
- having的作用相当于where,但是where关键字不能与合计函数一起使用(例:sum、count ),并且having一般用于group by后面,where用于group by前面。
- exists 、not exists 和in、not in的区别:in和not in会放弃索引,导致in中条件每一次查询都会走一遍全局搜索,exists子句返回boolean值,要求两张表有关联才可以,外表查出的每条数据与内表条件进行比较,如果满足,则输出该条查询结果。
- Stuff函数:用于修改某个字段特定位置的值(例:stuff(eeid,2,1,’521’))修改字段eeid,从第二位开始,删除一位,改为521。Left函数:left(source,num)返回左起num个字符。charindex()函数:返回字符串中某个指定的子串出现的开始位置,初始位置记为1,charindex(指定字符串,原始字符串)。
- Convert函数:把日期转换成新数据类型的通用函数,可以用不同的格式进行展示(例:convert(varchar(20),date,110))110就是要转换成的数据格式,需要什么格式自行查询格式代码。
- substring函数:截取某字段固定长度(例:substring(eename,2,5))截取eename字段第二位到第五位的数据。
- 改变表中的列: alter table table _name ADD(新增)/DROP(删除)/ALTER(修改) column column_name datatype
- 获取当前日期GETDATE()
- 获取年YEAR(日期数据或字段)
- 连接相同的表时,需要给该表起一个别名
- Sql server同义词:可以让跨数据查询的sql语句更简洁。创建同义词语法:create synonym xxx FOR 数据库.表名,使用:select * from xxx;(使用同义词代替其他数据库中的表名)
- 使用Nvarchar()数据类型不用担心输入的字符是汉字还是英文,统一使用unicode字符集编码,解决了中英文同时存在时造成混乱的问题,每个字符占两个字节,最多存储4000个字符,varchar最多存储4000个英文或者8000个中文。
- 建表时写Identity(1,1),表示该列为自增列,从1开始累加,每次加1。
- 使用大值类型varchar(max)、nvarchar(max)来代替text、ntext,因为大值类型在行为上拥有varchar所有的行为,在存储上和text一样大~~~~~何乐而不为呢,hiahiahia
- case函数:
简单case表达式:
case xxx
when ...then ...
else ...
end
case搜索表达式:
case
when xxx=xxx then ...
else ...
end
区别:简单case函数简洁,只适用于单字段单值比较,case搜索函数适用于所有比较(包括多值比较)
17. 内联表值函数和标量值函数:
(1)内联表值函数返回的是表,标量值函数返回的是基类型。
(2)内联表值函数没有函数主体,表是单个select语句的结果集,标量值函数需要用begin...end将函数主体包起来。
(3)内联表值函数不需要指定所有者,可以将其理解为一张单独的表,标量值函数需要指定所有者,例:dob.biaoliang_name。
18. WITH AS关键字:
(1) with as短语,也叫做子查询部分,定义一个sql片段,该sql片段会被整个SQL语句用到。
(2)如果with as短语定义的表名被调用两次以上,则优化器会自动将短语所获取的数据放入一个全局临时表中,若只被调用一次则不会。
(3)语法:
;with
my_name
as(子查询生成的表)
19.if else条件表达式:
即:简单的条件表达式,语法如下
if xxx...
BEGIN
.....(代码块)
END
ELSE(注意这里没有ELSE IF,要实现只能在下面继续用IF做判断)
BEGIN
......(代码块)
END
20. 将一张表中的数据插入另一张表可以直接使用如下语句
insert into 目标表
(可以直接使用select语句,从数据表查询对应字段的数据)
21.存储过程
存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它,即:使用execute来执行存储过程。存储过程可以加速SQL语句的执行,并且存储过程的返回值只是指明执行是否成功。存储过程是数据库层次的东西,一般我们在程序中使用sql语句都会在DBMS中经过编译运行,而存储过程是经过预编译的,因此执行速度更快。而且相比较把数据库相关的操作放到数据库中要比直接放到页面中“安全”。
22.ISNULL函数:
ISNULL(value1,value2) 如果value1为NULL结果返回value2的值,如果value1不为NULL返回value1的值。
23.LTRIM函数:
移除字符串左侧的空白字符或其他预定义字符,同理RTRIM移除右侧的。
24.raiserror函数:
用于抛出一个异常或错误,这个错误可以被程序捕捉到。
常用参数配置:
raiserror(param1,param2,param3,param4)
param1:错误信息号(大于50000)或一条直接的错误描述。
param2:错误信息级别,用数字表示
param3:state,标识符,用数字1~127表示,用来标识错误的发生位置。
param4:如果param1中包含一些替代符(例如%s),param4就是替代符的具体值。
示范:set @error_mes='这里是用户%s引发的错误描述'
raiserror(@error_mes,16,1,'张三')
25.charindex函数:
使用方法:charindex(value1,value2),判断value2在value1中第一次出现的位置,如果不存在返回0。
26.使用like存在多个条件时:
普通写法:like ' %xxx ' (匹配以xxx开头的值)
多个条件:like ' %[param1 | param2 | param3] ' (匹配以param1或param2或param3开头的值)
27.SUBSTRING函数用来截取字段
其有三个参数(1.要截取的字段或值,2.开始位置,3.结束位置)
28.向查询结果中添加自定义字段
使用 select '实际值' as '字段名' 的形式,其中可以使用case when表达式给实际值赋值。
29.DATEADD函数(简单的日期加减操作函数):
三个参数:
(1)操作的位置(日期,年份,月份)
(2)操作的数值(增加或者减少)
(3)初始日期
30.REPLACE函数(简单的字符串替换函数):
三个参数:
(1)操作的数据源
(2)要替换的字符串
(3)要替换成的字符串
31.SqlServer中将查询结果拼接成字符串:
for xml path(param)--将查询结果以xml格式输出,path后面没有参数时,每行数据被默认<row>标签包裹,每行列数据被被其列名标签包裹,可以设置path的值为(' '),并且在每个字段后面+‘ ’就可以去掉标签。
32.触发器
关键字如下
for:操作前触发
after:操作后触发
instead of:将操作替换成触发器中的sql脚本
创建语句:
create trigger chufa_name on table_name
xxx(关键字) of (insert/update/delete) ------当使用for或after关键字时of省略不写
as
begin
xxx(触发时需要执行的操作)
end
触发器中怎么判断是insert、update还是delete操作?
sql server中自带两种表:Inserted、Deleted表
Inserted表:当执行插入或更新操作时,新建行被同时添加到Inserted表中。
Deleted表:当执行删除操作时,删除行被添加到Deleted表中。
33.视图:
(1)使用视图,可以定制用户数据,聚焦特定的数据。
(2)可以简化数据操作
(3)视图是动态的数据的集合,数据随着基表的更新而更新,且视图是虚拟的,物理上不存在,用户不可以随意更改或删除。
(4)创建视图的语句:
create view view_name
as
xxx(此处的xxx可以是select语句,将查询出的数据生成视图)
go
34.set和select给变量赋值的区别:
(1)同时给多个变量赋值时,set使用,间隔会报错,select则不会。
(2)表达式返回多个值时,set会报错,select会返回表达式返回的最后一个值,
(3)表达式未返回值时,set会给变量赋值为null,而select会保留变量的初始值。(注意:当表达式是标量子查询时,如果查询结果为null,select也会给变量赋值为null)
(4)标量子查询:查询的表来自标量函数。
35.若要返回表结构数据,使用select,若要返回字符串,直接使用Print