Manejo de valores NULL en MySQL

Hemos visto SQL SELECCIONE equipo junto con DÓNDE una sugerencia para obtener datos de una tabla MySQL, pero cuando intentamos dar una condición que compare el valor de un campo o columna con CERO, no funciona como se esperaba.

Para hacer frente a esta situación, MySQL proporciona tres operadores:

  • NULO – Este operador devuelve verdadero si el valor de la columna es NULL.

  • NO VACÍO – Este operador devuelve verdadero si el valor de la columna no es NULL.

  • <=> – Este operador compara valores, que (a diferencia del operador =) es verdadero incluso para dos valores NULL.

Las condiciones NULAS son especiales. No puedes usar = CERO ¡o! = CERO busque valores NULL en columnas. Estas comparaciones siempre fallan porque es imposible saber si son ciertas o no. A veces, incluso NULL = NULL no funciona.

Para buscar columnas que son o no NULL, use NULO o NO VACÍO

Usar valores NULL en la línea de comandos

Supongamos que hay una tabla llamada tcount_tbl en la base de datos TUTORIALS y contiene dos columnas, a saber tutorial_author y tutorial_countdonde NULL tutorial_count indica que el valor es desconocido.

Ejemplo

Pruebe los siguientes ejemplos:

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>

Puedes ver que = y = no funciona con valores NULL de la siguiente manera:

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)

Para encontrar registros donde la columna tutorial_count es NULL o no NULL, las consultas deben escribirse como se muestra en el siguiente programa.

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)

Manejo de valores NULL en script PHP

puedes usar si todavía condición para preparar una consulta basada en un valor nulo.

Ejemplo

El siguiente ejemplo usa tutorial_count externamente y luego lo compara con el valor disponible en la tabla.

<?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 successfullyn";
   mysql_close($conn);
?>

🚫