zoukankan      html  css  js  c++  java
  • SQL NULL 值【摘自W3C】

    SQL NULL 值

    本章讲解 IS NULL 和 IS NOT NULL 操作符。

    NULL 值是遗漏的未知数据。默认地,表的列可以存放 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

    NULL值得特殊处理

    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
  • 相关阅读:
    [POJ1811]Prime Test
    Pollard-rho算法[因子分解算法]
    Miller-Rabin算法
    [POJ2886]Who Gets the Most Candies?
    Failed to connect to raw.githubusercontent.com port 443
    MAC安装flutter开发环境
    Jenkins自动化打包(Gitlab)并上传蒲公英
    Jenkins中插件下载失败的解决办法
    iOS开发~防止navigation多次push一个页面
    Jenkins 更新 jenkins.war的方法
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/5509012.html
Copyright © 2011-2022 走看看