菜单

金沙国际唯一官网mssql sqlserver in 关键字在值为null的应用举例

2019年11月18日 - 计算机数据

转自: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);

  空值是叁个比较新鲜的字段。在mysql教程数据库教程中,在分裂的情况下,空值往往代表差别的含义。那是mysql数据库的生龙活虎种特色。如在平时的字段中(字符型的数额),空值就是意味空值。可是如若将叁个空值的多寡插入到timestamp类型的字段中,空值就不自然为空。当时为现身什么样状态吧(如下图卡塔 尔(英语:State of Qatar)?

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会牺牲……

金沙国际唯一官网 1

 

没有错的答案是怎样?(为了加强印象,提出复制SQL到mysql里去实行,看一下卡塔尔

  笔者先创造了叁个表。在这里个表中有多个字段:user_id(其数据类型是int)、date(其数据类型是timestamp)。以后往那几个表中插入一条记下,此中往date字段中插入的是一个null空值。然则当大家询问时,其结果呈现的却是插入记录的眼明天子。那是怎么一遍事呢?其实那就是在mysql数据库中实践sql语句时平日会蒙受的一个陷阱:空值不断定为空。在操作时,明明插入的是二个空值的数据,不过最后查询获得的却不是二个空值。

通过以上测量检验,大家得以见见not in
查询关键字假若子表中设有空值,则不能够查询出其余笔录,会变成分外发生,

需选用not
exists获取相应的空值新闻

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

  在mysql数据库中,null对于部分特别类其他列来讲,其象征了意气风发种特别的含义,而不光是一个空值。对于这个特别类别的列,各位读者首假如要深深记住多少个。三个正是作者上边举的timestamp数据类型。要是往这么些数据类型的列中插入null值,则其表示的便是系统的脚下时光。别的三个是兼具auto_increment属性的列。假设往这属性的列中插入null值的话,则系统会插入二个正整数种类。而如果在此外数据类型中,如字符型数据的列中插入null的数目,则其插入的正是二个空值。

金沙国际唯一官网 2

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

那么在动用中什么制止NULL带给的一些麻烦呢?

  在mysql中,空值(null)与空字符(’’)相符呢?答案是不是认的。请大家先来看下图的身体力行。

•把NULL当成三个破例值,不等于空、0、FALSE,使用IS NULL/IS NOT
NULL去检查测量检验
•评释NOT NULL列,给于暗中同意值

金沙国际唯一官网 3

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图