Мы видели команду SQL SELECT вместе с предложением WHERE для извлечения данных из таблицы MySQL, но когда мы пытаемся дать условие, которое сравнивает значение поля или столбца с NULL , оно не работает должным образом.
Чтобы справиться с такой ситуацией, MySQL предоставляет три оператора —
-
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 есть таблица с именем tcount_tbl, и она содержит два столбца, а именно 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, запросы должны быть записаны, как показано в следующей программе.
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)
Обработка значений NULL в PHP-скрипте
Вы можете использовать условие if … else для подготовки запроса на основе значения NULL.
пример
В следующем примере берется tutorial_count извне, а затем сравнивается со значением, доступным в таблице.