English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Ya sabemos que MySQL utiliza el comando SQL SELECT y la cláusula WHERE para leer datos de la tabla, pero cuando el campo de condición de la consulta proporcionada es NULL, este comando puede no funcionar correctamente.
Para manejar esta situación, MySQL proporciona tres operadores principales:
IS NULL: Cuando el valor de la columna es NULL, este operador devuelve true.
IS NOT NULL: Cuando el valor de la columna no es NULL, el operador devuelve true.
<=>: El operador de comparación (diferente del operador =), devuelve true cuando los dos valores comparados son iguales o ambos son NULL.
La comparación de operaciones condicionales con NULL es especial. No puedes usar = NULL o != NULL para buscar valores NULL en las columnas.
En MySQL, la comparación de valores NULL con cualquier otro valor (incluso NULL) siempre devuelve NULL, es decir, NULL = NULL devuelve NULL.
En MySQL, el manejo de NULL se realiza con los operadores IS NULL y IS NOT NULL.
Nota:
seleccionar * , columnName1+ifnull(columnName2,0) de tableName;columnName1,columnName2 es de tipo int, cuando columnName2 en el que hay valores null, columnName1+columnName2=null, ifnull(columnName2,0) poner columnName2 Los valores null se convierten en 0.
En el siguiente ejemplo se asume la base de datos w3La tabla w en codebox3codebox_test_tbl contiene dos columnas w3codebox_author y w3codebox_count, w3Establece valores NULL en codebox_count.
Prueba el siguiente ejemplo:
root@anfitrión# mysql -u root -p contraseña; Introduce contraseña:******* mysql> use w3codebox; Base de datos cambiada mysql> create table w3codebox_test_tbl -> ( -> w3codebox_author varchar(40) NO NULL, -> w3codebox_count INT -> ); Consulta OK, 0 filas afectadas (0.05 sec) mysql> INSERT INTO w3codebox_test_tbl (w3codebox_author, w3codebox_count) valores ('w3codebox', 20); mysql> INSERT INTO w3codebox_test_tbl (w3codebox_author, w3codebox_count) valores ('基础教程网', NULL); mysql> INSERT INTO w3codebox_test_tbl (w3codebox_author, w3codebox_count) valores ('Google', NULL); mysql> INSERT INTO w3codebox_test_tbl (w3codebox_author, w3codebox_count) valores ('FK', 20); mysql> SELECT * from w3codebox_test_tbl; +---------------+--------------+ | w3codebox_author | w3codebox_count | +---------------+--------------+ | w3codebox | 20 | | 基础教程网 | NULL | | Google | NULL | | FK | 20 | +---------------+--------------+ 4 rows in set (0.01 sec)
En el siguiente ejemplo, puedes ver que los operadores = y != no tienen efecto:
mysql> SELECT * FROM w3codebox_test_tbl WHERE w3codebox_count = NULL; Conjunto vacío (0.00 sec) mysql> SELECT * FROM w3codebox_test_tbl WHERE w3codebox_count != NULL; Empty set (0.01 sec)
查找数据表中 w3codebox_test_tbl 列是否为 NULL,必须使用 IS NULL 和 IS NOT NULL,如下示例:
mysql> SELECT * FROM w3codebox_test_tbl WHERE w3codebox_count IS NULL; +---------------+--------------+ | w3codebox_author | w3codebox_count | +---------------+--------------+ | 基础教程网 | NULL | | Google | NULL | +---------------+--------------+ 2 rows in set (0.01 sec) mysql> SELECT * from w3codebox_test_tbl WHERE w3codebox_count IS NOT NULL; +---------------+--------------+ | w3codebox_author | w3codebox_count | +---------------+--------------+ | w3codebox | 20 | | FK | 20 | +---------------+--------------+ 2 rows in set (0.01 sec)
PHP 脚本中你可以在 if...else 语句来处理变量是否为空,并生成相应的条件语句。
以下示例中 PHP 设置了 $w3codebox_count 变量,然后使用该变量与数据表中的 w3codebox_count 字段进行比较:
<?php $dbhost = 'localhost'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = '123456'; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn { die('连接失败: ' . mysqli_error($conn)); } // 设置编码,防止中文乱码 mysqli_query($conn, "set names utf8; if(isset($w3codebox_count)) { $sql = "SELECT w3codebox_author, w3codebox_count FROM3codebox_test_tbl WHERE w}}3codebox_count = $w3codebox_count"; } else { $sql = "SELECT w3codebox_author, w3codebox_count FROM3codebox_test_tbl WHERE w}}3codebox_count IS NULL"; } mysqli_select_db( $conn, 'w3codebox' ); $retval = mysqli_query( $conn, $sql ); if(! $retval ) { die('No se puede leer los datos: ' . mysqli_error($conn)); } echo '<h2Tutoriales básicos(oldtoolbag.com) IS NULL prueba<h2">; echo '<table border="1><tr><td> Autor</td><td>Veces de inicio de sesión</td></tr>'; while($row = mysqli_fetch_array($retval)) { echo "<tr>". "<td>{$row['w3codebox_author']} </td> ". "<td>{$row['w3codebox_count'} </td> ". "</tr>"; } echo '</table>'; mysqli_close($conn); ?>
El resultado de la salida se muestra como se ilustra a continuación: