转自:http://www.maomao365.com/?p=6873

在mysql中null包涵了not null与if
null或等等,上面小编来给我们介绍在mysql中null的注意事项与行使格局,希望对大家能具备帮助。

摘要:
下文通过案例剖析in 关键字在值为null的运用举例,
解析出not in关键字在null值产生的优良消息
如下所示:

SELECT NULL =0, NULL =12345, NULL <>12345, NULL +12345, NULL ||
‘abc’, NULL = NULL , NULL <> NULL , NULL AND TRUE , NULL AND FALSE
, NULL OR FALSE , NULL OR TRUE , NOT (NULL);

CREATE TABLE testA(keyId INT)
CREATE TABLE testB(keyId INT)
GO
INSERT INTO testA(keyId) VALUES (1)
INSERT INTO testA(keyId) VALUES (2)
INSERT INTO testA(keyId) VALUES (3)
GO
INSERT INTO testB(keyId) VALUES (1)
INSERT INTO testB(keyId) VALUES (2)
INSERT INTO testB(keyId) VALUES (4)
INSERT INTO testB(keyId) VALUES (NULL)
GO
 SELECT * FROM testA WHERE keyId IN (SELECT keyId FROM testB)
-----输出------
/*
keyId
1
2
*/
 SELECT * FROM testA WHERE keyId not IN (SELECT keyId FROM testB)
------无输出记录-----
/*
keyId
*/
INSERT INTO testA VALUES (NULL) ---在testA表中插入空值
SELECT * FROM testA WHERE EXISTS(
    SELECT null  FROM testB WHERE testA.keyId=testB.keyId    
)
----输出----
/*
keyId
1
2
*/
SELECT * FROM testA WHERE not  EXISTS(
    SELECT null  FROM testB WHERE testA.keyId=testB.keyId    
)
/*
keyId
3
NULL
*/
SELECT * FROM testA WHERE testA.keyId NOT in (
    SELECT testB.keyId FROM testB WHERE testB.keyId IS NOT NULL    
)

drop table testA
drop table testB

借使那是壹道面课题,估计不知情有微微程序员甚至是DBA会捐躯……

 

正确的答案是何许?(为了深化印象,提出复制SQL到mysql里去实施,看一下)

经过以上测试,我们得以看看not in
查询关键字要是子表中设有空值,则无从查询出别的记录,会促成非常发生,

需选择not
exists获取相应的空值音信

下边跟大家解析一下缘由:

永利皇宫登录网址 1

那么在运用中如何防止NULL带来的1部分烦劳呢?

•把NULL当成八个区别通常值,不对等空、0、FALSE,使用IS NULL/IS NOT
NULL去检验
•注脚NOT NULL列,给于私下认可值

Null时要注意两大陷阱

陷阱一:空值不肯定为空

  空值是2个相比万分的字段。在MySQL数据库中,在不相同的场馆下,空值往往意味着不相同的意义。那是MySQL数据库的壹种天性。如在平凡的字段中(字符型的多少),空值就是象征空值。不过假设将二个空值的数据插入到TimesTamp类型的字段中,空值就不肯定为空。此时为出现什么样情状吗(如下图)?

永利皇宫登录网址 2

网站地图xml地图