a连接带id转送不了数据_你找到了数据清洗利器?
大家好,这期给大家介绍SQL中的一个函数NVL。
为什么笔者突然要提起它呢?原因,竟是!
哈哈UC浏览器的风格无疑了。其实原因很简单,就是笔者经常阅读同事写的代码。然后经常看到在表连接时会出现NVL函数。因为我写NVL函数的习惯,所以就好奇了。到底它是何方神圣,竟引得同事争相写它?
首先,我们来看NVL函数的解释。
这个函数的解释较为简单,需要填写两个参数——表达式A和表达式B。
其中,当表达式A的值不为空时,输出表达式A的值;若表达式A的值为空,则输出表达式B的值。同时必须确保表达式A和B的数据类型一致。若A的结果是数值型的,则B也必须是数值型;若A为字符串型,则B也必须为字符串型。
通过回想同事应用的场景——表连接时使用,我有所领悟。
试想这样一种场景,有班级人员表T1和学生信息表T2。
在T1表中,有以下字段和取值:
班级class_id | 学生学号 student_id |
学生性别 student_sex |
甲班 | 甲1 | M |
甲班 | 甲2 | F |
甲班 | M | |
甲班 | F | |
乙班 | 乙1 | M |
在T2表中,有以下字段和取值:
学生学号 student_id |
学生性别 student_sex |
学生家乡 student_hometown |
学生身高 student_height |
甲1 | M | 上海 | 177 |
甲2 | F | 杭州 | 160 |
M | 宁波 | 190 | |
乙1 | M | 常州 | 172 |
从取值可以看出,T1和T2表的主键都是学生学号student_id。所以在连接表时,很容易想到用T1.student_id = T2.student_id 。
但是由于人为录入遗漏数据,且两表都没有主键验证是否为空的机制。出现了T1、T2表中有学号为空的情况。仔细观察,T1表中第三行记录有可能对应的是T2表中的第三行记录(但不一定),但T1表中第四行记录绝不可能对应T2表的第三行记录(性别不一样)。
倘若在left join时on 条件写成T1.student_id = T2.student_id。那么对于T1表T1.student_id为null时,有2条记录。而T2表T2.student_id为null时,有1条记录。根据人工思维,null值=null值,那么就会出现T1表的第三行和第四行都用T2表的第三行匹配成功。而事实上这种匹配是无意义的,故而我们需要将T1.student_id做数据清洗,防止“脏”数据造成结果混乱。
现将on条件改为 NVL(T1.student_id, “nonono”) = T2.student_id。那么左表连接时就不会出现null值,右表主键为null时,视为“无效”数据,永远不能匹配到左表上。防止了混乱结果出现。
经历了这波思考,感觉一个小小的NVL函数,真香啊~
a连接带id转送不了数据_你找到了数据清洗利器?相关推荐
- a连接带id转送不了数据_数据库表连接的简单解释
关系型数据库最难的地方,就是建模(model). 错综复杂的数据,需要建立模型,才能储存在数据库.所谓"模型"就是两样东西:实体(entity)+ 关系(relationship) ...
- mysql 左连接b表的一条数据_如果你正在找MySQL精品资源,那来这里看看
一.mysql的架构介绍 1.mysql采用的是分层设计模式,结合可插拔技术开发的. 2.mysql层次结构为:连接层>服务层>引擎层>存储层. 3.插件式的存储引擎架构将查询处理和 ...
- mysql 左连接b表的一条数据_阿里java架构师教你怎么用mysql怒怼面试官
转载地址: 阿里java架构教你怎么用mysql怒怼面试官www.jianshu.com 说一下mysql比较宏观的面试,具体咋写sql的这里就不过多举例了.后面我还会给出一个关于mysql面试优化 ...
- python用xlrd怎么清洗数据_用Python进行数据清洗!
导读:数据清洗是数据分析的必备环节,在进行分析过程中,会有很多不符合分析要求的数据,例如重复.错误.缺失.异常类数据. Python资源共享群:626017123 01 重复值处理 数据录入过程.数据 ...
- python如何收集数据_用Python做数据清洗:采集几百个xls或csv中的数据并汇总
需求:从几百个CSV或xls中读取某些重要数据,并汇总在一个单独的excel中进行数据分析 Python实现: # coding:utf-8 # File Name: csv_data_sort # ...
- python用xlrd怎么清洗数据_利用Python进行数据清洗
据说数据清洗占数据分析工作的80%, 迅速,正确的将数据进行清洗将提高数据分析的效率. 数据分析步骤: 一. 提出问题 提出业务指标 二. 理解数据 第一步:准备工作(安装xlrd包,导入包) act ...
- 汇总同一时间段的数据_数据集干货:一文读懂Mapsidejoin
我们知道数据分析的第一步是准备数据,所以在前面的课程里,我们介绍了元数据.今天这篇文章,主要介绍大数据量组合数据集在永洪中的应用实例:Mapsidejoin. 什么是Mapsidejoin?按照字面意 ...
- 苹果计算机错误怎么改,连接apple id服务器时出错怎么解决?
原标题:连接apple id服务器时出错怎么解决? 如何在连接Apple ID服务器时解决它?当我们使用Apple设备时,无论是手机还是计算机,许多用户都不知道这是否这是在使用移动电话或计算机期间可以 ...
- 查询字符串位置_带合并单元格的数据查询套路,有用
小伙伴们好啊,相信大家都被合并单元格的问题困扰过吧,今天就和大家分享一个带合并单元格的数据查询问题.在下面这个图中,A列是带合并单元格的部门,B列是该部门的员工名单. 现在需要根据D2单元格中的姓名, ...
最新文章
- mariadb转mysql_MariaDB/MySQL备份和恢复(二):数据导入、导出
- DeepLearning based on PaddlePaddle系列二
- (转)LinqToSql的连接字符串自动调用配置文件中的连接字符串
- 现行的web开发框架分析
- docker删除所有镜像和容器
- Springcloud 引导上下文
- linux基础服务,Linux基础
- 如何在两个服务器之间迁移MySQL数据库
- python文件操作大全
- spring security免登录动态配置方案2
- Atitit 代理CGLIB 动态代理 AspectJ静态代理区别
- 学习了Python大数据之后,将来主要做什么
- Convert excel format exception.You can try specifying the ‘excelType‘ yourse-----EasyExcel导入
- Java -- 定时任务实现方式
- blender做MMD心得(三)
- 06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?
- 统计学③——总体与样本的差异在哪里
- Win11怎么删除微软输入法?
- Linux命令之ll
- Real-Time High-Resolution Background Matting
热门文章
- R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义三线表结构(将因子变量细粒度化重新构建三线图)、为不同的变量显示不同的统计信息
- python使用matplotlib可视化、使用annotate函数以及arrowprops参数在可视化图像中添加箭头和文本注释(arrow and text annotation)
- R语言构建回归模型并进行模型诊断(线性关系不满足时)、进行变量变换(Transforming variables)、使用car包中的boxTidwell函数对预测变量进行Box–Tidwell变换
- 预测概率是什么?ROC曲线是什么?PR曲线是什么?ROC曲线和PR曲线使用场景差异?
- plotly基于dataframe数据绘制股票OHLC图
- html5 银行卡号校验,js 实现 银行卡号 格式验证 示例代码
- Numpy与Pandas基础
- ikbc键盘自动打字_键盘按斤卖,一斤一百块?IKBC W200机械键盘简晒
- JAVA基础4-循环语句
- python比较两个xml_python比较2个xml内容的方法