当前位置: 首页 > news >正文

mysql实现for xml_灵活运用 SQL SERVER FOR XML PATH

FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主.

一.FOR XML PATH 简单介绍

那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下:

f0fe0eb292c2ea204b3ade19aef1fd3f.png

接下来我们来看应用FOR XML PATH的查询结果语句如下:

SELECT*FROM@hobbyFORXML PATH

结果:

1爬山2游泳3美食

由此可见FOR XML PATH 可以将查询结果根据行输出成XML各式!

那么,如何改变XML行节点的名称呢?代码如下:

SELECT*FROM@hobbyFORXML PATH('MyHobby')

结果一定也可想而知了吧?没错原来的行节点 变成了我们在PATH后面括号()中,自定义的名称,结果如下:

1爬山2游泳3美食

这个时候细心的朋友一定又会问那么列节点如何改变呢?还记的给列起别名的关键字AS吗?对了就是用它!代码如下:

SELECThobbyIDas'MyCode',hNameas'MyName'FROM@hobbyFORXML PATH('MyHobby')

那么这个时候我们列的节点名称也会编程我们自定义的名称 与结果如下:

1爬山2游泳3美食    噢! 既然行的节点与列的节点我们都可以自定义,我们是否可以构建我们喜欢的输出方式呢?还是看代码:

SELECT'['+hName+']'FROM@hobbyFORXML PATH('')

没错我们还可以通过符号+号,来对字符串类型字段的输出格式进行定义。结果如下:

[ 爬山 ][ 游泳 ][ 美食 ]

那么其他类型的列怎么自定义? 没关系,我们将它们转换成字符串类型就行啦!例如:

SELECT'{'+STR(hobbyID)+'}','['+hName+']'FROM@hobbyFORXML PATH('')

好的 FOR XML PATH就基本介绍到这里吧,更多关于FOR XML的知识请查阅帮助文档!

接下来我们来看一个FOR XML PATH的应用场景吧!那么开始吧。。。。。。

二.一个应用场景与FOR XML PATH应用

首先呢!我们在增加一张学生表,列分别为(stuID,sName,hobby),stuID代表学生编号,sName代表学生姓名,hobby列存学生的爱好!那么现在表结构如下:

d7ada5b3e66aca0e94056161bee168ef.png

这时,我们的要求是查询学生表,显示所有学生的爱好的结果集,代码如下:

SELECTB.sName,LEFT(StuList,LEN(StuList)-1)ashobbyFROM(SELECTsName,

(SELECThobby+','FROMstudentWHEREsName=A.sNameFORXML PATH(''))ASStuListFROMstudent AGROUPBYsName

) B

结果如下:

7143d66490c971951431abb3011d6caa.png

分析: 好的,那么我们来分析一下,首先看这句:

SELECThobby+','FROMstudentWHEREsName=A.sNameFORXML PATH('')

这句是通过FOR XML PATH 将某一姓名如张三的爱好,显示成格式为:“ 爱好1,爱好2,爱好3,”的格式!

那么接着看:

SELECTB.sName,LEFT(StuList,LEN(StuList)-1)ashobbyFROM(SELECTsName,

(SELECThobby+','FROMstudentWHEREsName=A.sNameFORXML PATH(''))ASStuListFROMstudent AGROUPBYsName

) B

剩下的代码首先是将表分组,在执行FOR XML PATH 格式化,这时当还没有执行最外层的SELECT时查询出的结构为:

fd00bcde67a60043e0efe16fb5a6fdf2.png

可以看到StuList列里面的数据都会多出一个逗号,这时随外层的语句:SELECTB.sName,LEFT(StuList,LEN(StuList)-1)ashobby 就是来去掉逗号,并赋予有意义的列明!

好啦,太晚啦就说到这里吧!

相关文章:

  • sql大小写 效率_从零开始学SQL:是什么、如何安装、基本语法、表格(创建、删除、更新)、数据(插入、删除、更新)...
  • mysql com.mysql.cj_com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别
  • kill -HUP重启mysql_kill的用法
  • mysql redolog 详解_MySQL系列之redo log、undo log和binlog详解
  • mysql xtrabakup 异机恢复_XtraBackup备份恢复mysql
  • mysql逻辑模型_数据库逻辑模型设计.ppt
  • win7mysql安装未响应_求助啊 WIN7下安装mysql出问题 老是说未响应~!!
  • sql2008能否打开mysql数据库_将MySQL数据库转移到SqlServer2008数据库
  • 从源码安装mysql_从源码安装MySQL
  • wp mysql替换内容_WordPress查找和替换数据库内容插件:Better Search Replace
  • 什么时候用到全排列_全排列问题 与 组合排列问题
  • gis怎么提取水系_ArcGIS水文分析实战教程(7)细说流域提取
  • ios long转float_iOS设计中字符串NSString与int及float之间的转换
  • mysql show命令用不了_MySQL SHOW 命令的使用
  • php和mysql的英文文献_毕业论文通过PHP访问MySQL外文文献
  • .pyc 想到的一些问题
  • AngularJS指令开发(1)——参数详解
  • Angular数据绑定机制
  • Docker入门(二) - Dockerfile
  • JavaScript的使用你知道几种?(上)
  • JavaScript对象详解
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • linux学习笔记
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • node.js
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Vim 折腾记
  • 爱情 北京女病人
  • 从0实现一个tiny react(三)生命周期
  • 服务器之间,相同帐号,实现免密钥登录
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 开源SQL-on-Hadoop系统一览
  • 力扣(LeetCode)56
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 项目管理碎碎念系列之一:干系人管理
  • 终端用户监控:真实用户监控还是模拟监控?
  • scrapy中间件源码分析及常用中间件大全
  • !$boo在php中什么意思,php前戏
  • #162 (Div. 2)
  • #pragma data_seg 共享数据区(转)
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)计算机毕业设计大学生兼职系统
  • (三)uboot源码分析
  • (算法)N皇后问题
  • (转)http协议
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • :O)修改linux硬件时间
  • @31省区市高考时间表来了,祝考试成功
  • @RequestMapping 的作用是什么?
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • []我的函数库