BI-SQL丨XML

news2024/11/19 11:22:56

XML

SQL Server中,存在一种特殊类型的数据,就是XML数据类型。

可能看到这里,小伙伴都会产生疑惑,XML不是Web语言么?为什么在SQL Server里面也会有XML数据类型?

这个就要从SQL Server的应用开始说起了,众所周知,SQL作为计算机的通用语言之一,在各个领域都存在广泛的应用,也有着各式各样的开发规范要求,但是并不是所有的场景下,开发者都会遵循相关的规范。

这就导致,不同的开发者之间因为开发习惯不同,导致接口之间的对接,存在很大的问题。

例如:小A开发了总部的数仓,某张表一共16个字段;小B开发了分部的数仓,因为分部的业务特色,导致小B开发的某张表多余16个字段;这种情况下,小A和小B之间接口的对接,就会出现很大的差异性。

为了解决这一现状,SQL Server引入了XML类型的字段,这样不需要针对表结构进行更改,可以将差异化类型的数据,存储在XML类型的字段中。

使用实例

例子1:使用query和value查询XML数据。

创建一张表,包含XML类型的数据。

代码如下:

CREATE TABLE XML_TEST1
(
    XMLID INT PRIMARY KEY,
    XMLVALUE XML NOT NULL
)
GO
;


INSERT INTO XML_TEST1
    (XMLID,XMLVALUE)
VALUES
    (1, N'<title>白茶</title><title>黑茶</title>'),
    (2, N'<title>红茶</title>'),
    (3, N'<price>19</price>'),
    (4, N'<price>18</price>'),
    (5, N'<sku>tea</sku>');

我们来看一下数据结果:

针对XML的数据类型,SQL Server是有专门的查询关键字的,分别是query查询和value查询。

query查询返回的是原始的数据格式,而value查询可以从XML中提取相应的值。

query查询示例:

SELECT XMLVALUE.query('/title') FROM XML_TEST1

结果如下:

注:
query内的字段,为查询条件,即获取XML中数据标签。

value查询示例:

SELECT XML_TEST1.XMLVALUE.value('(/title)[1]', 'nvarchar(max)') AS A1,

结果如下:

注:
1.同query查询一样,value第一参数里面的字段,也是查询条件;
2.value查询条件里面的[1],代表获取数据的位置;

例子2:使用nodes查询XML数据。

创建一张表,包含XML类型的数据。

代码如下:

CREATE TABLE XML_TEST2
(
    XMLID INT PRIMARY KEY,
    XMLVALUE XML NOT NULL
)
GO
;


INSERT INTO XML_TEST2
    (XMLID,XMLVALUE)
VALUES
    (1, N'<title>白茶</title><title>黑茶</title><title>红茶</title>'),
    (2, N'<title>黄茶</title>'),
    (3, N'<title>蓝茶</title>'),
    (4, N'<title>绿茶</title>');

我们来看一下数据结果:

nodes通常会返回XML数据类型中,符合条件的多个节点数据组合成的多行一列的结果表。

这句话很抽象,我们点击上面的查询结果的第一行,结果如下:

可以看到,实际上在结果的第一行,是存在多行数据的,而nodes的作用通常是将一行中多行的数据,拆分出来。

说到这里,就需要提到另外两种形式的APPLY了。

CROSS APPLY与OUTER APPLY

语法:

<left_table_expression>  {cross|outer} apply <right_table_expression>

APPLY运算的步骤:
1.A1:把右表表达式(<right_table_expression>)应用到左表(<left_table_expression>)输入的行;
2.A2:添加外部行;
3.使用APPLY先计算左输入,然后为左输入中的每一行计算一次右输入。

CROSS APPLY和OUTER APPLY,都会执行A1,进行左右表匹配,而只有OUTER APPLY会执行A2。

简而言之:
如果左表匹配到右表,有空积时,CROSS APPLY空积会被过滤;
反之,OUTER APPLY返回的结果包含空积。
为什么这里会提到这两个APPLY,因为nodes通常会和这两个APPLY搭配使用。

CROSS APPLY查询示例:

SELECT
    XML_TEST1.XMLID,
    T2.C.value('.', 'NVARCHAR(MAX)') AS XMLVALUE
FROM XML_TEST1
  CROSS APPLY XMLVALUE.nodes('/title') AS T2(C)

结果如下:

OUTER APPLY查询示例:

SELECT
    XML_TEST1.XMLID,
    T2.C.value('.', 'NVARCHAR(MAX)') AS XMLVALUE
FROM XML_TEST1
  OUTER APPLY XMLVALUE.nodes('/title') AS T2(C)

结果如下:

从结果上,相信小伙伴也能看出差异,这里白茶给大家解释一下:

在XML_TEST1中,一共有5行数据,只有2行,有title标签,而title标签的2行数据,可以拆分出来白茶、黑茶、红茶共计3行数据。
CROSS APPLY会过滤掉空积,因为左右表有3行数据不匹配,所以返回匹配上的3行数据。
OUTER APPLY不过滤空积,原表有5行数据,拆分之后数据总数为6行,所以返回6行数据。

例子3:利用XML的语法,针对某个分隔符进行拆分。

创建一张数据表。

CREATE TABLE XML_TEST3
(
    XMLID INT PRIMARY KEY,
    XMLVALUE NVARCHAR(200) NOT NULL
)
GO
;


INSERT INTO XML_TEST3
    (XMLID,XMLVALUE)
VALUES
    (1, N'白茶,黑茶,红茶'),
    (2, N'黄茶,紫茶'),
    (3, N'蓝茶'),
    (4, N'绿茶');

我们来看一下结果:

我们现在,要针对XMLVALUE字段,对分隔符“,”进行拆分。

SELECT 
ReplaceTable.XMLID, 
T2.C.value('.', 'NVARCHAR(MAX)') AS XMLVALUE
FROM
    (SELECT XMLID, 
          CAST('<TEA>'+REPLACE(XMLVALUE,',','</TEA><TEA>')+'</TEA>' AS XML) AS XMLVALUE
    FROM XML_TEST3) AS ReplaceTable
OUTER APPLY ReplaceTable.XMLVALUE.nodes('/TEA') AS T2(C)

结果如下:

解释一下:
1.使用CAST函数,将原本的分隔符替换为一个固定的XML标签,并且将其转化为XML数据格式;
2.使用XML中的nodes函数,将转化后的XML数据类型字段进行行拆分,生成一张多行一列的结果表;
3.OUTER APPLY将转化后事实表,与nodes生成的结果表,进行左右关联;
4.使用XML中的value函数,将转化后的XML数据类型字段中的值提取出来。

这里是白茶,一个PowerBI的初学者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/756135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动驾驶MCU 软件架构说明

目录 1 文档... 2 1.1.1 变更历史... 2 1.1.2 Term.. 2 1.1.3 引用文档... 2 2 MCU软件框架图... 3 3 模块介绍... 3 文档 变更历史 版本Version 状态 Status 内容 Contents 日期 Date 撰写 Editor 批准 Approver V0.1 …

智慧工厂:如何打造工厂安全生产AI视频监管与风险预警系统?

一、背景需求 现代工厂多是机械操作&#xff0c;少量人员看守&#xff0c;甚至是无人化管理模式。企业都会在生产车间、仓库等重点区域安置摄像头留存画面用作回溯依据。但问题出现后再溯源&#xff0c;或许已经造成严重的生命安全事故和财产损失了。因此&#xff0c;对工厂各…

数据库技术与应用——目录篇

数据库技术与应用目录 文章目录 第1章 数据库基础知识数据库技术的概念数据管理的发展数据库的体系结构数据库管理系统常用的数据库管理系统介绍 第2章 信息得三种世界与数据模型信息的三种世界及其描述数据模型 第3章 关系模型关系模型的由来关系数据库的结构关系代数关系演算…

【算法练习】双指针

目录 移动零复写零快乐数盛最多水的容器有效三角形的个数和为s的两个数三数之和四数之和 移动零 算法原理&#xff1a; 数组划分(数组分块) 两个指针作用&#xff1a; cur&#xff1a;从左到右扫描数组&#xff0c;遍历数组 dest&#xff1a;已处理的区间内&#xff0c;非零元素…

比Wi-Fi快100倍!Li-Fi无线传输标准802.11bb正式发布:带宽高达224GB/s

大家对Wi-Fi可以说耳熟能详&#xff0c;最新标准已经演进到802.11be&#xff0c;即Wi-Fi 7&#xff0c;理论速率可达30Gbps。 现在&#xff0c;更强的来了。 IEEE今日正式签署802.11bb无线传输标准&#xff0c;即Li-Fi&#xff0c;基于光波的无线传输。 Li-Fi支持者认为&#x…

Appium+python自动化(五)- 模拟器(超详解)

简介 Appium是做安卓自动化的一个比较流行的工具&#xff0c;对于想要学习该工具但是又局限于或许当前有些小伙伴没 android 手机来说&#xff0c;可以通过安卓模拟器来解决该问题&#xff0c;下面就讲解使用appium连接安卓模拟器的操作步骤。而宏哥是由于手机数据线问题&#…

【大数据Hive】Hive 内部表与外部表使用详解

目录 一、hive 内部表简介 1.1 查看内部表信息 二、hive 外部表简介 三、内部表与外部表对比 四、内部表与外部表操作演示 4.1 内部表操作 4.1.1 数据准备 4.1.2 建表sql 4.2 外部表操作 4.2.1 建表sql 4.2.2 上传数据文件到 /stu目录 4.2.3 内部表删除 4.2.4 外部…

【一蹴而就】软著申请时,如何更高效地将源码进行格式处理和合并呢?这篇博客告诉你答案。

【一蹴而就】软著申请时&#xff0c;如何更高效地将源码进行格式处理和合并呢&#xff1f;这篇博客告诉你答案。 1&#xff0c;软著申请三要素2&#xff0c;源代码合成软件SourceConvert2.1 启动文件2.2 Spring项目源代码格式2.2.1 规律的包名2.2.2 核心文件 3&#xff0c;Sour…

[QT编程系列-10]:C++图形用户界面编程,QT框架快速入门培训 - 4- QT画图与动画

目录 4. QT画图与动画 4.1 QT的绘图系统 4.2 案例目标 4.3 绘制过程 4.4 更换控件的icon 4.5 案例2 4.6 坐标轴 4. QT画图与动画 4.1 QT的绘图系统 QT&#xff08;也称为Qt Framework&#xff09;是一种流行的跨平台应用程序开发框架&#xff0c;它提供了丰富的图形用户…

网页无插件播放265/264视频/监控大屏/GPU解码

网页无插件播放265/264视频/监控大屏/GPU解码 先看效果 特点 GPU解码&#xff0c;chrome网页播放32路 h256/hevc 直播视频流,毫无压力。提供1分屏、4分屏、8分屏、9分屏、16分屏、32分屏、64分屏分屏切换不会停止播放GPU解码、无插件播放自动识别264/265&#xff0c;并且都是…

飞控学习笔记-梯度下降算法(gradient descent algorithm)

简介 笔记来源于文章&#xff1a;An_efficient_orientation_filter_for_inertial_and_inertial_magnetic_sensor_arrays 共轭&#xff1a; 四元数叉乘&#xff1a; 欧拉角等式&#xff1a;

vue-springboot美食商城网站的设计与实现0fh04

美食网站是在的数据存储主要通过MySQL。用户在使用应用时产生的数据通过Java语言传递给数据库。通过此方式促进美食信息流动和数据传输效率&#xff0c;提供一个内容丰富、功能多样、易于操作的平台。述了数据库的设计&#xff0c;系统的详细设计部分主要论述了几个主要模块的详…

一文阐明死锁的成因及解决方案

死锁是这样一种情形&#xff1a;多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。 目录 一、死锁的几种情况 1、一个线程&#xff0c;一把锁&#xff08;上面同一线程给同一对象加两…

stm32PID调参实验

使用了增量式PID,有点难调&#xff0c;数据一直在波动。实际中调参具有很大的不确定性&#xff0c;因为你这次调好了&#xff0c;下次再供电发现又不是那么回事。按照网上传统的调参方法&#xff0c;一般是先调P&#xff0c;I和D为0&#xff0c;逐渐增大P使得实际值快速到达目标…

【API生命周期看护】API监控与运维

一、基本概念 当接口完成发布、上线后&#xff0c;就进入了正常的运行与维护状态。此时&#xff0c;对于API本身的监控与运维则变得尤为重要&#xff0c;这是保障服务功能可用、SLA达成的重要手段。 监控与运维本身是一个非常大的概念&#xff0c;从DevOps这一词汇中也能看出…

Linux下做性能分析6:理解一些基础的CPU执行模型

[介绍] 前面介绍了两个典型的调度模型&#xff0c;如果调度没有问题&#xff0c;剩下的问题就是正面刚算法了。那个不是我这里要介绍的主题的。 但&#xff0c;Not Really。其实除了算法在消耗CPU&#xff0c;CPU还是有很多余力可以挖掘的&#xff0c;这一篇我们专门讨论一下…

MySQL “error: ‘fd’: 未知重写说明符”

文章目录 1、【问题】MySQL “error: ‘fd’: 未知重写说明符”2、【解决】增加引用头文件 1、【问题】MySQL “error: ‘fd’: 未知重写说明符” 有以下代码&#xff0c;mysql 的 include 和 lib 都已经加入附加目录&#xff0c;libmysql.lib 已经加入依赖库&#xff1a; #p…

IEEE ICME 2023论文|基于交互式注意力的语音情感识别联合网络

论文题目&#xff1a; A Joint Network Based on Interactive Attention for Speech Emotion Recognition 作者列表&#xff1a; 胡英&#xff0c;侯世静&#xff0c;杨华敏&#xff0c;黄浩&#xff0c;何亮 研究背景 语音情感识别&#xff08;Speech Emotion Recognitio…

4. MySQL 的增删查改(重点 9000字详解)

目录 准备工作 一、数据的插入 &#xff08;insert&#xff09; 注意 1. 整行插入 2. 指定列的插入&#xff08;常用&#xff09; 3. 一次插入多行数据 4. 清空数据库的数据&#xff08;truncate&#xff09; 5. 拓展练习&#xff1a;对于数据库中的数据进行统计&#…

多智能体强化学习(MARL)研究汇总:行为分析、通信学习、协作学习、智能体建模

【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍:【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应…