MySQL NULL Değerlerini İşleme
SQL'i gördük SELECT ile birlikte komut WHERE MySQL tablosundan veri almak için yan tümce, ancak alanı veya sütun değerini karşılaştıran bir koşul vermeye çalıştığımızda NULLdüzgün çalışmıyor.
Böyle bir durumu ele almak için MySQL üç operatör sağlar -
IS NULL - Sütun değeri NULL ise bu operatör true döndürür.
IS NOT NULL - Sütun değeri NULL değilse bu operatör true döndürür.
<=> - Bu operatör (= operatörünün aksine) iki NULL değer için bile doğru olan değerleri karşılaştırır.
NULL içeren koşullar özeldir. = KullanamazsınızNULL veya! = NULLsütunlarda NULL değerleri aramak için. Bu tür karşılaştırmalar her zaman başarısız olur çünkü bunların doğru olup olmadığını söylemek imkansızdır. Bazen NULL = NULL bile başarısız olur.
BOŞ olan veya olmayan sütunları aramak için şunu kullanın: IS NULL veya IS NOT NULL.
Komut İstemi'nde NULL değerleri kullanma
Adında bir tablo olduğunu varsayın tcount_tbl TUTORIALS veritabanında bulunur ve iki sütun içerir: tutorial_author ve tutorial_count, NULL tutorial_count değerin bilinmediğini gösterir.
Misal
Aşağıdaki örnekleri deneyin -
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>
Bunu görebilirsin = ve != aşağıdaki gibi NULL değerlerle çalışmayın -
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 sütununun NULL olduğu veya olmadığı kayıtları bulmak için, sorgular aşağıdaki programda gösterildiği gibi yazılmalıdır.
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)
Bir PHP Komut Dosyasında NULL Değerleri İşleme
Kullanabilirsiniz if...else NULL değerine göre bir sorgu hazırlamak için koşul.
Misal
Aşağıdaki örnek, tutorial_count dışarıdan ve sonra tablodaki mevcut değerle karşılaştırır.
<?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);
?>