动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.Decode 函数的用法.
.在Oracle数据库中连接异种数据源.
.Oracle8i 中生成创建对象的 SQL.
.Oracle10g for AIX5L安装过程.
.Oracle数据库手工扩大表空间三步.
.角斗士般的Oracle性能.
.使用Oracle的扩展SQL跟踪数据的方.
.Oracle给予企业SOA更大发言权.
.用Oracle数据库的WEB服务制作网页.
.Oracle中构建基于VPD特性的安全数.
.Oracle琐.
.ORACLE常用傻瓜问题1000问(之一).
.数据库设计、使用技巧摘录.
.在hp-ux10.20系统下配置oracle8..
.Oracle SQL*NET TCP/IP 的通信模.
.Oracle 10g Installer 创建临时文.
.Oracle数据库中大型表查询优化的.
.oracle8i学习笔记(2).
.Oracle10g Release 2手工建立数据.
.将Oracle内置的安全特性用于PHP.

漫谈oracle中的空值

发表日期:2008-2-9 |



  在数据库中,空值用来表示实际值未知或无意义的情况。在一个表中,假如一行中的某列没有值,那么就称它为空值(NULL)。任何数据类型的列,只要没有使用非空(NOT NULL)或主键(PRIMARY KEY)完整性限制,都可以出现空值。 在实际应用中,假如忽略空值的存在,将会造成造成不必要的麻烦。
  
  例如,在下面的雇员表(EMP)中,雇员名(ENAME)为KING的行,因为KING为最高官员(PRESIDENT),他没有主管(MGR),所以其MGR为空值。因为不是所有的雇员都有手续费(COMM),所以列COMM答应有空值,除300、500、1400、0以外的其它各行COMM均为空值。
  EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  --------- ---------- --------- --------- --------- --------- --------- ---------
  7369 SMITH CLERK 7902 17-DEC-80 800 20
  7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
  7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
  7566 JONES MANAGER 7839 02-APR-81 2975 20
  7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
  7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
  7782 CLARK MANAGER 7839 09-JUN-81 2450 10
  7788 SCOTT ANALYST 7566 09-DEC-82 3000 20
  7839 KING PRESIDENT 17-NOV-81 5000 10
  7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
  7876 ADAMS CLERK 7788 12-JAN-83 1100 20
  7900 JAMES CLERK 7698 03-DEC-81 950 30
  7902 FORD ANALYST 7566 03-DEC-81 3000 20
  7934 MILLER CLERK 7782 23-JAN-82 1300 10
  
  本文将以上述EMP表为例,具体讨论一下空值在日常应用中所具有的一些特性。
  
  一、空值的生成及特点
  
  1. 空值的生成
  
  假如一列没有非空(NOT NULL)完整性限制,那么其缺省的值为空值,即假如插入一行时未指定该列的值,则其值为空值。
  
  使用SQL语句INSERT插入行,凡未涉及到的列,其值为空值;涉及到的列,假如其值确实为空值,插入时可以用NULL来表示(对于字符型的列,也可以用''来表示)。
  
  例:插入一行,其EMPNO为1、ENAME为'JIA'、SAL为10000、job和comm为空值。
  SQL>insert into emp(empno,ename,job,sal,comm) values(1,'JIA',NULL,1000,NULL);
  SQL>select * from emp where empno=1;
  EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  --------- ---------- --------- --------- --------- --------- --------- ---------
  1 JIA 1000
  
  可以看到新插入的一行,除job和comm为空值外,mgr、hiredate、deptno三列由于插入时未涉及,也为空值。
  
  使用SQL语句UPDATE来修改数据,空值可用NULL来表示(对于字符型的列,也可以用''来表示)。例:
  SQL>update emp set ename=NULL,sal=NULL where empno=1;
  
  2. 空值的特点
  
  空值具有以下特点:
  
  * 等价于没有任何值。
  * 与 0、空字符串或空格不同。
  * 在where条件中, Oracle认为结果为NULL的条件为FALSE,带有这样条件的select语句不返回行,并且不返回错误信息。但NULL和FALSE是不同的。
  * 排序时比其他数据都大。
  * 空值不能被索引。
  
  二、空值的测试
  
  因为空值表示缺少数据,所以空值和其它值没有可比性,即不能用等于、不等于、大于或小于和其它数值比较,当然也包括空值本身(但是在decode中例外,两个空值被认为是等价)。测试空值只能用比较操作符IS NULL 和IS NOT NULL。假如使用带有其它比较操作符的条件表达式,并且其结果依靠于空值,那么其结果必定是NULL。在where条件中,Oracle认为结果为NULL的条件为FALSE,带有这样条件的select语句不返回行,也不返回错误信息。
  
  例如查询EMP表中MGR为NULL的行:
  SQL>select * from emp where mgr='';
  no rows selected
  SQL>select * from emp where mgr=null;
  no rows selected
  SQL>select * from emp where mgr is null;
  EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  --------- ---------- --------- --------- --------- --------- --------- ---------
  7839 KING PRESIDENT 17-NOV-81 5000 10
  第1、2句写法不妥,WHERE条件结果为NULL,不返回行。
