【数据库】 SQL 常用语句
1.批量导入
INSERT INTO Table2(field1,field2,...) SELECT value1,value2,... FROMTable1
要求目标表Table2必须存在
2.批量导入
SELECT vale1, value2 INTO Table2 FROM Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中
3.去重并保留一项
DELETE FROM TableName WHERE ColName IN (select ColName
FROM TableName GROUP BY ColName HAVING COUNT(ColName) > 1)
AND id NOT in( select MAX(id) FROM ColName GROUP BY ProductId HAVING COUNT(ColName) > 1)
4.批量更新
UPDATE t1 SET Field1 = Field21, Field2 = Field22 FROM Table2 t2 WHERE ((t2.Field24 >= '') AND t1.fId = t4.fId);
5.分页
--max/top SELECT TOP 50 * FROM pagetest WHERE id>(SELECT MAX(id) FROM (SELECT TOP 9900 id FROM pagetest ORDER BY id)a) ORDER BY id --row_number() SELECT * FROM (SELECT ROW_NUMBER()OVER(ORDER BY id)rownumber,* FROM pagetest)a WHERE rownumber>=9901 and rownumber<=9952
-- OFFSET FETCH (需要sql2012以上)
SELECT * FROM pagetest
ORDER BY id ASC
OFFSET @pageIndex * @pageSize ROWS
FETCH NEXT @pageSize ROWS ONLY
6. 表同步 MERGE
MERGE into [MergeDemo] as m -- 目标表 using Test as t -- 源表 on m.[title]=t.[name] -- 匹配条件 when matched then update set m.[num]=t.[age] -- 匹配成功 when not matched then insert values(t.[name],t.[age]) -- 目标表与源表不一致 when not matched by source then delete -- 源表与目标表不一致 output $action as [action] -- 输出操作 , inserted.[title] [ititle],inserted.[num] [inum] , deleted.[title] [dtitle],deleted.[num] [dnum];
7. GROUP 加 TOP(每个 GROUP 取出 TOP 数据)
Declare @currentIndex int -- 游标 Declare @totalRows int -- 总的组数 Declare @time nvarchar(20) -- 第一个分组列 SET @currentIndex=1 -- 按 第一个分组列 分组, 取出组名 SELECT row_number()over(order by [time] asc) id,[time] INTO #temp1 FROM (SELECT DISTINCT(CONVERT(VARCHAR(10),create_time,120)) [time] FROM tableName) a SELECT @totalRows=COUNT(1) FROM #temp1 -- 总的组数 WHILE @currentIndex<=@totalRows -- 按 组名 循环 BEGIN SELECT @time=[time] FROM #temp1 WHERE id=@currentIndex -- 取出当前组名 -- 取出当前 组 拥有的数据, 再按照 第二分组列 分组 取 TOP SELECT TOP 20 colName 'Url', COUNT((colName)) 'Count',CONVERT(VARCHAR(10),create_time,120) 'Time',GETDATE() FROM tableName WHERE [time] = @time GROUP BY colName ORDER BY COUNT((colName)) DESC SET @currentIndex =@currentIndex+1 END
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?