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

相关文章
|
4天前
|
SQL 运维 程序员
一个功能丰富的SQL审核查询平台
一个功能丰富的SQL审核查询平台
|
11天前
|
SQL 数据库 Java
HQL vs SQL:谁将统治数据库查询的未来?揭秘Hibernate的神秘力量!
【8月更文挑战第31天】Hibernate查询语言(HQL)是一种面向对象的查询语言,它模仿了SQL的语法,但操作对象为持久化类及其属性,而非数据库表和列。HQL具有类型安全、易于维护等优点,支持面向对象的高级特性,内置大量函数,可灵活处理查询结果。下面通过示例对比HQL与SQL,展示HQL在实际应用中的优势。例如,HQL查询“从员工表中筛选年龄大于30岁的员工”只需简单地表示为 `FROM Employee e WHERE e.age > 30`,而在SQL中则需明确指定表名和列名。此外,HQL在处理关联查询时也更为直观易懂。然而,对于某些复杂的数据库操作,SQL仍有其独特优势。
21 0
|
11天前
|
SQL 关系型数据库 MySQL
|
11天前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
19 0
|
11天前
|
Java UED 开发者
当错误遇上Struts 2:一场优雅的异常处理盛宴,如何让错误信息成为用户体验的救星?
【8月更文挑战第31天】在Web应用开发中,异常处理对确保用户体验和系统稳定性至关重要。Struts 2 提供了完善的异常处理机制,包括 `exception` 拦截器、`ActionSupport` 类以及 OGNL 表达式,帮助开发者优雅地捕获和展示错误信息。本文详细介绍了 Struts 2 的异常处理策略,涵盖拦截器配置、错误信息展示及自定义全局异常处理器的实现方法,使应用程序更加健壮和用户友好。
15 0
|
11天前
|
Java XML Maven
跨越时代的飞跃:Struts 2 升级秘籍——从旧版本无缝迁移到最新版,焕发应用新生!
【8月更文挑战第31天】随着软件技术的发展,Struts 2 框架也在不断更新。本文通过具体案例指导开发者如何从旧版平滑升级到 Struts 2.6.x。首先更新 `pom.xml` 中的依赖版本,并执行 `mvn clean install`。接着检查 `struts.xml` 配置,确保符合新版本要求,调整包扫描器等设置。审查 Action 类及其注解,检查配置文件中的弃用项及插件。更新自定义拦截器实现,并验证日志配置。最后,通过一系列测试确保升级后的系统正常运行。通过这些步骤,可以顺利完成 Struts 2 的版本升级,提升应用的安全性和性能。
36 0
|
11天前
|
前端开发 开发者
Vaadin Grid的秘密武器:打造超凡脱俗的数据展示体验!
【8月更文挑战第31天】赵萌是一位热爱UI设计的前端开发工程师。在公司内部项目中,她面临大量用户数据展示的挑战,并选择了功能强大的Vaadin Grid来解决。她在技术博客上分享了这一过程,介绍了Vaadin Grid的基本概念及其丰富的内置功能。通过自定义列和模板,赵萌展示了如何实现复杂的数据展示。
18 0
|
11天前
|
SQL 存储 安全
Play Framework的安全面纱:揭开隐藏在优雅代码下的威胁
【8月更文挑战第31天】Play Framework 是一款高效、轻量级的 Web 开发框架,内置多种安全特性,助力开发者构建安全稳定的应用。本文详细介绍 Play 如何防范 SQL 注入、XSS 攻击、CSRF 攻击,并提供安全的密码存储方法及权限管理策略,通过具体示例代码展示实施步骤,助您有效抵御常见威胁。
27 0
|
11天前
|
SQL 关系型数据库 MySQL
|
11天前
|
SQL 数据库