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);
?>
レンダリング:
関連ビデオチュートリアルの推奨: 奇妙なNULL