sql 模糊查询问题

select * from test t where t.name not like '%test%';这个语句为什么连t.name is null 的也查不出来呢?
不是应该可以查询出来name为空的吗?只是模糊带test的才过滤掉?

第1个回答  2014-01-06
SQL的表达式,除了IS NULL和NOT NULL以外,只要出现NULL值结果都为FALSE简单的例子:SELECT * FROM test WHERE name<>'test'只要name值是NULL,无论用name='test'还是name<>'test',都不能获得这行,需要获取所有不是'test'的行应该使用下面的语句:SELECT * FROM test WHERE name <>'test' OR name IS NULL
第2个回答  2014-01-06
select * from test t where t.name not like '%test%' or t.name is null ;
第3个回答  2014-01-06
null值的数据只能用is (not) null判断
你用了什么连接符?and吗?你的语境应该用or才对追问

为什么模糊查询的时候,会把为空的过滤掉
select * from test t where t.name not like '%test%';会把name为空的过滤了

追答

第一句就解释了啊,null值只能用is null或is not null去判断
其他任何运算符如=与或者like,都无法去判断
就如你的表,假设只有test与null两个值,那么你的语句将不返回任何数据
因为not like排除了test,而like是不能判断null的,所以也不能显示
null值比较特殊,不是你认为的非false就是true,
你认为=null不显示的话,那么null一定会显示数据,这就错了
null除非用is去判断,否则=与或者like与not like都不会返回数据

本回答被提问者采纳
相似回答
大家正在搜