Menangani Nilai MySQL NULL

Kami telah melihat SQL SELECT perintah bersama dengan WHERE klausa untuk mengambil data dari tabel MySQL, tetapi ketika kami mencoba memberikan kondisi, yang membandingkan bidang atau nilai kolom dengan NULL, ini tidak bekerja dengan baik.

Untuk menangani situasi seperti itu, MySQL menyediakan tiga operator -

  • IS NULL - Operator ini mengembalikan true, jika nilai kolom adalah NULL.

  • IS NOT NULL - Operator ini mengembalikan true, jika nilai kolom bukan NULL.

  • <=> - Operator ini membandingkan nilai, yang (tidak seperti operator =) adalah benar bahkan untuk dua nilai NULL.

Kondisi yang melibatkan NULL adalah khusus. Anda tidak dapat menggunakan =NULL atau! = NULLuntuk mencari nilai NULL di kolom. Perbandingan seperti itu selalu gagal karena tidak mungkin untuk mengatakan apakah itu benar atau tidak. Terkadang, bahkan NULL = NULL gagal.

Untuk mencari kolom yang NULL atau bukan, gunakan IS NULL atau IS NOT NULL.

Menggunakan nilai NULL di Command Prompt

Asumsikan bahwa ada tabel yang disebut tcount_tbl dalam database TUTORIALS dan berisi dua kolom yaitu tutorial_author dan tutorial_count, di mana tutorial_count NULL menunjukkan bahwa nilainya tidak diketahui.

Contoh

Coba contoh berikut -

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>

Anda dapat melihat bahwa = dan != tidak bekerja dengan nilai NULL sebagai berikut -

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)

Untuk menemukan record di mana kolom tutorial_count adalah atau bukan NULL, query harus ditulis seperti yang ditunjukkan pada program berikut.

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)

Menangani Nilai NULL dalam Script PHP

Anda dapat menggunakan if...else kondisi untuk menyiapkan kueri berdasarkan nilai NULL.

Contoh

Contoh berikut mengambil tutorial_count dari luar dan kemudian membandingkannya dengan nilai yang tersedia di tabel.

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