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_author 과 tutorial_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);
?>