第22章 MySQL NULL 值处理教程

第22章 MySQL NULL 值处理教程

咱们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。

为了处理这种情况,MySQL提供了三大运算符:

  • IS NULL: 当列的值是 NULL,此运算符return true。
  • IS NOT NULL: 当列的值不为 NULL, 运算符return true。
  • <=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时return true。

关于 NULL 的条件比较运算是比较特殊的。大王不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。

在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远return NULL,即 NULL = NULL return NULL 。

MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。

注意:


    select * , columnName1+ifnull(columnName2,0) from tableName;

columnName1,columnName2 为 int 型,当 columnName2 中,有值为 null 时,columnName1+columnName2=null, ifnull(columnName2,0) 把 columnName2 中 null 值转为 0。


在命令提示符中使用 NULL 值

以下实例中假设database liulianjiangcsdn 中的表 liulianjiangcsdn_test_tbl 含有两列 liulianjiangcsdn_author 和 liulianjiangcsdn_count, liulianjiangcsdn_count 中设置插入NULL值。

实例

尝试以下实例:


    创建数据表 liulianjiangcsdn_test_tbl
     
    root@host# mysql -u root -p password;
    Enter password:*******
    mysql> use liulianjiangcsdn;
    Database changed
    mysql> create table liulianjiangcsdn_test_tbl
        -> (
        -> liulianjiangcsdn_author varchar(40) NOT NULL,
        -> liulianjiangcsdn_count  INT
        -> );
    Query OK, 0 rows affected (0.05 sec)
    mysql> INSERT INTO liulianjiangcsdn_test_tbl (liulianjiangcsdn_author, liulianjiangcsdn_count) values ('liulianjiangcsdn', 20);
    mysql> INSERT INTO liulianjiangcsdn_test_tbl (liulianjiangcsdn_author, liulianjiangcsdn_count) values ('liulianjiangcsdn教程', NULL);
    mysql> INSERT INTO liulianjiangcsdn_test_tbl (liulianjiangcsdn_author, liulianjiangcsdn_count) values ('Google', NULL);
    mysql> INSERT INTO liulianjiangcsdn_test_tbl (liulianjiangcsdn_author, liulianjiangcsdn_count) values ('FK', 20);
     
    mysql> SELECT * from liulianjiangcsdn_test_tbl;
    +---------------+--------------+
    | liulianjiangcsdn_author | liulianjiangcsdn_count |
    +---------------+--------------+
    | liulianjiangcsdn        | 20           |
    | liulianjiangcsdn教程  | NULL         |
    | Google        | NULL         |
    | FK            | 20           |
    +---------------+--------------+
    4 rows in set (0.01 sec)

以下实例中大王可以看到 = 和 != 运算符是不起作用的:


    mysql> SELECT * FROM liulianjiangcsdn_test_tbl WHERE liulianjiangcsdn_count = NULL;
    Empty set (0.00 sec)
    mysql> SELECT * FROM liulianjiangcsdn_test_tbl WHERE liulianjiangcsdn_count != NULL;
    Empty set (0.01 sec)

查找数据表中 liulianjiangcsdn_test_tbl 列是否为 NULL,必须使用 IS NULLIS NOT NULL,如下实例:


    mysql> SELECT * FROM liulianjiangcsdn_test_tbl WHERE liulianjiangcsdn_count IS NULL;
    +---------------+--------------+
    | liulianjiangcsdn_author | liulianjiangcsdn_count |
    +---------------+--------------+
    | liulianjiangcsdn教程  | NULL         |
    | Google        | NULL         |
    +---------------+--------------+
    2 rows in set (0.01 sec)
     
    mysql> SELECT * from liulianjiangcsdn_test_tbl WHERE liulianjiangcsdn_count IS NOT NULL;
    +---------------+--------------+
    | liulianjiangcsdn_author | liulianjiangcsdn_count |
    +---------------+--------------+
    | liulianjiangcsdn        | 20           |
    | FK            | 20           |
    +---------------+--------------+
    2 rows in set (0.01 sec)


使用 PHP 脚本处理 NULL 值

PHP 脚本中大王可以在 if…else 语句来处理变量是否为空,并生成相应的条件语句。

