MySQL: selecting rows where a column is null
SQL NULL's special, and you have to do WHERE field IS NULL
, as NULL cannot be equal to anything,
including itself (ie: NULL = NULL is always false).
See Rule 3
https://en.wikipedia.org/wiki/Codd%27s_12_rules
As all are given answers I want to add little more. I had also faced the same issue.
Why did your query fail? You have,
SELECT pid FROM planets WHERE userid = NULL;
This will not give you the expected result, because from mysql doc
In SQL, the NULL value is never true in comparison to any other value, even NULL. An expression that contains NULL always produces a NULL value unless otherwise indicated in the documentation for the operators and functions involved in the expression.
Emphasis mine.
To search for column values that are
NULL
, you cannot use anexpr = NULL
test. The following statement returns no rows, becauseexpr = NULL
is never true for any expression
Solution
SELECT pid FROM planets WHERE userid IS NULL;
To test for NULL
, use the IS NULL
and IS NOT NULL
operators.
- operator IS NULL tests whether a value is
NULL
. - operator IS NOT NULL tests whether a value is not
NULL
. - MySQL comparison operators
There's also a <=>
operator:
SELECT pid FROM planets WHERE userid <=> NULL
Would work. The nice thing is that <=>
can also be used with non-NULL values:
SELECT NULL <=> NULL
yields 1
.
SELECT 42 <=> 42
yields 1
as well.
See here: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to
SELECT pid FROM planets WHERE userid IS NULL