几个SQL查询小技巧
SQL数据库开发
共 2278字,需浏览 5分钟
· 2021-11-30
点击关注上方“SQL数据库开发”,
设为“置顶或星标”,第一时间送达干货 SQL专栏 SQL基础知识第二版
SQL高级知识第二版
问题:假设有张学生成绩表(tb)如下:
想变成(得到如下结果):
代码:
WITH tb(姓名,课程,分数) AS
(
SELECT N'张三',N'语文',74
UNION ALL
SELECT N'张三',N'数学',83
UNION ALL
SELECT N'张三',N'物理',93
UNION ALL
SELECT N'李四',N'语文',79
UNION ALL
SELECT N'李四',N'数学',86
UNION ALL
SELECT N'李四',N'物理',88
)
SELECT 姓名 ,
MAX(CASE 课程 WHEN '语文' THEN 分数 ELSE 0 END) 语文,
MAX(CASE 课程 WHEN '数学' THEN 分数 ELSE 0 END) 数学,
MAX(CASE 课程 WHEN '物理' THEN 分数 ELSE 0 END) 物理
FROM tb GROUP BY 姓名
分页
方案一:利用NOT IN和SELECT TOP分页语句形式
SELECT TOP 10 * FROM TestTable
WHERE ID NOT IN
(SELECT TOP 20 ID FROM TestTable ORDER BY ID)
ORDER BY ID
方案二:利用ID大于多少和SELECT TOP分页语句形式
SELECT TOP 10 * FROM TestTable
WHERE ID > (
SELECT MAX(id) FROM
(SELECT TOP 20 id FROM
TestTable ORDER BY id) AS T)
ORDER BY ID
方案三:利用SQL Server中的特性ROW_NUMBER进行分页
SELECT * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY ID DESC) AS ROWID,*
FROM TestTable
) AS mytable where ROWID between 21 and 40
结果合并
合并重复行
SELECT * FROM A
UNION
SELECT * FROM B
不合并重复行
SELECT * FROM A
UNION ALL
SELECT * FROM B
随机排序
SELECT * FROM TestTable ORDER BY NEWID()
还可以结合TOP取随机的前N条记录
SELECT TOP 100 * FROM TestTable ORDER BY NEWID()
以任意符号分隔取两边数据
例如我们以逗号(,)来分割数据,将如下数据
分割成如下图所示:
SELECT R,
CASE WHEN CHARINDEX(',',R)>1 THEN LEFT(R,CHARINDEX(',',R)-1) ELSE NULL END AS R1 ,
CASE WHEN CHARINDEX(',',R)>1 THEN RIGHT(R,(LEN(R) - CHARINDEX(',',R))) ELSE NULL END AS R2
FROM t
代码较长,我们对代码进行拆分来理解:
SELECT CHARINDEX(',',',') --结果是1
SELECT CHARINDEX(',','NULL') --结果是0
SELECT CHARINDEX(',','') --结果是0
SELECT CHARINDEX(',','A,B') --结果是2
SELECT LEN('A,B') --结果是3
SELECT LEN('A,B') - CHARINDEX(',','A,B') --结果是3-2=1
SELECT RIGHT('A,B',( LEN('A,B') - CHARINDEX(',','A,B'))) --结果是 B
最后一步我们将'A,B'拆分出来了B,同理A我们也可以用类似的方法获取到。
WAITFOR延时执行
例 等待1 小时2 分零3 秒后才执行SELECT 语句
WAITFOR DELAY '01:02:03'
SELECT * FROM Employee
其中 DELAY是在延时多长时间后才开始执行。
例 等到晚上11 点零8 分后才执行SELECT 语句
WAITFOR TIME '23:08:00'
SELECT * FROM Employee
其中TIME是等到具体某个时刻才开始执行
最后给大家分享我写的SQL两件套:《SQL基础知识第二版》和《SQL高级知识第二版》的PDF电子版。里面有各个语法的解释、大量的实例讲解和批注等等,非常通俗易懂,方便大家跟着一起来实操。 有需要的可以下载学习,只需要在下面的公众号「数据前线」(非本号),后台回复关键字:SQL,就行 数据前线
后台回复关键字:1024,获取一份精心整理的技术干货 后台回复关键字:进群,带你进入高手如云的交流群。 推荐阅读
评论
轻松掌握开源项目的二次开发技巧
点击上方 前端Q,关注公众号回复加群,加入前端Q技术交流群本文作者:@方长_beezen 原文链接:https://juejin.cn/post/7358647992608489535前言随着软件行业的迅速发展,开源项目的重要性已经成为不言而喻的事实。它能够为开发人员节省大量时间和成本,避
前端Q
0
分享几个前端中好玩且有用的开源工具,总有一个适合你!
点击上方 前端Q,关注公众号回复加群,加入前端Q技术交流群正所谓差生文具多,作为前端的我们,拥有几个合适的工具和网站可以很有效的提高我们的工具效率,还会有一些很有趣的网站可以在我们敲 bug 累了的时候供我们娱乐,接下来我就和大嘎分析一下我在用的一些工具和网站。聚合API该网站提供了大量的
前端Q
0
低空经济新标杆小龙头
公众号改版,及时收到文章推送需要给公众号加星。大家可以点击页面上方蓝色字【京北夜光】,进入公众号首页,点右上角“...”,点下方“设为星标”。坚持复盘总结分享不容易,点右上角点个在看并分享到朋友圈,看完顺手点个点赞和在看,算是个认可,感谢。在看互动:凡是点了点赞和在看且分享本文到朋友圈的读者,进入公
IT局
77
炸裂了!小仙女协商肉偿租房,震碎了三观!
2024年热点吃瓜(更新至4月)https://pan.xunlei.com/s/VNvUwSmX927mlt-7jr9Vnmp5A1?pwd=43gv#
逆锋起笔
10
从太空科技到日常生活,为什么说小问题是伟大的?
从广袤星辰回归到万家烟火,解决好生活的“小问题”,让我们每一个人过好“小日子”,是这个伟大时代的最好注解之一。作 者 丨 宿艺编 辑 丨 子淇有中国人的地方,从不缺乏美食,即使是太空之上。1961年,人类第一个航天员尤里·加加林乘坐“东方一
壹观察
35
图解 SQL 执行顺序,通俗易懂!
来源:blog.csdn.net/weixin_44141495/article/details/108744720/数据的关联过程from&join&wheregroup byhaving&whereselectorder bylimit这是一条标准的查询语句:图片这是我们
Java专栏
4824
每天一个离职小技巧:吞异常
欢迎关注微信公众号:互联网全栈架构先声明一下,写这样的文章,并不是鼓励大家离职,恰恰相反,在如今惨淡的IT就业形势下,奉劝大家千万不要离职!除非迫不得已!文章的本意就是提醒朋友们不要这么做,否则可能会有被开除的风险,因为这样的做法危害性实在是太大了。好,言归正传。在Java编程中,异常处理是非常常见
互联网全栈架构
57
小杨哥越玩越大,短剧也要开搞了
什么赚钱做什么。小杨哥开始布局短剧 善于把握商机的小杨哥,找到了另一个赚钱的事业。 近日,三只羊网络的最新一部短剧《替嫁新娘是大佬》正式开拍,于合肥富茂大饭店启动开机仪式。图源:三只羊剧场抖音账号 通过现场人员透露的海报可以看到,演员阵容中有多位三只羊旗下的艺人,其中三
运营大叔
0