Сравнение MySQL со значением null

у меня есть столбец, называемый кодом в таблице MySQL, который может быть NULL. Скажем, у меня есть несколько строк с кодом='C', которые я хочу игнорировать в моем наборе результатов select. У меня может быть либо CODE=NULL, либо CODE!='C' в моем результирующем наборе.

следующий запрос не возвращает строку с кодом как NULL:

SELECT * from TABLE where CODE!='C'

но этот запрос работает, как ожидалось, и я знаю, что это правильный способ сделать это.

SELECT * from TABLE where CODE IS NULL OR CODE!='C'

мой вопрос в том, почему имеет только код!='C' не возвращает строки, где КОД=NULL? Определенно "C"не является нулевым. Мы не сравниваем ценность с характером. Может кто-нибудь пролить свет на то, почему это не работает?

5 ответов


В MySQL, NULL рассматривается как "отсутствующее, неизвестное значение", в отличие от no value. Взгляните при этой ссылке MySQL на NULL.

любое арифметическое сравнение с NULL не возвращает true или false, но возвращает NULL вместо. Итак,NULL != 'C' возвращает NULL, в отличие от возврата true.

любое арифметическое сравнение с "NULL" вернет false. Чтобы проверить это в SQL:

SELECT IF(NULL=123,'true','false') 

проверить NULL ценности, которые мы нужно использовать IS NULL & IS NOT NULL оператора.


на основе моих тестов и документации здесь: http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html

вы можете сравнить null и получить логический результат, используя

например:

select x <=> y; 
or
select @x <=> @y;

Это также сравнивает string vs null, string vs string и т. д.


в SQL значение NULL является специальным значением, не сопоставимым с любым другим. Результат прямого сравнения со значением всегда либо FALSE, либо NULL, в зависимости от реализации.

чтобы проверить значение null, вы должны использовать IS NULL и IS NOT NULL.


SELECT * 
FROM `table_name` 
WHERE IFNULL(`column_name` != 'C', TRUE)

выберите * от пользователя, где application_id= '1223333344' и имя равно null;