SQL查询小技巧

简介: SQL数据库开发

1.SQL行列转换

问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果):
姓名 语文 数学 物理
---- ---- ---- ----
李四 74 84 94
张三 74 83 93

代码:

select 姓名 as 姓名 ,
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.SQL分页

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

SELECT TOP 页大小 * FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 页大小*页数 id FROM 表 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

SELECT TOP 页大小 * FROM TestTable
WHERE (ID >
(SELECT MAX(id) FROM
(SELECT TOP 页大小*页数 id FROM 表
ORDER BY id) AS T)
)
ORDER BY ID

--分页方案三:(利用SqlServer2005中的新特性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.SQL查询结果合并

--合并重复行
select * from A
union
select * from B
--不合并重复行
select * from A
union all
select * from B

4.SQL随机排序

SELECT * FROM TestTable ORDER BY NEWID()

5.SQL以逗号分隔取两边数据

9.jpg10.jpg

select charindex(',',',') --结果是1

select charindex(',','NULL') --结果是0

select charindex(',','') --结果是0

select charindex(',','T,ToEstate') --结果是2

select len('T,ToEstate') --结果是10

select len('T,ToEstate') - charindex(',','T,ToEstate') --结果是10-2=8

select right('T,ToEstate',(len('T,ToEstate') - charindex(',','T,ToEstate'))) --结果是 ToEstate


select

case when charindex(',',roomdirection)>1 then left(roomdirection,charindex(',',roomdirection)-1) else null end as roomdirection1 ,

case when charindex(',',roomdirection)>1 then

right(roomdirection,(len(roomdirection) - charindex(',',roomdirection))) else null end as roomdirection2

from tb

6.WAITFOR延时执行

--WAITFOR--例 等待1 小时2 分零3 秒后才执行SELECT 语句
waitfor delay '01:02:03'
select * from employee
--例 等到晚上11 点零8 分后才执行SELECT 语句
waitfor time '23:08:00'
select * from employee

相关文章
|
13天前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
46 9
|
1月前
|
SQL 存储 人工智能
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation)框架,能够基于大型语言模型(LLMs)为数据库生成精确的 SQL 查询。Vanna 支持多种 LLMs、向量数据库和 SQL 数据库,提供高准确性查询,同时确保数据库内容安全私密,不外泄。
121 7
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
|
2月前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
41 8
|
2月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
68 4
|
2月前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
2月前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
180 10
|
2月前
|
SQL 关系型数据库 MySQL
|
3月前
|
SQL 数据库 开发者
功能发布-自定义SQL查询
本期主要为大家介绍ClkLog九月上线的新功能-自定义SQL查询。
|
2月前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
38 0
|
3月前
|
SQL 数据可视化 BI
SQL语句及查询结果解析:技巧与方法
在数据库管理和数据分析中,SQL语句扮演着至关重要的角色