MySQL NULL 값 처리

우리는 SQL을 보았다 SELECT 명령과 함께 WHERE MySQL 테이블에서 데이터를 가져 오기위한 절이지만 필드 또는 열 값을 비교하는 조건을 제공하려고 할 때 NULL, 제대로 작동하지 않습니다.

이러한 상황을 처리하기 위해 MySQL은 세 가지 연산자를 제공합니다.

  • IS NULL −이 연산자는 열 값이 NULL 인 경우 true를 반환합니다.

  • IS NOT NULL −이 연산자는 열 값이 NULL이 아닌 경우 true를 반환합니다.

  • <=> −이 연산자는 = 연산자와는 달리 두 개의 NULL 값에 대해서도 참인 값을 비교합니다.

NULL과 관련된 조건은 특별합니다. = 사용할 수 없습니다NULL 또는! = NULL열에서 NULL 값을 찾습니다. 그러한 비교는 그것이 사실인지 아닌지를 알 수 없기 때문에 항상 실패합니다. 때로는 NULL = NULL도 실패합니다.

NULL이거나 NULL이 아닌 열을 찾으려면 다음을 사용하십시오. IS NULL 또는 IS NOT NULL.

명령 프롬프트에서 NULL 값 사용

라는 테이블이 있다고 가정합니다. tcount_tbl TUTORIALS 데이터베이스에 있으며 두 개의 열이 있습니다. tutorial_authortutorial_count여기서 NULL tutorial_count는 값을 알 수 없음을 나타냅니다.

다음 예제를 시도하십시오-

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>

= 및 != 다음과 같이 NULL 값으로 작동하지 마십시오-

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)

tutorial_count 열이 NULL이거나 NULL이 아닌 레코드를 찾으려면 다음 프로그램과 같이 쿼리를 작성해야합니다.

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)

PHP 스크립트에서 NULL 값 처리

당신은 사용할 수 있습니다 if...else NULL 값을 기반으로 쿼리를 준비하는 조건입니다.

다음 예제는 tutorial_count 외부에서 가져온 다음 표에서 사용 가능한 값과 비교합니다.

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