in和exists的区别
in保留子查询结果,先子查询,再主查询
exists不保留子查询结果,先外查询,再用主查询的结果集去进行子查询过滤处理。
子查询当查询字段在内部不存在时,会使用外部的字段。这个时候类似于exists查询。
外部查询从第一个记录开始放入子查询中使用。
mysql与sqlserver的差异
mysql计算年龄等时间
计算时间最好先通过格式化方法,将时间格式化之后就可以进行+-计算。
sql排名
OVER(PARTITION BY... ORDER BY...)的使用说明和意义
1、ROW_NUMBER
定义:ROW_NUMBER()函数作用就是将select查询到的数据进行排序,每一条数据加一个序号,他不能用做于学生成绩的排名,一般多用于分页查询
select ROW_NUMBER() OVER(order by [SubTime] desc) as row_num,* from [Order]
1、2、3、4,不保留重复
2、RANK
rank函数用于返回结果集的分区内每行的排名, 行的排名是相关行之前的排名数加一。简单来说rank函数就是对查询出来的记录进行排名,与row_number函数不同的是,rank函数考虑到了over子句中排序字段值相同的情况,如果使用rank函数来生成序号,over子句中排序字段值相同的序号是一样的,后面字段值不相同的序号将跳过相同的排名号排下一个
1、1、3、4,跳过排名,保留重复
3、DENSE_RANK
dense_rank函数的功能与rank函数类似,dense_rank函数在生成序号时是连续的,而rank函数生成的序号有可能不连续。dense_rank函数出现相同排名时,将不跳过相同排名号,rank值紧接上一次的rank值。
1、1、2、3,不跳过排名,保留重复
4.NTILE()
sql tile分组 先总记录数/总区数,平均分配给每个区。然后再总记录数%总区数,从第一个区开始给每个区分配1条记录,直到分完余数。
定义:NTILE()函数是将有序分区中的行分发到指定数目的组中,各个组有编号,编号从1开始,就像我们说的’分区’一样 ,分为几个区,一个区会有多少个。
将结构集分区安排,ntilt(3)分三个区。是分区不是排序!
1,位于1号区
1,位于1号区
2,位于2号区
3,位于3号区
case
只作用于已查询的记录的字段操作,
case后是字段名,其他是字段值
最后是END。
语法:
CASE name
WHEN 'a' THEN 'A'
[WHEN 'b' THEN 'B']
[ELSE 'C'] END
说明:
if name==a,则name=A
if name==b,则name=B
else name=C。
简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
1893

被折叠的 条评论
为什么被折叠?



