zoukankan      html  css  js  c++  java
  • SQL的null函数

    NULL 值是遗漏的未知数据。

    默认地,表的列可以存放 NULL 值。

    SQL NULL 值

    如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。

    NULL 值的处理方式与其他值不同。

    NULL 用作未知的或不适用的值的占位符。

    注释:无法比较 NULL 和 0;它们是不等价的。

    SQL 的 NULL 值处理

    请看下面的 "Persons" 表:

    IdLastNameFirstNameAddressCity
    1 Adams John   London
    2 Bush George Fifth Avenue New York
    3 Carter Thomas   Beijing

    假如 "Persons" 表中的 "Address" 列是可选的。这意味着如果在 "Address" 列插入一条不带值的记录,"Address" 列会使用 NULL 值保存。

    那么我们如何测试 NULL 值呢?

    无法使用比较运算符来测试 NULL 值,比如 =, <, 或者 <>。

    我们必须使用 IS NULL 和 IS NOT NULL 操作符。

    SQL IS NULL

    我们如何仅仅选取在 "Address" 列中带有 NULL 值的记录呢?

    我们必须使用 IS NULL 操作符:

    SELECT LastName,FirstName,Address FROM Persons
    WHERE Address IS NULL
    

    结果集:

    LastNameFirstNameAddress
    Adams John  
    Carter Thomas  

     

     

     

    提示:请始终使用 IS NULL 来查找 NULL 值。

    SQL IS NOT NULL

    我们如何选取在 "Address" 列中不带有 NULL 值的记录呢?

    我们必须使用 IS NOT NULL 操作符:

    SELECT LastName,FirstName,Address FROM Persons
    WHERE Address IS NOT NULL
    

    结果集:

    LastNameFirstNameAddress
    Bush George Fifth Avenue

    SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数

    请看下面的 "Products" 表:

    P_IdProductNameUnitPriceUnitsInStockUnitsOnOrder
    1 computer 699 25 15
    2 printer 365 36  
    3 telephone 280 159 57

    假如 "UnitsOnOrder" 是可选的,而且可以包含 NULL 值。

    我们使用如下 SELECT 语句:

    SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
    FROM Products
    

    在上面的例子中,如果有 "UnitsOnOrder" 值是 NULL,那么结果是 NULL。

    微软的 ISNULL() 函数用于规定如何处理 NULL 值。

    NVL(), IFNULL() 和 COALESCE() 函数也可以达到相同的结果。

    在这里,我们希望 NULL 值为 0。

    下面,如果 "UnitsOnOrder" 是 NULL,则不利于计算,因此如果值是 NULL 则 ISNULL() 返回 0。

    SQL Server / MS Access

    SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
    FROM Products

    Oracle

    Oracle 没有 ISNULL() 函数。不过,我们可以使用 NVL() 函数达到相同的结果:

    SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
    FROM Products

    MySQL

    MySQL 也拥有类似 ISNULL() 的函数。不过它的工作方式与微软的 ISNULL() 函数有点不同。

    在 MySQL 中,我们可以使用 IFNULL() 函数,就像这样:

    SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
    FROM Products
    

    或者我们可以使用 COALESCE() 函数,就像这样:

    SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
    FROM Products
  • 相关阅读:
    古谚、评论与论断、名篇与名言
    重读《西游记》
    重读《西游记》
    命名之法 —— 时间、季节、地点
    命名之法 —— 时间、季节、地点
    文言的理解 —— 古时的称谓、别称、别名
    文言的理解 —— 古时的称谓、别称、别名
    Oracle GoldenGate for Oracle 11g to PostgreSQL 9.2.4 Configuration
    瀑布 敏捷 文档
    POJ 1325 ZOJ 1364 最小覆盖点集
  • 原文地址:https://www.cnblogs.com/JSWBK/p/5607517.html
Copyright © 2011-2022 走看看