現(xiàn)象
首先,我們往測(cè)試表a中,插入幾條測(cè)試數(shù)據(jù):
INSERT INTO a VALUES ('1'),(NULL),('');
SELECT * FROM a;
得到如下結(jié)果:
其次,我們查詢(xún)表a中id列不為1的數(shù)據(jù):
SELECT * FROM a WHERE id <> '1';
結(jié)果卻只有1條符合條件
的數(shù)據(jù):
我們預(yù)期的結(jié)果是有兩條,分別是NULL
和空字符''
。
可測(cè)試結(jié)果卻少了NULL這條。這表明SQL對(duì)NULL的處理存在特殊的邏輯。
驗(yàn)證
我們重新寫(xiě)SQL:
SELECT * FROM a WHERE id <> '1' OR id IS NULL;
這回,結(jié)果符合我們的預(yù)期:
結(jié)論
對(duì)NULL進(jìn)行判斷處理時(shí),只能采用IS NULL或IS NOT NULL,而不能采用=, <, <>, !=這些操作符!