测试人生,人生测试

Oracle数据库查询十个小技巧(二)

上一篇 / 下一篇  2008-10-22 16:35:18 / 个人分类:数据库

第六个技巧:合理处理NULL字段。

  Null字段在数据库中是一个比较特殊的字段。Null字段表示未知值或者说缺少数据,注意若某个字段的值为Null,则这个字段即不是空格,也不是0。当插入记录的时候,若这个字段没有被赋值,而且也没有默认值的话,则这个字段系统默认给他的值就是“Null”。

  由于这个值比较特殊,在查询的时候,及时经验丰富的数据库管理员,有时候在处理起来的时候,也会发生错误。为此,笔者在这里总结一些,在数据库查询的时候,关于这个空字段查询的一些需要注意的地方。

  一是要注意NULL字段的数字运算问题。

   如现在在一个薪资管理系统中,有一张薪资表,其中有基本工资与加班工资两个字段。若某个用户的基本工资为2000,而其加班工资没有。在输入这条记录的 时候,由于加班工资这个字段中,没有输入数据,而且在数据库设计的时候,也没有个这个字段设置0的默认值。所以,当这条记录保存的时候,数据库系统会给这 个字段自动赋值,这个字段的值就为NULL。

  若我们用Select语句查询这条记录的时候,其加班工资这个字段显示的数据是空的。看起来好像是空格,而实际上其存储的不是空格。此时,我们若利用查询语句想知道,这个员工的总的工资(即加班工资加上基本工资)为多少的时候会有什么结果呢?

   我们可以利用Select 员工姓名,基本工资,加班工资,基本工资+加班工资 as 总工资 FROM 员工薪资表; 我们可以通过这条语句来查询这个员工总的工资是多少。但是,这条语句会查询出我们想要的结果吗?我们执行一下这条语句,结果我们会发现,得出的结果跟我们 想象的大相径庭。最后显示的总工资一栏中,为空格。

  原来,Oracle数据库设计中,若一个NULL字段跟其他字段进行四则运算时,其显示的结果都为空。所以,若一个字段为NUU,则无论加减乘除,最后其结果都返回的施NULL值。这显然跟我们想象的不同。

  针对这种情况,我们该如何处理呢?在数据库设计过程中,主要有两种处理方法。

  一是在设计表的时候,对于这些需要参与运算的字段,要设置默认值。如可以把这个字段的默认值设置为0。则当添加这条记录的时候,即使前台用户没有给其设置值。在保存数据的时候,系统也会给其默认值0。如此的话,在进行四则运算的时候,才可能得到我们想要的值。

   二是在查询的时候,需要考虑到这个NULL值的影响。有时候,若数据库中已经有记录,则不能够改变数据库字段的默认值。遇到这种情况,若我们需要对 NULL字段与数字字段进行四则运算的时候,又该如何处理呢?此时,我们就需要在查询的时候,给NULL字段赋0的值。具体我们可以在查询语句中,如此定 义。Select 员工姓名,基本工资,加班工资,基本工资+NVL(加班工资,0) as 总工资 FROM 员工薪资表;如此的话,当加班工资的值为NULL的时候,则系统在运算的时候,会把其当作0来处理。这么处理,我们就可以得到我们所想要的结果。不过一般 情况下,这一种处理方式是不得已而为之的。最好的是,在数据库表设计的时候,就给相关的字段设置0的默认值。

  另外,还有一个函数 NVL2跟NVL函数功能类似,只是其多了一个参数而已,其表达式为NVL2(参数1,参数2,参数3)。它的含义是,当参数1不为空值时,则返回的值为 参数2;当参数1是空值时,则范围的是参数3。若用这个函数实现NVL函数的目的时,则就需要如此改写上面这个案例的函数参数写法:NAV2 (加班工资,基本工资+加班工资,基本工资)。可见,两个函数有异曲同工之妙。具体采用哪种函数为好,则就需要根据数据库管理员的爱好来选择了。

  二是如何查询NULL字段。

   如果现在有一张员工基本信息表,其中有一个身份证号码的字段。现在若用户想知道,有哪些员工还没有记录身份证号码信息,该如何做呢?由于这个 NULL字段不为空格或者0。若我们在查询条件语句中,利用’0’ 或者’’(空格)作为查询条件的话,是查不到我们所需要的结果的。此时,在数据库中,提供了一个专门用户查询NULL字段记录的函数IS NULL。若我们现在想知道哪些员工没有注明身份证信息时,就可以利用如下的语句来实现。

  Select 员工姓名,身份证号码 from 员工基本信息表 where 身份证号码 is not null;

  通过以上这条语句就可以实现查找身份证件为空的员工信息的目的。


TAG: 数据库

 

评分:0

我来说两句

日历

« 2024-03-22  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 5250
  • 日志数: 12
  • 书签数: 1
  • 建立时间: 2007-10-13
  • 更新时间: 2008-10-22

RSS订阅

Open Toolbar