В SQLite NULL предполагается отличным от другого NULL, если только вы не используете IS NULL
или IS NOT NULL
, и в этом случае NULL принимается за то же значение.
IS и IS NOT являются компараторами (сродни = и! =) И перед ними должно следовать значение, после которого вы не можете использовать ? IS
или аналогично ? IS NOT
. Вы можете использовать 1 IS 1
и 1 IS NOT 1
.
Разница между IS и = и НЕ и ! = в том, что IS и IS NOT всегда будет возвращать false (0) или true (1), тогда как = и ! = могут возвращать NULL (сравнение с NULL как один или оба, из значений NULL приведет к NULL).
Обратите внимание на следующее: -
DROP TABLE IF EXISTS mytable;
CREATE TABLE IF NOT EXISTS mytable (mycolumn, myothercolumn);
INSERT INTO mytable VALUES(null,1),(1,null),(1,1),(null,null);
SELECT
NULL = mycolumn AS r1,
NULL != mycolumn AS r2,
mycolumn IS NOT NULL AS r3,
mycolumn IS NULL AS r4,
mycolumn = NULL AS r5,
mycolumn != NULL AS r6,
mycolumn = myothercolumn AS r7,
myothercolumn = mycolumn AS r8,
(mycolumn = myothercolumn) IS NULL AS r9,
(myothercolumn = mycolumn) IS NOT NULL AS r10,
mycolumn IS 1 AS r11,
mycolumn IS NOT 1 AS r12
FROM mytable;
В результате
- mytable создается как: -
- Результат запроса: -