We have seen SQL SELECT command along with WHERE clause to fetch data from MySQL table, but when we try to give a condition, which compare field or column value to NULL, it does not work properly.
To handle such situation MySQL provides three operators
To look for columns that are or are not NULL, use IS NULL or IS NOT NULL.
To handle such situation MySQL provides three operators
- IS NULL: operator returns true if column value is NULL.
- IS NOT NULL: operator returns true if column value is not NULL.
- <=>: operator compares values, which (unlike the = operator) is true even for two NULL values.
To look for columns that are or are not NULL, use IS NULL or IS NOT NULL.
Using NULL values at Command Prompt:
Suppose a table javatcount_tbl in JAVATUTORIALS database and it contains two columns javatutorial_author and javatutorial_count, where a NULL tutorial_count indicates that the value is unknown:Example:
Try out the following examples:root@host# mysql -u root -p password; Enter password:******* mysql> use JAVATUTORIALS; Database changed mysql> create table javatcount_tbl -> ( -> javatutorial_author varchar(40) NOT NULL, -> javatutorial_count INT -> ); Query OK, 0 rows affected (0.05 sec) mysql> INSERT INTO javatcount_tbl -> (javatutorial_author, javatutorial_count) values ('gemini', 20); mysql> INSERT INTO javatcount_tbl -> (javatutorial_author, javatutorial_count) values ('ghandi', NULL); mysql> INSERT INTO javatcount_tbl -> (javatutorial_author, javatutorial_count) values ('karhik', NULL); mysql> INSERT INTO javatcount_tbl -> (javatutorial_author, javatutorial_count) values ('Gill', 20); mysql> SELECT * from javatcount_tbl; +---------------------+--------------------+ | javatutorial_author | javatutorial_count | +---------------------+--------------------+ | gemini | 20 | | ghandi | NULL | | karthik | NULL | | Gill | 20 | +---------------------+--------------------+ 4 rows in set (0.00 sec) mysql>You can see that = and != do not work with NULL values as follows:
mysql> SELECT * FROM javatcount_tbl WHERE javatutorial_count = NULL; Empty set (0.00 sec) mysql> SELECT * FROM javatcount_tbl WHERE javatutorial_count != NULL; Empty set (0.01 sec)To find records where the tutorial_count column is or is not NULL, the queries should be written like this:
mysql> SELECT * FROM javatcount_tbl -> WHERE javatutorial_count IS NULL; +---------------------+--------------------+ | javatutorial_author | javatutorial_count | +---------------------+--------------------+ | ghandi | NULL | | Karthik | NULL | +---------------------+--------------------+ 2 rows in set (0.00 sec) mysql> SELECT * from tcount_tbl -> WHERE tutorial_count IS NOT NULL; +---------------------+--------------------+ | javatutorial_author | javatutorial_count | +---------------------+--------------------+ | gemini | 20 | | Gill | 20 | +---------------------+--------------------+ 2 rows in set (0.00 sec)
Handling NULL Values in PHP Script:
You can use if...else condition to prepare a query based on NULL value.Example:
Following example takes tutorial_count from outside and then compares it with the value available in the table.<?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 javatutorial_author, javatutorial_count
FROM javatcount_tbl
WHERE javatutorial_count = $tutorial_count';
}
else
{
$sql = 'SELECT javatutorial_author, javatutorial_count
FROM javatcount_tbl
WHERE javatutorial_count IS $tutorial_count';
}
mysql_select_db('JAVATUTORIALS');
$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['javatutorial_author']} <br> ".
"Count: {$row['javatutorial_count']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
0 comments:
Post a Comment