Gestion des valeurs NULL MySQL

Nous avons vu le SQL SELECT commande avec la WHERE clause pour récupérer les données d'une table MySQL, mais lorsque nous essayons de donner une condition, qui compare le champ ou la valeur de la colonne à NULL, cela ne fonctionne pas correctement.

Pour gérer une telle situation, MySQL fournit trois opérateurs -

  • IS NULL - Cet opérateur renvoie true, si la valeur de la colonne est NULL.

  • IS NOT NULL - Cet opérateur renvoie true, si la valeur de la colonne n'est pas NULL.

  • <=> - Cet opérateur compare les valeurs, qui (contrairement à l'opérateur =) est vraie même pour deux valeurs NULL.

Les conditions impliquant NULL sont spéciales. Vous ne pouvez pas utiliser =NULL ou! = NULLpour rechercher des valeurs NULL dans les colonnes. De telles comparaisons échouent toujours car il est impossible de dire si elles sont vraies ou non. Parfois, même NULL = NULL échoue.

Pour rechercher des colonnes qui sont ou non NULL, utilisez IS NULL ou IS NOT NULL.

Utilisation de valeurs NULL à l'invite de commandes

Supposons qu'il existe une table appelée tcount_tbl dans la base de données TUTORIELS et contient deux colonnes à savoir tutorial_author et tutorial_count, où un NULL tutorial_count indique que la valeur est inconnue.

Exemple

Essayez les exemples suivants -

[email protected]# 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>

Vous pouvez voir que = et != ne fonctionne pas avec les valeurs NULL comme suit -

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)

Pour rechercher les enregistrements dans lesquels la colonne tutorial_count est ou non NULL, les requêtes doivent être écrites comme indiqué dans le programme suivant.

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)

Gestion des valeurs NULL dans un script PHP

Vous pouvez utiliser le if...else condition pour préparer une requête basée sur la valeur NULL.

Exemple

L'exemple suivant prend le tutorial_count de l'extérieur puis le compare à la valeur disponible dans le tableau.

<?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);
?>