知方可补不足~SQL巧用XML PATH来生成符合规则的查询结果集

简介:

在查询后面在

FOR XML PATH可以生成XML格式结果集,好好利用这个技术,可以实现很多意想不到的查询效果

最简单的用法:

SELECT USERID,USERNAME FROM DBO.USER_INFO FOR XML PATH

结果类似这样

<row>
  <USERID>6</USERID>
  <USERNAME>ding25901</USERNAME>
</row>
<row>
  <USERID>10</USERID>
  <USERNAME>zhong</USERNAME>
</row>
<row>
  <USERID>11</USERID>
  <USERNAME>yanxunhan</USERNAME>
</row>

我们看到是以XML格式来显示的,注意它是个字符串,它只显示在一行上。

可以为path加个参数,来改变row节点的名称,如

SELECT USERID,USERNAME FROM DBO.USER_INFO FOR XML PATH('zzl')

结果变成了这样

<zzl>
  <USERID>6</USERID>
  <USERNAME>ding25901</USERNAME>
</zzl>
<zzl>
  <USERID>10</USERID>
  <USERNAME>zhong</USERNAME>
</zzl>

当然,发挥我们的想像力,可能也会出现这种结果

{6,ding25901}{10,zhong}

怎么样,有点像JSON的格式标准吧,看看代码:

SELECT TOP 2
        '{' + CAST(UserID AS VARCHAR) + ',' ,
        userName + '' ,
        '}'
FROM    dbo.User_Info
FOR     XML PATH('')

只要发挥你的想像力,就有你想不到的事情发生,如果没有xml path,可能我们还要用性能较低的游标

看看这个例子,找出用户地址表中,所有用户的所有地址信息:

SELECT  B.userid ,
        List
FROM    ( SELECT    userid ,
                    ( SELECT    c.address + ','
                      FROM      dbo.UserAddress c
                      WHERE     c.UserID = a.userid
                    FOR
                      XML PATH('')
                    ) AS List
          FROM      dbo.UserAddress A
          GROUP BY  userid
        ) B

结果是:

userid                               addresslist
------------------------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
010E3E9D-67F5-4C25-80A7-0B56D03F3427 日本,中国,
062061EB-61F2-49A3-AA87-7BD5A59F5970 中国,美国,
1A58A662-A3DF-4BEE-B0D0-B0F73846D55B 中东,

本文转自博客园张占岭(仓储大叔)的博客,原文链接:知方可补不足~SQL巧用XML PATH来生成符合规则的查询结果集,如需转载请自行联系原博主。

目录
相关文章
|
SQL 监控 关系型数据库
一键开启百倍加速!RDS DuckDB 黑科技让SQL查询速度最高提升200倍
RDS MySQL DuckDB分析实例结合事务处理与实时分析能力,显著提升SQL查询性能,最高可达200倍,兼容MySQL语法,无需额外学习成本。
|
SQL 存储 关系型数据库
MySQL体系结构详解:一条SQL查询的旅程
本文深入解析MySQL内部架构,从SQL查询的执行流程到性能优化技巧,涵盖连接建立、查询处理、执行阶段及存储引擎工作机制,帮助开发者理解MySQL运行原理并提升数据库性能。
|
SQL 监控 关系型数据库
SQL优化技巧:让MySQL查询快人一步
本文深入解析了MySQL查询优化的核心技巧,涵盖索引设计、查询重写、分页优化、批量操作、数据类型优化及性能监控等方面,帮助开发者显著提升数据库性能,解决慢查询问题,适用于高并发与大数据场景。
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
742 18
|
SQL 关系型数据库 MySQL
(SQL)SQL语言中的查询语句整理
查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。
614 0
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
|
SQL 人工智能 数据库
【三桥君】如何正确使用SQL查询语句:避免常见错误?
三桥君解析了SQL查询中的常见错误和正确用法。AI产品专家三桥君通过三个典型案例:1)属性重复比较错误,应使用IN而非AND;2)WHERE子句中非法使用聚合函数的错误,应改用HAVING;3)正确的分组查询示例。三桥君还介绍了学生、课程和选课三个关系模式,并分析了SQL查询中的属性比较、聚合函数使用和分组查询等关键概念。最后通过实战练习帮助读者巩固知识,强调掌握这些技巧对提升数据库查询效率的重要性。
526 0
|
SQL XML Java
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
本文介绍了MyBatis框架中XML映射与动态SQL的使用方法,作者通过实例详细解析了XML映射文件的配置规范,包括namespace、id和resultType的设置。文章还对比了注解与XML映射的优缺点,强调复杂SQL更适合XML方式。在动态SQL部分,重点讲解了`&lt;if&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签的应用场景,如条件查询、动态更新和批量删除,并通过代码示例展示了其灵活性与实用性。最后,通过`&lt;sql&gt;`和`&lt;include&gt;`实现代码复用,优化维护效率。
1543 5
|
SQL 存储 弹性计算
OSS Select 加速查询:10GB CSV 文件秒级过滤的 SQL 语法优化技巧
OSS Select 可直接在对象存储上执行 SQL 过滤,跳过文件下载,仅返回所需数据,性能比传统 ECS 方案提升 10~100 倍。通过减少返回列、使用等值查询、避免复杂函数、分区剪枝及压缩优化等技巧,可大幅降低扫描与传输量,显著提升查询效率并降低成本。