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.