处理MySQL NULL值

处理MySQL NULL值 (Handling MySQL NULL Values)

We have seen the SQL SELECT command along with the WHERE clause to fetch data from a MySQL table, but when we try to give a condition, which compares the field or the column value to NULL, it does not work properly.

我们已经看到了SQL SELECT命令和WHERE子句,以便从MySQL表中获取数据,但是当我们尝试给出一个条件,该条件将字段或列的值与NULL进行比较时,它不能正常工作。

To handle such a situation, MySQL provides three operators −

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

  • IS NULL − This operator returns true, if the column value is NULL.

    IS NULL-如果列值为NULL,则此运算符返回true。

  • IS NOT NULL − This operator returns true, if the column value is not NULL.

    IS NOT NULL-如果列值不为NULL,则此运算符返回true。

  • <=> − This operator compares values, which (unlike the = operator) is true even for two NULL values.

    <=> -此运算符比较值(与=运算符不同),即使对于两个NULL值也是如此。

The conditions involving NULL are special. You cannot use = NULL or != NULL to look for NULL values in columns. Such comparisons always fail because it is impossible to tell whether they are true or not. Sometimes, even NULL = NULL fails.

涉及NULL的条件是特殊的。 您不能使用= NULL或!= NULL在列中查找NULL值。 这样的比较总是失败的,因为无法判断它们是否正确。 有时,即使NULL = NULL也会失败。

To look for columns that are or are not NULL, use IS NULL or IS NOT NULL.

要查找是否为NULL的列,请使用IS NULLIS NOT NULL

在命令提示符处使用NULL值 (Using NULL values at the Command Prompt)

Assume that there is a table called tcount_tbl in the TUTORIALS database and it contains two columns namely tutorial_author and tutorial_count, where a NULL tutorial_count indicates that the value is unknown.

假定在TUTORIALS数据库中有一个名为tcount_tbl的表,它包含两列,即tutorial_authortutorial_count ,其中NULL tutorial_count表示该值未知。

(Example)

Try the following examples −

尝试以下示例-


root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tcount_tbl
   -> (
   -> tutorial_author varchar(40) NOT NULL,
   -> tutorial_count  INT
   -> );
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO tcount_tbl
   -> (tutorial_author, tutorial_count) values ('mahran', 20);

mysql> INSERT INTO tcount_tbl
   -> (tutorial_author, tutorial_count) values ('mahnaz', NULL);

mysql> INSERT INTO tcount_tbl
   -> (tutorial_author, tutorial_count) values ('Jen', NULL);

mysql> INSERT INTO tcount_tbl
   -> (tutorial_author, tutorial_count) values ('Gill', 20);

mysql> SELECT * from tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
|     mahran      |       20       |
|     mahnaz      |      NULL      |
|      Jen        |      NULL      |
|     Gill        |       20       |
+-----------------+----------------+
4 rows in set (0.00 sec)

mysql>

You can see that = and != do not work with NULL values as follows −

您可以看到=和!=不适用于NULL值,如下所示-


mysql> SELECT * FROM tcount_tbl WHERE tutorial_count = NULL;
Empty set (0.00 sec)

mysql> SELECT * FROM tcount_tbl WHERE tutorial_count != NULL;
Empty set (0.01 sec)

To find the records where the tutorial_count column is or is not NULL, the queries should be written as shown in the following program.

要查找tutorial_count列为NULL或不为NULL的记录,应按以下程序所示编写查询。


mysql> SELECT * FROM tcount_tbl 
   -> WHERE tutorial_count IS NULL;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
|     mahnaz      |      NULL      |
|      Jen        |      NULL      |
+-----------------+----------------+
2 rows in set (0.00 sec)
mysql> SELECT * from tcount_tbl 
   -> WHERE tutorial_count IS NOT NULL;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
|     mahran      |       20       |
|     Gill        |       20       |
+-----------------+----------------+
2 rows in set (0.00 sec)

在PHP脚本中处理NULL值 (Handling NULL Values in a PHP Script)

You can use the if...else condition to prepare a query based on the NULL value.

您可以使用if ... else条件根据NULL值准备查询。

(Example)

The following example takes the tutorial_count from outside and then compares it with the value available in the table.

以下示例从外部获取tutorial_count ,然后将其与表中的可用值进行比较。


<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   if( isset($tutorial_count )) {
      $sql = 'SELECT tutorial_author, tutorial_count
         FROM  tcount_tbl
         WHERE tutorial_count = $tutorial_count';
   } else {
      $sql = 'SELECT tutorial_author, tutorial_count
         FROM  tcount_tbl
         WHERE tutorial_count IS $tutorial_count';
   }

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Author:{$row['tutorial_author']}  <br> ".
         "Count: {$row['tutorial_count']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

翻译自: https://www.tutorialspoint.com/mysql/mysql-null-values.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值