您的位置:首页 >聚焦 >

几个SQL查询小技巧_当前观点

2022-11-22 06:33:53    来源:程序员客栈

点击关注公众号,SQL干货及时获取

后台回复:1024,获取海量学习资源1、行列转换

问题:假设有张学生成绩表(tb)如下:


【资料图】

想变成(得到如下结果):

代码:

WITH tb(姓名,课程,分数) AS(SELECTN"张三",N"语文",74UNIONALLSELECTN"张三",N"数学",83UNIONALLSELECTN"张三",N"物理",93UNIONALLSELECTN"李四",N"语文",79UNIONALLSELECTN"李四",N"数学",86UNIONALLSELECTN"李四",N"物理",88)SELECT姓名 ,MAX(CASE课程 WHEN"语文"THEN分数 ELSE0END) 语文,MAX(CASE课程 WHEN"数学"THEN分数 ELSE0END) 数学,MAX(CASE课程 WHEN"物理"THEN分数 ELSE0END) 物理FROMtb GROUPBY姓名

2、分页

方案一:利用NOT IN和SELECT TOP分页语句形式

SELECTTOP 10* FROMTestTableWHEREIDNOTIN(SELECTTOP 20IDFROMTestTable ORDERBYID)ORDERBYID

方案二:利用ID大于多少和SELECT TOP分页语句形式

SELECTTOP 10* FROMTestTableWHEREID> (SELECTMAX(id) FROM(SELECTTOP 20idFROMTestTable ORDERBYid) AST)ORDERBYID

方案三:利用SQL Server中的特性ROW_NUMBER进行分页

SELECT* FROM(SELECTROW_NUMBER() OVER(ORDERBYIDDESC) ASROWID,*FROMTestTable) ASmytable whereROWIDbetween21and40

3、结果合并

合并重复行

SELECT* FROMAUNIONSELECT* FROMB

不合并重复行

SELECT* FROMAUNIONALLSELECT* FROMB

4、随机排序

SELECT* FROMTestTable ORDERBYNEWID()

还可以结合TOP取随机的前N条记录

SELECTTOP 100* FROMTestTable ORDERBYNEWID()

5、以任意符号分隔取两边数据

例如我们以逗号(,)来分割数据,将如下数据

分割成如下图所示:

SELECTR,CASEWHENCHARINDEX(",",R)>1THENLEFT(R,CHARINDEX(",",R)-1) ELSENULLENDASR1 ,CASEWHENCHARINDEX(",",R)>1THENRIGHT(R,(LEN(R) - CHARINDEX(",",R))) ELSENULLENDASR2FROMt

代码较长,我们对代码进行拆分来理解:

SELECTCHARINDEX(",",",") --结果是1SELECTCHARINDEX(",","NULL") --结果是0SELECTCHARINDEX(",","") --结果是0SELECTCHARINDEX(",","A,B") --结果是2SELECTLEN("A,B") --结果是3SELECTLEN("A,B") - CHARINDEX(",","A,B") --结果是3-2=1SELECTRIGHT("A,B",( LEN("A,B") - CHARINDEX(",","A,B"))) --结果是 B

最后一步我们将"A,B"拆分出来了B,同理A我们也可以用类似的方法获取到。

6、WAITFOR延时执行

例 等待1小时2分零3秒后才执行SELECT语句

WAITFOR DELAY "01:02:03"SELECT* FROMEmployee

其中 DELAY是在延时多长时间后才开始执行。

例等到晚上11点零8分后才执行SELECT语句

WAITFOR TIME "23:08:00"SELECT* FROMEmployee

其中TIME是等到具体某个时刻才开始执行

我是岳哥,最后给大家分享我写的SQL两件套:《SQL基础知识第二版》和《SQL高级知识第二版》的PDF电子版。里面有各个语法的解释、大量的实例讲解和批注等等,非常通俗易懂,方便大家跟着一起来实操。

有需要的读者可以下载学习,在下面的公众号「数据前线」(非本号)后台回复关键字:SQL,就行

数据前线——End——

后台回复关键字:1024,获取一份精心整理的技术干货

后台回复关键字:进群,带你进入高手如云的交流群。

推荐阅读

SQL 中为什么经常要加NOLOCK?SQL 语句中 where 条件后 写上1=1 是什么意思干掉visio,这个画图神器真的绝了!!!SQL中的高级日期函数SQL常用脚本整理

关键词: 开始执行 是什么意思 通俗易懂

相关阅读