记一次有趣的发现:
有一个表,总记录数是1000条,现在有一条查询语句:
#查询语句1
#找出表中id中含有‘A’或‘B’或‘C’的字段
select * from table1 where id like '%A%' or id like '%B%' or id like '%C%' ;
#成功查出300条
嗯查询正常,有300条记录呢。
然后我随便再敲一次查询语句…:
#查询语句2
#找出表中id中不含有‘A’且不含有‘B’且不含有‘C’的字段
select * from table1 where id not like '%A%' and id not like '%B%' and id not like '%C%' ;
#成功查出400条
嗯查出了400条呢…什么?!只有400条??不是应该700条吗!!!
我如雷轰顶——哪里不对了??
按道理,“找出表中id中含有‘A’或‘B’或‘C’的字段” 应该等价于 “找出表中id中不含有‘A’且不含有‘B’且不含有‘C’的字段” 的啊!这是由集合运算决定的啊!
“找出表中id中含有‘A’或‘B’或‘C’的字段”>>看作>> A∪B∪C
“找出表中id中不含有‘A’且不含有‘B’且不含有‘C’的字段”>>看作>> ∁UA∩∁UB∩∁UC
然而我们根据运算规则可知: