【SQLFlow】马哈鱼数据血缘分析器分析集合运算

马哈鱼数据血缘分析器分析集合运算

马哈鱼数据血缘分析器分析集合运算

当你使用马哈鱼数据血缘分析器进行SQL语句分析时,很多场景中会出现集合运算,本文主要介绍马哈鱼在处理集合运算时的分析场景。首先,我们需要先了解一下数据库常见的集合运算交、并、差,如下:

并集 union all 返回各个查询的所有记录,包括重复记录

并集 union 返回各个查询的所有记录,不包括重复记录

交集 intersect 返回两个查询共有的记录

差集 minus 返回第一个查询的记录减去第二个查询记录之后剩余的记录

由于交并差集合运算从计算逻辑上都是一致的,即两个结果集的加减运算,所以在马哈鱼中的显示是一致的。

1、集合运算的基本要求

首先,集合运算需要一定的要求,具体要求如下:

在select列表中中得列表和表达式在数量上必须匹配
在第二个查询中得每一列得数据类型必须与第一个查询其对应列得数据类型相匹配
可以用括号来改变执行顺序
order by 子句只能在语句最后出现
可以使用第一个查询中得列名,别名或相对位置)
除了union all之外,系统会自动删除重复得记录
列明为第一个查询返回的结果
除union all之外,系统自动按照第一个查询中得第一个列得升序排列

接下来,分别介绍一下上面提到的几种集合运算在马哈鱼中时如下展示的:

  • union all 完整并集
select d.deptno,'abc' from dept d
union all
select  e.deptno,'abs' from emp e group by e.deptno;

并集运算。语句中有列和常量两部分组成,在马哈鱼中,将常量独立到一个逻辑集合【SQL_CONSTANTS]中,便于读者进行区分。在常量未被指定列别名时,最终结果集中显示为未知名称【UNNAMNED1]。如果指定别名,显示为别名。

【SQLFlow】马哈鱼数据血缘分析器分析集合运算_第1张图片

【SQLFlow】马哈鱼数据血缘分析器分析集合运算_第2张图片

  • union去重并集

众所周知,union区别于union all在于对最终结果集中进行了distinct运算,但在马哈鱼中这个区别并没有给做区分,所以您看到的血缘分析结果和union all是一致的。

select d.deptno,'abc' as b from dept d
union 
select  e.deptno,'abs' as b from emp e group by e.deptno;

【SQLFlow】马哈鱼数据血缘分析器分析集合运算_第3张图片

  • intersect 交集

交集运算。该运算默认进行distinct运算,马哈鱼在分析交集运算时和并集一致。

【SQLFlow】马哈鱼数据血缘分析器分析集合运算_第4张图片

  • minus差集(又称补集)

差集运算。该运算默认进行distinct运算,马哈鱼在分析差集运算时和并集、交集也是一致。

【SQLFlow】马哈鱼数据血缘分析器分析集合运算_第5张图片

2、总结

集合运算组合两个或多个部分查询的结果到一个结果中,包含集合运算的查询又称为复合查询。这种复合查询中虽然包含上述四种运算,但是他们的实现逻辑完全一致。所以,在马哈鱼数据血缘分析器中的分析也是完全一致的,需要注意的是,一是对于SQL语句中有常量时,会被马哈鱼独立显示;二是马哈鱼没有对是否distinct的运算进行额外说明,需要使用者自己去区别。

3、参考

马哈鱼数据血缘分析器: https://sqlflow.gudusoft.com

马哈鱼数据血缘分析器中文网站: https://www.sqlflow.cn

你可能感兴趣的:(【数据治理】,数据库,sql,大数据)