MySQL の NULL 値の処理


MySQL NULL 値の処理

MySQL が SQL SELECT コマンドと WHERE 句を使用してデータ テーブル内のデータを読み取ることはすでにわかっていますが、指定されたクエリ条件フィールドが NULL の場合、コマンドは正しく機能しない可能性があります。

この状況に対処するために、MySQL は 3 つの主要な演算子を提供します:

  • IS NULL: カラム値が NULL の場合、この演算子は true を返します。

  • IS NOT NULL: 列の値が NULL でない場合、演算子は true を返します。

  • <=>: 比較演算子 (= 演算子とは異なります)、比較された 2 つの値が NULL の場合に true を返します。

NULL の条件付き比較演算は非常に特殊です。 = NULL または != NULL を使用して列内の NULL 値を検索することはできません。

MySQL では、NULL 値と他の値 (NULL であっても) の比較は常に false を返します。つまり、NULL = NULL は false を返します。

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値を使用する

次の例では、データベースphpのテーブルphp_test_tblにphp_authorとphp_countの2つの列が含まれており、php_countにNULL値が設定されていると想定しています。

次の例を試してください:

データテーブル php_test_tbl を作成します

mysql> use php;
Database changed
mysql> create table php_test_tbl
    -> (
    -> php_author varchar(40) NOT NULL,
    -> php_count  INT
    -> );
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO php_test_tbl (php_author, php_count)
 values ('PHP', 20);
 mysql> INSERT INTO php_test_tbl (php_author, php_count) values ('PHP中文网', NULL);
 mysql> INSERT INTO php_test_tbl (php_author,php_count) values ('Google', NULL);
 mysql> INSERT INTO php_test_tbl (php_author, php_count) values ('FK', 20); 
mysql> SELECT * from php_test_tbl;
+---------------+--------------+
| php_author | php_count |
+---------------+--------------+
| PHP        | 20           |
| php中文网  | NULL         |
| Google        | NULL         |
| FK            | 20           |
+---------------+--------------+
 4 rows in set (0.01 sec)

次の例では、= 演算子と != 演算子が機能しないことがわかります:

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

次の php_test_tbl 列を見つけます。データ テーブル NULL かどうかにかかわらず、次の例に示すように、IS NULL と IS NOT NULL を使用する必要があります:

mysql> SELECT * FROM php_test_tbl WHERE php_count IS NULL;
+---------------+--------------+
| php_author | php_count |
+---------------+--------------+
| PHP中文网  | NULL         |
| Google        | NULL         |
+---------------+--------------+
2 rows in set (0.01 sec)
 mysql> SELECT * from php_test_tbl WHERE php_count IS NOT NULL;
+---------------+--------------+
| php_author | php_count |
+---------------+--------------+
| PHP       | 20           |
| FK            | 20           |
+---------------+--------------+
2 rows in set (0.01 sec)

NULL 値を処理するには PHP スクリプトを使用します

PHP スクリプトでは、 if...else ステートメントは、変数が空かどうかを処理し、対応する条件ステートメントを生成します。

次の例では、PHP は $php_count 変数を設定し、この変数を使用してデータ テーブルの php_count フィールドと比較します。


<?php
header("Content-Type: text/html;charset=utf-8");

$dbhost = 'localhost'; // mysqlサーバーのホストアドレス
$dbuser = 'root'; //mysql username
$dbpass = 'root'; : ' .mysqli_error($conn));
}
//中国語の文字化けを防ぐためにエンコーディングを設定します
mysqli_query($conn, "set names utf8");

if (isset($runoob_count))
{
$sql = "SELECT php_author, php_count
" " FROM "php_test_tbl
" " WHERE php_count = $php_count";
}
else
{
$sql = "SELECT php_author,php_count
" FROM php_test_tbl
WHERE php_count IS NULL";
}
mysqli_select_db( $conn, ' php' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
die('Unableデータを読み取るには: ' .mysqli_error($conn));
}
echo '<h2>PHP 中国語 Web サイト IS NULL test<h2>';
echo '<table border="1"><tr> <td>作成者</td><td>ログイン数< /td></tr>';
while($row = mysqli_fetch_array($retval, MYSQL_ASSOC))
{
echo "<tr> ".
"<td>{$row['php_author']} </td> ".
" "<td>{$row['php_count']} </td> ".
" " </tr>";
}
echo '</table>';
mysqli_close($conn);
?>

レンダリング:

Image 4.jpg

関連ビデオチュートリアルの推奨: 奇妙なNULL