为什么不在SQL匹配中使用'LIKE'?

时间:2013-05-29 12:58:43

标签: mysql sql oracle oracle11g

我有一个表ABCEMPLIDGRADESALARYDATE作为其字段。

我正在执行以下3条陈述:

select count(*) from ABC;

结果: - 458

select count(*) from ABC where GRADE LIKE '%def%';

结果: - 0

select count(*) from ABC where GRADE NOT LIKE '%def%';

结果: - 428

我的观点是:第二个查询的结果加上第三个查询的结果应该等于第一个查询的结果,不应该吗?

3 个答案:

答案 0 :(得分:7)

看起来你有30条记录,其中GRADE是null

null值未知,因此请勿与这两种情况匹配。

答案 1 :(得分:3)

Sql使用三值逻辑:true,false和amp。unknown。如果将NULL与任何其他值进行比较,则结果未知。 NOT(未知)仍然未知。

WHERE子句仅返回计算结果为true的行。因此,示例中缺少的30行在“成绩”列中具有NULL。

答案 2 :(得分:2)

请注意,除了您的表中可以包含NULL值的明显情况(正如其他人提到的那样),您也可以使用空字符串。

Oracle中:

-- Returns nothing
select 1 from dual where '' like '%'

MySQL中:

-- Returns 1
select 1 from dual where '' like '%'

由于您使用标记了问题,因此您可能会遇到不兼容问题,因为在oracle '' IS NULL中保持为真!