学习、是一个不停充电、扩充知识面的过程,而定时输出,就是将这些过程转化成自己知识的一个结果。
一、基础查询
1.1.语句查询
执行顺序:
开始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER BY子句->最终结果
--如:
SELECT Memberid FROM dbo.base_Dealers
WHERE CreateTime>='2020-01-01'
GROUP BY Memberid
HAVING Memberid>100
ORDER BY Memberid DESC
使用Group By子句的时候,一定要记住下面的一些规则:
1.1.1.不能Group By非标量基元类型的列,如不能Group By text,image或bit类型的列
1.1.2.Select指定的每一列都应该出现在Group By子句中,除非对这一列使用了聚合函数;
1.1.3.不能Group By在表中不存在的列;
1.1.4.进行分组前可以使用Where子句消除不满足条件的行;
1.1.5.使用Group By子句返回的组没有特定的顺序,可以使用Order By子句指定次序。
二、常用关键字
2.1.增删改查
insert/delete/update/select
删除:
delete:语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作(谨慎操作)
truncate:则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。(使用较少)
drop:删除表结构及所有数据,并将表所占用的空间全部释放(几乎不使用)
2.2 case when then:字段判断
--简单case函数
case sex
when '1' then '男'
when '2' then '女'
else '其他' end
--case搜索函数
case when sex='1' then '男'
when sex='2' then '女'
else '其他' end
/*这两种方式可以实现相同的功能,简单的和搜索比较,功能方面会有些限制,比如写判定式
将sum与case结合使用,可以实现分段统计 sum(case ..........)*/
2.3.convert():日期转换
/*
定义和用法
convert()函数是把日期转换为新数据类型的通用函数
convert()函数可以用不同的格式显示日期/时间数据
语法:
convert(data_type(length),data_to_be_converted,style)
1 2 3
1:规定目标数据类型(带有可选的长度)
2:含有需要转换的值
3:规定日期/时间的输出格式
可以使用的style值:
style id style格式
100 mon dd yyyy hh:miAM (或者 PM)
102 yy.mm.dd
120 yyyy-mm-dd hh:mi:ss(24h)
(100-114,120,121等等)
*/
Data函数:
GETDATE() :返回当前日期和时间
DATEPART():返回日期/时间的单独部分
DATEADD():在日期中添加或减少指定的时间间隔
DATEDIFF():返回两个日期之间的时间
CONVERT():用不同的格式显示日期/时间
2.4.identity:自增设置
/*
含义:
identity表示该字段的值会自动更新,不需要进行维护,通常情况下不可以直接给identity修饰的字符赋值,否则编译时会报错
语法:
列名 数据类型 约束 identity(m,n)
m表示的是初始值,n表示的是每次自动增加的值
如果m和n的值都没有指定,默认为(1,1)
要么同时指定m和n的值,要么m和n 的值都不指定,不能只写其中的一个值,不然报错
重新设置identity
语法:
dbcc checkident(表名,reseed,n)
n+1表示的是表中identity字段的初始值(n可为0)
向identity字段插入数据
语法:
set identity_insert 表名 on;--打开插入权限
insert into 表名(列名1,列名2) values (值1,值2)--插入指定identity字段的值以及其他字段
set identity_insert 表名 off;--关闭插入权限
*/
2.5.format(): 字段显示格式化
/*
用于对字段的显示进行格式化
语法:
select format(column_name,format) from table_name
column_name:必须,要格式的字段
format:必须,规定格式
*/
2.6.replace(): 字符的替换
/*
用第三个表达式的内容去替换第一个字符串表达式中出现的所有第二个给定字符串表达式
REPLACE("string_replace1","string_replace2","string_replace3")
REPLACE(AreaName,'-','')
当areaname中出现-,用空白替换
*/
2.7.charindex(): 字符串所在的位置
--charindex('-',dealerscode) 字符串所在的位置
SELECT CHARINDEX('符','我是字符串') --4
SELECT CHARINDEX('0', 2020) --2
SELECT CHARINDEX(2, 2020) --参数数据类型 int 对于 charindex 函数的参数 1 无效。
2.8.with: 简化联合子查询的sql代码
/*with主要用法之一就是简化联合子查询的sql代码,先将要用的子查询定义成一个表,后面可以重复使用。
在多级和较为复杂的查询中可以让SQL更清晰*/
--如:
WITH temp AS (SELECT DealersID FROM dbo.base_Dealers)
SELECT*FROM temp