oracle培训--基础与性能篇.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 八、 Null、Null与索引 8.2 对null的逻辑运算 由于引入了NULL,在处理逻辑过程中一定要考虑NULL的情况。同样的,数据库中的布尔值的处理,也是需要考虑NULL的情况,这使得布尔值从原来的TRUE、FALSE两个值变成了TRUE、FALSE和NULL三个值。 由于NULL是未知,所以NULL AND NULL、NULL OR NULL、NULL AND TRUE和NULL OR FALSE的值都是未知的,这些的结果仍然是NULL。 那么为什么NULL AND FALSE和NULL OR TRUE得到了一个确定的结果呢?仍然从NULL的概念来考虑。NULL是未知的,但是目前NULL的类型是布尔类型,因此NULL只有可能是TRUE或者FALSE中的一个。 而根据前面的表格,TRUE AND FALSE和FALSE AND FALSE的结果都是FALSE,也就是说不管NULL的值是TRUE还是FALSE,它与FALSE进行AND的结果一定是FALSE。 同样的道理,TRUE AND TRUE和FALSE AND TRUE的结果都是TRUE,所以不管NULL取何值,NULL和TRUE的OR的结果都是TRUE。 对上部分内容的小结如下: * 八、 Null、Null与索引 8.2 对null的逻辑运算 AND操作图表: OR操作图表变为: 7.3 对null的in运算、not in运算与not运算 AND TRUE FALSE NULL TRUE TRUE FALSE NULL FALSE FALSE FALSE FALSE NULL NULL FALSE NULL OR TRUE FALSE NULL TRUE TRUE TRUE TRUE FALSE TRUE FALSE NULL NULL TRUE NULL NULL * 八、 Null、Null与索引 对null的in与not in运算,举例子来说明: where column IN (‘值1‘, ‘值2’, NULL); 相当于 column = ‘值1’ OR column= ‘值2’ OR column= NULL; 结合下面例子讲述in集合里有null值对返回结果的影响: select * from liwei_test where id in (select id from liwei_sec); 这个where条件的可能值是true或者null,为什么? where column not IN (‘值1‘, ‘值2’, NULL); 相当于 column ‘值1’ and column‘值2’ and columnNULL; 这个where条件的可能值是false或者null,为什么? 对null的not运算: NOT NULL的结果仍然是NULL ,为什么? 这里需要注意:这个NOT NULL是一个布尔操作,要和建表中的NOT NULL约束进行区分。建表中的NOT NULL约束是一个定性的描述,只是表示列中的数据不允许为NULL。而这里的布尔操作,却是在进行求值,要得到对NULL取非的结果,所以仍然得到NULL。 * 八、 Null、Null与索引 8.4 null的||运算 字符串||null=字符串; null||null=null; 8.5 null与索引的关系 B树索引不存储索引列全为空的记录。如果把这句话用在单列索引上,就是B树索引不存储NULL。从B树索引列的个数来划分, B树索引非为单列索引和复合索引,对于单列索引来说很简单,如果一条记录中这个索引字段为空,那么索引不会保存这条记录的信息。但是对于复合索引,由于存在着多个列,如果某一个索引列不为空,那么索引就会包括这条记录,即使其他所有的所有列都是NULL值。 BITMAP索引,是存储NULL值的 。 下面讨论以下情况会不会使用索引: (1) 判断一个列IS NOT NULL (注:这个列上建有一个索引) 因为B树索引本身不存储键值全为NULL的记录,所以通过索引扫描得到的 * 八、 Null、Null与索引 结果一定满足IS NOT NULL的要求。由于索引的存储特性和IS NOT NULL访问本身没有冲突,因此,这种情况下会选择通过索引来得到相应的结果。 (2) 判断一个列IS NULL不会使用索引 (注:这个列上建有一个索引) 这里不讨论BITMAP索引。由于BITMAP索引保存NULL值,所以讨论BITMAP索引没有意义。这里仅讨论B树索引。 在上一篇文章里面其实已经讨论过了,B树索引不存储键值全为空的记录。所以对于单列索引而言,

文档评论(0)

好文精选 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档