以下实例中 PHP 设置了 $liulianjiangcsdn_count 变量,然后使用该变量与数据表中的 liulianjiangcsdn_count 字段进行比较:


    MySQL ORDER BY 测试: 
     
    
    <?php
    $dbhost = 'localhost';  // mysqlserver 主机地址
    $dbuser = 'root';            // mysql用户名
    $dbpass = '123456';          // mysql用户名password 
    $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
    if(! $conn )
    {
        die('连接失败: ' . mysqli_error($conn));
    }
    // 设置编码,防止中文乱码
    mysqli_query($conn , "set names utf8");
     
    if( isset($liulianjiangcsdn_count ))
    {
       $sql = "SELECT liulianjiangcsdn_author, liulianjiangcsdn_count
               FROM  liulianjiangcsdn_test_tbl
               WHERE liulianjiangcsdn_count = $liulianjiangcsdn_count";
    }
    else
    {
       $sql = "SELECT liulianjiangcsdn_author, liulianjiangcsdn_count
               FROM  liulianjiangcsdn_test_tbl
               WHERE liulianjiangcsdn_count IS NULL";
    }
    mysqli_select_db( $conn, 'liulianjiangcsdn' );
    $retval = mysqli_query( $conn, $sql );
    if(! $retval )
    {
        die('无法读取数据: ' . mysqli_error($conn));
    }
    echo '<h2>liulianjiangcsdn教程 IS NULL 测试<h2>';
    echo '<table border="1"><tr><td>作者</td><td>登陆次数</td></tr>';
    while($row = mysqli_fetch_array($retval, MYSQL_ASSOC))
    {
        echo "<tr>".
             "<td>{$row['liulianjiangcsdn_author']} </td> ".
             "<td>{$row['liulianjiangcsdn_count']} </td> ".
             "</tr>";
    }
    echo '</table>';
    mysqli_close($conn);
    ?>

本专栏所有文章

第1章 MySQL 教程第2章 MySQL 安装教程
第3章 MySQL 管理教程第4章 MySQL PHP 语法教程
第5章 MySQL 连接教程第6章 MySQL 创建数据库教程
第7章 MySQL 删除数据库教程第8章 MySQL 选择数据库教程
第9章 MySQL 数据类型教程第10章 MySQL 创建数据表教程
第11章 MySQL 删除数据表教程第12章 MySQL 插入数据教程
第13章 MySQL 查询数据教程第14章 MySQL WHERE 子句教程
第15章 MySQL UPDATE 更新教程第16章 MySQL DELETE 语句教程
第17章 MySQL LIKE 子句教程第18章 MySQL UNION教程
第19章 MySQL 排序教程第20章 MySQL 分组教程
第21章 MySQL 连接的使用教程第22章 MySQL NULL 值处理教程
第23章 MySQL 正则表达式教程第24章 MySQL 事务教程
第25章 MySQL ALTER命令教程第26章 MySQL 索引教程
第27章 MySQL 临时表教程第28章 MySQL 复制表教程
第29章 MySQL 元数据教程第30章 MySQL 序列使用教程
第31章 MySQL 处理重复数据教程第32章 MySQL 及 SQL 注入教程
第33章 MySQL 导出数据教程第34章 MySQL 导入数据教程
第35章 MySQL 函数教程第36章 MySQL 运算符教程

寄语

本文有榴莲酱CSDN原创,欢迎点赞、转载,博客地址:https://blog.csdn.net/qq441540598

  • 人生无常。社会需要你,就必须赶快付出;今天走得动,就赶快起步走。
  • 欢乐吧。朋友们,不管您身在何处,幸运与快乐时刻陪伴着您。
  • 不应当急于求成,应当去熟悉自己的研究对象,锲而不舍,时间会成全一切。凡事开始最难,然而更难的是何以善终。
  • 要有“三独立”:即经济独立、能力独立、思想独立。
  • 放弃该放弃的是无奈,放弃不该放弃的。是无能;不放弃该放弃的是无知,不放弃不该放弃的是执着。得不到你想要的东西,那么原因只有一个,就是你不知道到底想要什么。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

榴莲酱csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值