• 3.6 空值的处理


    思维导图:

     

    **3.6 空值的处理**

    在前面的章节中,我们已经多次接触到了空值(NULL)的概念及其处理方式。在这一节中,我们将系统性地深入探讨空值的问题。

    **定义:**
    空值表示“不知道”、“不存在”或“无意义”的值。SQL语言允许在某些情况下某些元组的某些属性取空值。其出现的原因可以归纳为以下几点:
    - 该属性应该有一个值,但当前不知道其具体值。
    - 该属性不应该有值。
    - 由于某种原因不便于填写。

    **1. 空值的产生**
      
       * 例3.79:   
         插入一个学生号为“201215126”的学生、课程号为“1”的记录,但成绩为空。

    1.    INSERT INTO SC(Sno, Cno, Grade)
    2.      VALUES('201215126', '1', NULL);


         或
     

    1.  INSERT INTO SC(Sno, Cno)
    2.      VALUES('201215126', '1');

       * 例3.80:   
         将学生号为“201215200”的学生所属系更改为空值。
     

    1.      UPDATE Student
    2.      SET Sdept = NULL
    3.      WHERE Sno = '201215200';

    **2. 空值的判断**

       为了判断一个属性的值是否为空,我们使用IS NULL或IS NOT NULL。

       * 例3.81:   
         从Student表中选取未填写数据的学生信息。
     

    1.    SELECT *
    2.      FROM Student
    3.      WHERE Sname IS NULL OR Ssex IS NULL OR Sage IS NULL OR Sdept IS NULL;

    **3. 空值的约束条件**

       属性定义中,具有NOT NULL约束的属性不能取空值。另外,具有UNIQUE约束的属性或主键属性也不能取空值。

    **4. 空值的运算**

       - **算术运算**:空值与另一个值(包括另一个空值)进行的算术运算结果为NULL。
       - **比较运算**:空值与另一个值(包括另一个空值)进行的比较运算结果为UNKNOWN。
       - **逻辑运算**:因为存在UNKNOWN,所以逻辑运算由二值逻辑扩展为三值逻辑。其真值表如表3.8所示,其中T表示TRUE,F表示FALSE,U表示UNKNOWN。

    ---

     

    总结:

    **空值处理总结:**

    **重点:**

    1. **定义**:空值(NULL)表示数据项的不确定性,如“不知道”、“不存在”或“无意义”。
    2. **产生**:插入时某些属性未被赋值、外连接操作、属性更新为NULL等操作可能导致空值的产生。
    3. **判断**:使用`IS NULL`或`IS NOT NULL`进行空值判断。
    4. **约束**:某些属性,如有NOT NULL或UNIQUE约束的,不能取空值。
    5. **运算**:空值参与的算术、比较或逻辑运算会产生特殊结果。

    **难点:**

    1. **三值逻辑**:传统的二值逻辑(TRUE和FALSE)在涉及到NULL时会扩展成三值逻辑(TRUE、FALSE、UNKNOWN),这使得逻辑判断变得复杂。
    2. **参与运算的结果**:空值参与的运算往往结果不如预期直观,例如两个空值进行比较的结果是UNKNOWN而不是TRUE或FALSE。

    **易错点:**

    1. **误认为NULL与空字符串相同**:在数据库中,空值NULL与空字符串是完全不同的。
    2. **不恰当的使用**:在进行查询或更新操作时,直接使用等号(=)来查找或处理NULL是无效的,应该使用`IS NULL`或`IS NOT NULL`。
    3. **空值在聚合函数中的表现**:如SUM, AVG等聚合函数在处理空值时通常会忽略它,但COUNT函数会计算非空值。

    **使用技巧:**

    1. **避免不必要的空值**:在设计数据库时,应仔细考虑哪些字段真的可能需要NULL值,并为其余字段设置NOT NULL约束,以保持数据完整性。
    2. **默认值**:为某些可能为NULL的属性设置默认值,可以减少不必要的NULL出现。
    3. **CASE语句**:在查询中使用CASE语句可以有效地处理和转换空值。
    4. **COALESCE和NULLIF函数**:这些SQL函数允许你更方便地处理和替换空值。
    5. **谨慎使用外连接**:外连接可能会导致空值的产生,确保你理解并期望这种行为。

    总的来说,理解和正确处理空值是数据库操作中的一个重要环节。为确保数据的完整性和准确性,需要对NULL值有深入的理解,并在实际应用中恰当地使用。

  • 相关阅读:
    Maven 项目中常用的工具包
    WPF/C#:异常处理
    【创建型模式】抽象工厂模式
    编写高质量代码改善程序的157个建议:使用Dynamic来简化反射的实现
    【服务器数据恢复】ext3文件系统下硬盘坏道掉线的数据恢复案例
    关于大模型是否开源的分析
    Mybatis学习周报总结
    Web大学生网页作业成品:基于html制作中国科技发展网站设计题材【航天之路7页】HTML+CSS+JavaScript
    Java修饰符 abstract,static,final 的区别详解
    无代码平台单项选择入门教程
  • 原文地址:https://blog.csdn.net/tang7mj/article/details/133790415