Buy this Reference Manual in softcover from Barnes & Noble!
К NULL-значениям нужно привыкнуть. По идее, NULL обозначает отсутствующее или неизвестное значение и обрабатывается отличным от других значений образом. Проверить значение на равенство NULL с помощью обычных арифметических операторов сравнения (=, < или <>) нельзя. Это отлично иллюстрирует следующий запрос:
mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL; +----------+-----------+----------+----------+ | 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL | +----------+-----------+----------+----------+ | NULL | NULL | NULL | NULL | +----------+-----------+----------+----------+
Очевидно, что от таких сравнений значащих результатов ожидать нечего. Вместо этого нужно пользоваться операторами IS NULL и IS NOT NULL:
mysql> SELECT 1 IS NULL, 1 IS NOT NULL; +-----------+---------------+ | 1 IS NULL | 1 IS NOT NULL | +-----------+---------------+ | 0 | 1 | +-----------+---------------+
Отметим, что два значения NULL считаются равными при выполнении команды GROUP BY.
В MySQL 0 или NULL приравнивается к логическому false, а все остальное - к true. По умолчанию значение "истина" для булевого оператора равно 1.
При выполнении команды ORDER BY значения NULL всегда располагаются в самом начале списка результатов, даже при использовании параметра DESC.
Именно из-за того, что при работе с NULL действуют особые правила, в предыдущем разделе для поиска умерших животных использовалось выражение death IS NOT NULL, а не death <> NULL.
| Posted by on Thursday December 19 2002, @5:16pm | [Delete] [Edit] |
Inconsistency...
Section at
http://www.mysql.com/doc/en/Working_with_NULL.html states:
When doing an ORDER BY, NULL values are always
sorted first, even if you are using DESC.
Section
http://www.mysql.com/doc/en/Problems_with_NULL.html states:
When using ORDER BY, NULL values are presented
first. If you sort in descending order using
DESC, NULL values are presented last.
| Posted by [name withheld] on Saturday June 1 2002, @6:47pm | [Delete] [Edit] |
Doing my own tests, NULL is actually put at the
end if DESC is set. So, the manual is correct,
the tutorial is incorrect.
| Posted by Jon Gabrielson on Wednesday December 18 2002, @5:27pm | [Delete] [Edit] |
The function 'COALESCE' can simplify working with null
values.
for example, to treat null as zero, you can use:
select COALESCE(colname,0) from table where
COALESCE(colname,0) > 1;
in a date field, i used:
ORDER BY
(coalesce(TO_DAYS(date),TO_DAYS(CURDATE()))-TO_DAYS(CURDATE()))
to treat NULL as the current date.
| Posted by Bob Kolk on Friday January 10 2003, @1:05pm | [Delete] [Edit] |
Use IFNULL() in your SELECT statement is make the NULL any value you wish.
IFNULL(expr1,expr2)
If expr1 is not NULL, IFNULL() returns expr1, else it returns expr2. IFNULL() returns a numeric or string value, depending on the context in which it is used:
mysql> SELECT IFNULL(1,0);
-> 1
mysql> SELECT IFNULL(NULL,10);
-> 10
mysql> SELECT IFNULL(1/0,10);
-> 10
mysql> SELECT IFNULL(1/0,'yes');
-> 'yes'
Add your own comment.