>

关键字在值为null的应用举例,Mysql中NULL使用方法

- 编辑:金沙国际平台登录 -

关键字在值为null的应用举例,Mysql中NULL使用方法

转自: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当成三个例外值,不等于空、0、FALSE,使用IS NULL/IS NOT NULL去检查测量试验
•评释NOT NULL列,给于私下认可值

Null时要注意两大陷阱

骗局一:空值不自然为空

  空值是多少个相比非常的字段。在MySQL数据库中,在分裂的情景下,空值往往意味着差别的含义。那是MySQL数据库的一种性格。如在平常的字段中(字符型的多少),空值就是意味着空值。不过只要将贰个空值的多寡插入到TimesTamp类型的字段中,空值就不必然为空。此时为出现哪些情况吧(如下图)?

图片 2

  笔者先成立了叁个表。在那几个表中有七个字段:User_id(其数据类型是int)、Date(其数据类型是TimesTamp)。今后往那么些表中插入一条记下,其中往Date字段中插入的是二个NULL空值。不过当大家询问时,其结果显示的却是插入记录的当后天子。那是怎么叁回事呢?其实那就是在MySQL数据库中实践SQL语句时平常会逾越的二个骗局:空值不断定为空。在操作时,明明插入的是贰个空值的数量,可是最终查询得到的却不是三个空值。

  在MySQL数据库中,NULL对于有些奇特类别的列来讲,其代表了一种特别的含义,而不只是三个空值。对于那几个非常类其他列,各位读者主假诺要铭记在心五个。三个正是小编上边举的TimesTamp数据类型。假使往这些数据类型的列中插入Null值,则其表示的正是系统的脚下时光。另外叁个是兼具auto_increment属性的列。如若往那属性的列中插入Null值的话,则系统会插入二个正整数体系。而只要在其余数据类型中,如字符型数据的列中插入Null的数额,则其插入的正是一个空值。

  陷阱二:空值不自然等于空字符

  在MySQL中,空值(Null)与空字符(’’)同样呢?答案是还是不是定的。请我们先来看下图的示范。

图片 3

  在同贰个数据库表中,同一时候插入二个Null值的多寡和多个’’空字符的多寡,然后接纳Select语句进行查询。最后展现的结果如上海体育场面所示。明显其出示的结果是区别样的。从那个结果中就足以看出,空值不等于空字符。那正是在MySQL中实施SQL语句蒙受的第3个骗局。在事实上海工业作中,空值数据与空字符往往代表分裂的意思。数据库管理员能够依赖实际的内需来进展精选。

  如对于电话号码等字段,能够暗许设置为空值(表示一向不知道对方的电话号码)可能安装为空字符(表示后来撤除了这么些编号)等等。由于他们在数据库中会有例外的表现格局,所以数据库助理馆员需求区分对待。小编特别爱怜使用空值,而不是空字符。那主假设因为针对空值那些数据类型有多少个比较特别的运算字符。借使某些字段是空字符,数据库中是采取字段名称来顶替。相反,假如插入的是空值,则直接显示的是NULL。那跟其余数据库的呈现格局也是见仁见智的。

  一是IS NULL 和IS NOT NULL关键字。如若要咬定有个别字段是不是含用空值的数量,要求使用特别的基本点字。当中后边叁个表示这一个字段为空,前面一个表示这些字段为非空。在Select语句的询问条件中那五个十分重要字特别的实用。如须求查询全体电话号码为空的客商(需求他们填补电话号码音信),就足以在询问条件中加入is not null关键字。

图片 4

  二是Count等总计函数,在空值上也可以有特别的运用。如未来急需计算客商音信表中有电话号码的顾客数量,此时就足以接纳count函数、同一时候将电话号码作为参数来使用。因为在计算进度中,这一个函数会自动忽略空值的数目。此时总计出来的正是有电话号码的客商消息。假使接纳的是空字符的数额,则这些函数会将其总括进来。如下图所示,总括刚才营造的两条记下时,系统总括的结果是1,并非2。可见系统活动将Null值的数据忽略掉了。

null与if null或等等,上边笔者来给大家介绍在mysql中null的注意事项与运用办法,希望对大家能抱有利于。 SELECT NULL =0, NU...

本文由 数据库发布,转载请注明来源:关键字在值为null的应用举例,Mysql中NULL使用方法