Мы видели команду SQL SELECT вместе с предложением WHERE для извлечения данных из таблицы MySQLi, но когда мы пытаемся дать условие, которое сравнивает значение поля или столбца с NULL , оно не работает должным образом.
Чтобы справиться с такой ситуацией, MySQLi предоставляет три оператора
-
IS NULL — оператор возвращает true, если значение столбца равно NULL.
-
IS NOT NULL — оператор возвращает true, если значение столбца не равно NULL.
-
<=> — оператор сравнивает значения, что (в отличие от оператора =) верно даже для двух значений NULL.
IS NULL — оператор возвращает true, если значение столбца равно NULL.
IS NOT NULL — оператор возвращает true, если значение столбца не равно NULL.
<=> — оператор сравнивает значения, что (в отличие от оператора =) верно даже для двух значений NULL.
Условия, связанные с NULL, особенные. Вы не можете использовать = NULL или! = NULL для поиска значений NULL в столбцах. Такие сравнения всегда терпят неудачу, потому что невозможно определить, являются ли они правдой. Даже NULL = NULL не удается.
Чтобы найти столбцы, которые являются или не равны NULL, используйте IS NULL или IS NOT NULL.
Использование значений NULL в командной строке
Предположим, что таблица tutorials_bks в базе данных TUTORIALS содержит две колонки id и name , где NULL-имя указывает, что значение неизвестно —
пример
Попробуйте следующие примеры —
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> INSERT INTO tutorials_bks (book) values(''); Query OK, 1 row affected (0.08 sec) mysql> INSERT INTO tutorials_bks (book) values(''); Query OK, 1 row affected (0.08 sec) mysql> INSERT INTO tutorials_bks (book) values(''); Query OK, 1 row affected (0.08 sec) mysql> INSERT INTO tutorials_bks (book) values('NULL'); Query OK, 1 row affected (0.08 sec) mysql> INSERT INTO tutorials_bks (book) values('NULL'); Query OK, 1 row affected (0.08 sec) mysql> INSERT INTO tutorials_bks (book) values('NULL'); Query OK, 1 row affected (0.08 sec) +----+---------+ | id | book | +----+---------+ | 1 | java | | 2 | java | | 3 | html | | 4 | c++ | | 5 | Android | | 6 | | | 7 | | | 8 | | | 9 | NULL | | 10 | NULL | | 11 | NULL | +----+---------+ 11 rows in set (0.00 sec) mysql>
Чтобы найти записи, в которых столбец имени равен или не равен NULL, запросы должны быть записаны так:
mysql> SELECT * FROM tutorials_bks WHERE book = "null"; +----+------+ | id | book | +----+------+ | 9 | NULL | | 10 | NULL | | 11 | NULL | +----+------+ 3 rows in set (0.00 sec) mysql> SELECT * FROM tutorials_bks WHERE book ! = "null"; +----+---------+ | id | book | +----+---------+ | 1 | java | | 2 | java | | 3 | html | | 4 | c++ | | 5 | Android | | 6 | | | 7 | | | 8 | | +----+---------+ 8 rows in set (0.00 sec) mysql> SELECT * FROM tutorials_bks WHERE book = ""; +----+------+ | id | book | +----+------+ | 6 | | | 7 | | | 8 | | +----+------+ 3 rows in set (0.01 sec)
Обработка значений NULL в PHP-скрипте
Вы можете использовать условие if … else для подготовки запроса на основе значения NULL.
пример
Следующий пример берет tutorial_count извне и затем сравнивает его со значением, доступным в таблице.