第三句正确,返回MGR为空值的行。
  三、 空值和操作符
  
  1.空值和逻辑操作符
  
  逻辑操作符
  表达式
  结果
  AND
  NULL AND TRUE
  NULL
  
  NULL AND FALSE
  FALSE
  
  NULL AND NULL
  NULL
  OR
  NULL OR TRUE
  TRUE
  
  NULL OR FALSE
  NULL
  
  NULL OR NULL
  NULL
  NOT
  NOT NULL
  NULL
  
  可以看到,在真值表中,除NULL AND FALSE 结果为FALSE、NULL OR TRUE结果为TRUE以外,其它结果均为NULL。
  
  虽然在where条件中,Oracle认为结果为NULL的WHERE条件为FALSE,但在条件表达式中NULL不同于FALSE。例如在NOT ( NULL AND FALSE )和NOT ( NULL AND NULL )二者中仅有一处FALSE和TRUE的区别,但NOT ( NULL AND FALSE )的结果为 TRUE,而NOT ( NULL AND NULL )的结果为NULL。
  
  下面举例说明空值和逻辑操作符的用法:
  
  SQL> select * from emp where not comm=null and comm!=0;
  no rows selected
  SQL> select * from emp where not ( not comm=null and comm!=0 );
  EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  --------- ---------- --------- --------- --------- --------- --------- ---------
  7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
  
  第一个Select语句,条件“not comm=null and comm!=0”等价于NULL AND COMM!=0。对于任意一行,假如COMM为不等于0的数值,条件等价于NULL AND TRUE,结果为NULL;假如COMM等于0,条件等价于NULL AND FALSE,结果为FALSE。所以,最终结果不返回行。
  
  第二个Select语句的条件为第一个Select语句条件的“非”(NOT),对于任意一行,假如COMM为不等于0的数值,条件等价于NOT NULL,结果为NULL;假如COMM等于0,条件等价于NOT FALSE,结果为TRUE。所以,最终结果返回行COMM等于0的行。
  
  2.空值和比较操作符
  
  (1)IS [NOT] NULL:是用来测试空值的唯一操作符(见“空值的测试”)。
  (2)=、!=、>=、<=、>、<
  SQL>select ename,sal,comm from emp where sal>comm;
  ENAME SAL COMM
  ---------- --------- ---------
  ALLEN 1600 300
  WARD 1250 500
  TURNER 1500 0
  sal或comm为空值的行,sal>comm比较结果为NULL,所以凡是sal或comm为空值的行都没有返回。
  (3)IN和NOT IN操作符
  SQL>select ename,mgr from emp where mgr in (7902,NULL);
  ENAME MGR
  ---------- ---------
  SMITH 7902
  
  在上述语句中,条件“mgr in (7902,NULL)”等价于mgr=7902 or mgr=NULL。对于表EMP中的任意一行,假如mgr为NULL,则上述条件等价于NULL OR NULL,即为NULL;假如mgr为不等于7902的数值,则上述条件等价于FALSE OR NULL,即为NULL;假如mgr等于7902,则上述条件等价于TRUE OR NULL,即为TRUE。所以,最终结果能返回mgr等于7902的行。
  
  SQL>select deptno from emp where deptno not in ('10',NULL);
  no rows selected
  在上述语句中,条件“deptno not in ('10',NULL)”等价于deptno!='10' and deptno!=NULL,对于EMP表中的任意一行,条件的结果只能为NULL或FALSE,所以不返回行。
  
  (4)any,some
  SQL>select ename,sal from emp where sal> any(3000,null);
  ENAME SAL
  ---------- ---------
  KING 5000
  条件“sal> any(3000,null)”等价于sal>3000 or sal>null。类似前述(3)第一句,最终结果返回所有sal>3000的行。
  
  (5)All
  SQL>select ename,sal from emp where sal> all(3000,null);
  no rows selected
  条件“sal> all(3000,null)”等价于sal>3000 and sal>null, 结果只能为NULL或FALSE,所以不返回行。
  
  (6)(not)between
  SQL>select ename,sal from emp where sal between null and 3000;
  no rows selected
  条件“sal between null and 3000”等价于sal>=null and sal<=3000, 结果只能为NULL或FALSE,所以不返回行。
  SQL>select ename,sal from emp where sal not between null and 3000;
  ENAME SAL
  ---------- ---------
  KING 5000
  条件“sal not between null and 3000”等价于sal3000,类似前述(3)的第一句,结果返回sal>3000的行。

  下表为比较操作符和空值的小结:
  比较操作符
  表达式(例:A、B是NULL、C=10)
  结果
  IS NULL、IS NOT NULL
  A IS NULL
  TRUE
  
  A IS NOT NULL
  FALSE
  
  C IS NULL
  FALSE
  
  C IS NOT NULL
  TRUE
  =、!=、>=、<=、>、<
  A = NULL
  NULL
  
  A > NULL
  NULL
  
  C = NULL
  NULL
  
  C > NULL
  NULL
  IN (=ANY)
上一篇:在oracle中限制返回结果集的大小 人气:464
下一篇:在ORACLE中利用视图组织矩阵报表 人气:529
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-10 企业网站智能管理系统(TZIMS) v6
2008-10-10 拓文asp.net网站内容管理系统 v6
2008-10-10 动网论坛PHP版 v2.0++ Build 081
2008-10-10 免费时代CMS v5.0
2008-10-10 wodig第四季中文DIGG社区 v4.1 b
2008-10-10 老Y文章管理系统 v2.2 bulid 081
2008-10-10 魔法盒动感相册 ASP+SQL版 v2.0
2008-10-10 Asoft签到管理系统 v3.0 Pack1
2008-10-10 哥特人音乐网潮流留言本 v1.1
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成