SQL一些学习

本文详细介绍了SQL中的关键函数如LAG,LEAD及其在OVER窗口函数中的使用,包括PARTITIONBY和ORDERBY的分组与排序,以及STUFF(),FORXMLPATH等字符串处理函数。此外,还涵盖了LEFT,RIGHT,FULLJOIN,排序函数如ROW_NUMBER,RANK,DENSE_RANK,NTILE,以及SQLServer2017的STRING_AGG和MERGEINTO操作的讲解。
摘要由CSDN通过智能技术生成

sql中的函数:lead,lag
LAG :数据从上往下,上端出现空格
Lead :数据从下往上,下端出现空格
一般有三个参数,1列名,2偏移位数,3 默认值
over() 表示 lag() 与 lead() 操作的数据都在 over() 的范围内,他里面可以使用 partition by 语句(用于分组) order by 语句(用于排序)。partition by a order by b 表示以 a 字段进行分组,再 以 b 字段进行排序,对数据进行查询。
例如:
LAG(CHGRF8, 1) OVER (PARTITION BY SYMBOL, CHGRF3 ORDER BY BEGINDATE, CHGRF1)

sql中的函数:STUFF() 
STUFF(要修改的字符串, 开始删除部分字符的位置, 删除的字符数, 新字符串)
如SELECT STUFF(‘abcdefg’, 1, 3, ‘HTML’) --HTMLdefg
Sql Server 的函数FOR XML PATH(‘‘)
FOR XML PATH 是将查询结果集以XML形式展现,将多行的结果,展示在同一行。

外关联(LEFT、right、FULL)+OUTER JOIN
OUTER 会省略
SQL WHILE 语句
1、先建临时表
CREATE TABLE #table
(FDATE VARCHAR(10),ZQDM VARCHAR(20),ZQMC VARCHAR(80))
2、WHILE语句
WHILE @DATE1 <= ‘20220101’
BEGIN
INSERT INTO #table
SELECT 语句
SET @DATE1 = dateadd(month, datediff(month, 0, dateadd(month, 2, @DATE1)), -1);–设置变量值
END; --结束循环
SELECT * FROM #table;–查看表
SQL insert 插值语句
INSERT INTO jkgh_xq_BESTIMATE_hts_ls
(TDATE1 ,EXCHANGE,SYMBOL,SNAME,STYPE)
Select 语句–插值内容
临时表删除语句
IF OBJECT_ID(‘TEMPDB.DBO.#ZZ’) IS NOT NULL DROP TABLE #ZZ
set nocount ON
set nocount OFF --使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息
SQL排序函数
1、row_number() over(PARTITION BY 分组 order by 列名)
ROW_NUMBER()函数作用就是将SELECT查询到的数据进行排序,每一条数据加一个序号
2、rank() over(PARTITION BY 分组 order by 列名)
rank()是西方文化的跳跃排序,如:1 2 2 4,会跳过3
3、dense_rank() over(PARTITION BY 分组 order by 列名)
dense_rank():是连续排序,考虑数据的重复性,如:1 2 2 3 序号连续
4、NTILE() over(PARTITION BY 分组 order by 列名)
将有序分区中的行分发到指定数目的组中
OVER开窗函数
开窗函数必须与聚合函数或排序函数一起使用,聚合函数一般指SUM(),MAX(),MIN,COUNT(),AVG()等常见函数。排序函数一般指RANK(),ROW_NUMBER(),DENSE_RANK(),NTILE()等
SUM(Salary) OVER (PARTITION BY Groupname)
只对PARTITION BY后面的列Groupname进行分组,分组后求解Salary的和。
SUM(Salary) OVER (PARTITION BY Groupname ORDER BY ID)
对PARTITION BY后面的列Groupname进行分组,然后按ORDER BY 后的ID进行排序,然后在组内对Salary进行累加处理。
SUM(Salary) OVER (ORDER BY ID)
只对ORDER BY 后的ID内容进行排序,对排完序后的Salary进行累加处理。
SUM(Salary) OVER ()
对Salary进行汇总处理
SQL Server 2017新增了 string_agg函数,可以轻松实现分组合并字符串,而不是用xml path,或者写个自定义
COALESCE
函数主要用来进行空值处理,IFNULL只能传入2个参数,它接受2个参数,如果不是NULL,则返回第一个参数。否则,IFNULL返回第二个参数。
CONVERT
108hh:mm:ss 110 mm-dd-yy 111 yy/mm/dd 112 yymmdd
CHARINDEX
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
expressionToFind :目标字符串,就是想要找到的字符串,最大长度为8000 。
expressionToSearch :用于被查找的字符串。
start_location:开始查找的位置,为空时默认从第一位开始查找。
PATINDEX
和CHARINDEX类似,PATINDEX也可以用来判断一个字符串中是否包含另一个字符串,两种的差异在于,前者是全匹配,后者支持模糊匹配
merge into 用法
merge into [Test].[dbo].[merge_target] as t #merge into后的表被当做目标表
using [Test].[dbo].[merge_source] as s #using后的表被当做源表
on t.name=s.name #on后写的是两张表的链接条件
when matched #如果数据匹配上
then update set t.id=s.id #用source表的id去更新target表的id
when not matched by target #如果没有匹配上,也就是target表里没有source表的数据
then insert (name,age,id) values (s.name,s.age,s.id) #把数据插入到target表
when not matched by source #如果target表中存在source表没有的数据
then delete #则删除target表的数据
; #一定要带上这个分号,不然会报错

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值