大家好,这期给大家介绍SQL中的一个函数NVL。

为什么笔者突然要提起它呢?原因,竟是!

哈哈UC浏览器的风格无疑了。其实原因很简单,就是笔者经常阅读同事写的代码。然后经常看到在表连接时会出现NVL函数。因为我写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转送不了数据_你找到了数据清洗利器?相关推荐

  1. a连接带id转送不了数据_数据库表连接的简单解释

    关系型数据库最难的地方,就是建模(model). 错综复杂的数据,需要建立模型,才能储存在数据库.所谓"模型"就是两样东西:实体(entity)+ 关系(relationship) ...

  2. mysql 左连接b表的一条数据_如果你正在找MySQL精品资源,那来这里看看

    一.mysql的架构介绍 1.mysql采用的是分层设计模式,结合可插拔技术开发的. 2.mysql层次结构为:连接层>服务层>引擎层>存储层. 3.插件式的存储引擎架构将查询处理和 ...

  3. mysql 左连接b表的一条数据_阿里java架构师教你怎么用mysql怒怼面试官

    转载地址: 阿里java架构教你怎么用mysql怒怼面试官​www.jianshu.com 说一下mysql比较宏观的面试,具体咋写sql的这里就不过多举例了.后面我还会给出一个关于mysql面试优化 ...

  4. python用xlrd怎么清洗数据_用Python进行数据清洗!

    导读:数据清洗是数据分析的必备环节,在进行分析过程中,会有很多不符合分析要求的数据,例如重复.错误.缺失.异常类数据. Python资源共享群:626017123 01 重复值处理 数据录入过程.数据 ...

  5. python如何收集数据_用Python做数据清洗:采集几百个xls或csv中的数据并汇总

    需求:从几百个CSV或xls中读取某些重要数据,并汇总在一个单独的excel中进行数据分析 Python实现: # coding:utf-8 # File Name: csv_data_sort # ...

  6. python用xlrd怎么清洗数据_利用Python进行数据清洗

    据说数据清洗占数据分析工作的80%, 迅速,正确的将数据进行清洗将提高数据分析的效率. 数据分析步骤: 一. 提出问题 提出业务指标 二. 理解数据 第一步:准备工作(安装xlrd包,导入包) act ...

  7. 汇总同一时间段的数据_数据集干货:一文读懂Mapsidejoin

    我们知道数据分析的第一步是准备数据,所以在前面的课程里,我们介绍了元数据.今天这篇文章,主要介绍大数据量组合数据集在永洪中的应用实例:Mapsidejoin. 什么是Mapsidejoin?按照字面意 ...

  8. 苹果计算机错误怎么改,连接apple id服务器时出错怎么解决?

    原标题:连接apple id服务器时出错怎么解决? 如何在连接Apple ID服务器时解决它?当我们使用Apple设备时,无论是手机还是计算机,许多用户都不知道这是否这是在使用移动电话或计算机期间可以 ...

  9. 查询字符串位置_带合并单元格的数据查询套路,有用

    小伙伴们好啊,相信大家都被合并单元格的问题困扰过吧,今天就和大家分享一个带合并单元格的数据查询问题.在下面这个图中,A列是带合并单元格的部门,B列是该部门的员工名单. 现在需要根据D2单元格中的姓名, ...

最新文章

  1. mariadb转mysql_MariaDB/MySQL备份和恢复(二):数据导入、导出
  2. DeepLearning based on PaddlePaddle系列二
  3. (转)LinqToSql的连接字符串自动调用配置文件中的连接字符串
  4. 现行的web开发框架分析
  5. docker删除所有镜像和容器
  6. Springcloud 引导上下文
  7. linux基础服务,Linux基础
  8. 如何在两个服务器之间迁移MySQL数据库
  9. python文件操作大全
  10. spring security免登录动态配置方案2
  11. Atitit 代理CGLIB 动态代理 AspectJ静态代理区别
  12. 学习了Python大数据之后,将来主要做什么
  13. Convert excel format exception.You can try specifying the ‘excelType‘ yourse-----EasyExcel导入
  14. Java -- 定时任务实现方式
  15. blender做MMD心得(三)
  16. 06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?
  17. 统计学③——总体与样本的差异在哪里
  18. Win11怎么删除微软输入法?
  19. Linux命令之ll
  20. Real-Time High-Resolution Background Matting

热门文章

  1. R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义三线表结构(将因子变量细粒度化重新构建三线图)、为不同的变量显示不同的统计信息
  2. python使用matplotlib可视化、使用annotate函数以及arrowprops参数在可视化图像中添加箭头和文本注释(arrow and text annotation)
  3. R语言构建回归模型并进行模型诊断(线性关系不满足时)、进行变量变换(Transforming variables)、使用car包中的boxTidwell函数对预测变量进行Box–Tidwell变换
  4. 预测概率是什么?ROC曲线是什么?PR曲线是什么?ROC曲线和PR曲线使用场景差异?
  5. plotly基于dataframe数据绘制股票OHLC图
  6. html5 银行卡号校验,js 实现 银行卡号 格式验证 示例代码
  7. Numpy与Pandas基础
  8. ikbc键盘自动打字_键盘按斤卖,一斤一百块?IKBC W200机械键盘简晒
  9. JAVA基础4-循环语句
  10. python比较两个xml_python比较2个xml内容的方法