推荐(免费):SQL教程
1、行列转换
问题:假设有张学生成绩表(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 姓名
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、以任意符号分隔取两边数据
例如我们以逗号(,)来分割数据,将如下数据
分割成如下图所示:
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两件套:《SQL基础知识第二版》和《SQL高级知识第二版》的PDF电子版。里面有各个语法的解释、大量的实例讲解和批注等等,非常通俗易懂,方便大家跟着一起来实操。有需要的读者可以下载学习,在下面的公众号「数据前线」(非本号)后台回复关键字:SQL,就行数据前线 ——End—— 后台回复关键字:1024,获取一份精心整理的技术干货 后台回复关键字:进群,带你进入高手如云的交流群。 推荐阅读 27岁发明SQL以后,上帝把他带走了 微信8.0不好玩?那可能是你打开方式不正确! 一个员工的离职成本有多恐怖! SQL养成这些好习惯是一笔财富 MySQL基本知识点梳理和查询优化
更多相关免费学习推荐:SQLserver
以上是悄悄分享6个SQL查询小技巧的详细内容。更多信息请关注PHP中文网其他相关文章!

sqlmakesdatamanagectAccessibletoAllbyProvidingAsimpleyetpoperfultoolSetSetForQuerquereingAndManagingDatabases.1)ItworkswithrelationalDatabases,允许inserstospecefifywhattheywanttododowithththedata.2)

SQL索引可以通过巧妙的设计显着提升查询性能。 1.选择合适的索引类型,如B-tree、哈希或全文索引。 2.使用复合索引优化多字段查询。 3.避免过度索引以减少数据维护开销。 4.定期维护索引,包括重建和移除不必要的索引。

在 SQL 中删除约束,请执行以下步骤:识别要删除的约束名称;使用 ALTER TABLE 语句:ALTER TABLE 表名 DROP CONSTRAINT 约束名;确认删除。

SQL 触发器是一种在指定表上执行特定事件时自动执行特定操作的数据库对象。要设置 SQL 触发器,可以使用 CREATE TRIGGER 语句,其中包括触发器名称、表名称、事件类型和触发器代码。触发器代码使用 AS 关键字进行定义,并包含 SQL 或 PL/SQL 语句或块。通过指定触发器条件,可以使用 WHERE 子句限制触发器的执行范围。可以使用 INSERT INTO、UPDATE 或 DELETE 语句在触发器代码中执行触发器操作。NEW 和 OLD 关键字可以在触发器代码中用来引用受影

索引是一种通过排序数据列来加速数据查找的数据结构。为 SQL 查询添加索引的步骤如下:确定需要索引的列。选择合适的索引类型(B 树、哈希或位图)。使用 CREATE INDEX 命令创建索引。定期重建或重新组织索引以维护其效率。添加索引的好处包括提高查询性能、减少 I/O 操作、优化排序和筛选以及提高并发性。当查询经常使用特定列、返回大量数据需要排序或分组、涉及多个表或数据库表较大时,应该考虑添加索引。

IFELSE 语句是一种条件语句,用于根据条件评估结果返回不同值。其语法结构为:IF (condition) THEN return_value_if_condition_is_true ELSE return_value_if_condition_is_false END IF;。

SQL数据库错误查看方法有:1. 直接查看错误消息;2. 使用SHOW ERRORS和SHOW WARNINGS命令;3. 访问错误日志;4. 使用错误代码查找错误原因;5. 检查数据库连接和查询语法;6. 使用调试工具。

DISTINCT 操作符用于 SQL 查询中排除重复行,仅返回唯一值,适用于获取唯一值列表、统计唯一值数量和结合 GROUP BY 使用等场景。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

记事本++7.3.1
好用且免费的代码编辑器

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版