SQL查询的技巧

61次阅读
没有评论

共计 1850 个字符,预计需要花费 5 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章主要介绍 SQL 查询的技巧,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1、行列转换

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

SQL 查询的技巧

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

SQL 查询的技巧

代码:

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  姓名

2、分页

方案一:利用 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

3、结果合并

合并重复行

 SELECT * FROM A
UNION
SELECT * FROM B

不合并重复行

SELECT * FROM A
UNION ALL
SELECT * FROM B

4、随机排序

SELECT * FROM TestTable ORDER BY NEWID()

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

SELECT TOP 100 * FROM TestTable ORDER BY NEWID()

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

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

SQL 查询的技巧

分割成如下图所示:

SQL 查询的技巧

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 我们也可以用类似的方法获取到。

6、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 查询的技巧”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计1850字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)