转自: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带来的有的劳神呢?

•把NULL当成2个特有值,不等于空、0、FALSE,使用IS NULL/IS NOT
NULL去检查测试
•注明NOT NULL列,给于私下认可值

Null时要专注两大陷阱

骗局1:空值不自然为空

  空值是三个比较特殊的字段。在MySQL数据库中,在不一致的事态下,空值往往代表分裂的含义。那是MySQL数据库的1种特色。如在通常的字段中(字符型的数据),空值正是意味空值。但是假若将多个空值的数量插入到TimesTamp类型的字段中,空值就不必然为空。此时为出现哪些状态吧(如下图)?

永利皇宫登录网址 2

网站地图xml地图