⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 265.html

📁 Jsp001精华文章离线版.很不错的,主要是针对JSP的相关内容的
💻 HTML
📖 第 1 页 / 共 2 页
字号:

<STYLE type=text/css>
<!--
body,td { font-size:9pt;}
hr { color: #000000; height: 1px}
-->
</STYLE>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD><TITLE>精选文章 >> Oracle 专栏 >> 漫 谈oracle 中 的 空 值</title>
</head>
<body >

<p><IMG SRC="../image/jsp001_middle_logo.gif" WIDTH="180" HEIGHT="60" BORDER=0 ALT=""></p>

<table width=100% bgcolor="#cccccc" align=center cellpadding="2" cellspacing="0" border=1 bordercolorlight="#000000" bordercolordark="#FFFFFF">
<tr bgcolor="#EFF8FF"><td>
<a href=http://www.jsp001.com/list_thread.php?int_attribute=2>精选文章</a>
>> <a href=http://www.jsp001.com/list_thread.php?forumid=20&int_attribute=2>Oracle 专栏</a>
>> 漫 谈oracle 中 的 空 值 [<a href=http://www.jsp001.com/forum/showthread.php?goto=newpost&threadid=265>查看别人的评论</a>]<br>

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -