• 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值有深入的理解,并在实际应用中恰当地使用。

  • 相关阅读:
    博文增加商业化内容广告卡片,征求反馈
    基于某评论的TF-IDF下的LDA主题模型分析
    定时器的类型
    .net餐厅管理系统数据层餐厅服务类修改、查询菜品信息
    pod(八):pod的调度——将 Pod 指派给节点
    实验项目5.1 深度学习算法与硬件加速器
    【中国知名企业高管团队】系列23:金山软件KINGSOFT
    密码学——MAC
    大环境之下软件测试行业趋势能否上升?
    初识java
  • 原文地址:https://blog.csdn.net/tang7mj/article/details/133790415