﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-xiekai-blog-随笔分类-数据库/SQL语言</title><link>http://www.blogjava.net/xiekai-blog/category/18491.html</link><description>北冥有鱼，其名为鲲。鲲之大，不知其几千里也。化而为鸟，其名为鹏。鹏之背，不知其几千里也。怒而飞，其翼若垂天之云。是鸟也，海运则将徙于南冥。南冥者，天池也。
</description><language>zh-cn</language><lastBuildDate>Tue, 31 Aug 2010 21:54:15 GMT</lastBuildDate><pubDate>Tue, 31 Aug 2010 21:54:15 GMT</pubDate><ttl>60</ttl><item><title>Oracle 的小技巧</title><link>http://www.blogjava.net/xiekai-blog/archive/2010/08/31/330430.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Tue, 31 Aug 2010 07:58:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2010/08/31/330430.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/330430.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2010/08/31/330430.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/330430.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/330430.html</trackback:ping><description><![CDATA[■查询每张表有多少个字段<br />
SELECT<br />
&nbsp;&nbsp;&nbsp; table_name,<br />
&nbsp;&nbsp;&nbsp; Count(*) As 列数<br />
FROM<br />
&nbsp;&nbsp;&nbsp; user_tab_columns<br />
GROUP BY<br />
&nbsp;&nbsp;&nbsp; table_name<br />
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/330430.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2010-08-31 15:58 <a href="http://www.blogjava.net/xiekai-blog/archive/2010/08/31/330430.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE的INSTANCE(实例)和SCHEMA（方案、模式）</title><link>http://www.blogjava.net/xiekai-blog/archive/2010/07/17/326417.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Sat, 17 Jul 2010 11:57:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2010/07/17/326417.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/326417.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2010/07/17/326417.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/326417.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/326417.html</trackback:ping><description><![CDATA[<p>每一个运行的ORACLE数据库与一个ORACLE实例（INSTANCE）相联系。<br />
<span style="color: red">一个ORACLE实例为存取和控制一数据库的软件机制。</span>每一次在数据库服务器上启动一数据库时，称为系统全局区（SYSTEM <br />
GLOBAL AREA）的一内存区（简称SGA）被分配，有一个或多个ORACLE进程被启动。该<span style="color: red">SGA 和 <br />
ORACLE进程的结合称为一个ORACLE数据库实例。</span>一个实例的SGA和进程为管理数据库数据、为该数据库一个或多个用户服务而工作。 <br />
ORACLE在内存存储下列信息： <br />
l 执行的程序代码。 <br />
l 连接的会话信息 <br />
l 程序执行期间所需数据和共享的信息 <br />
l 存储在外存储上的缓冲信息。 <br />
ORACLE具有下列基本的内存结构： <br />
l 软件代码区 <br />
l 系统全局区,包括数据库缓冲存储区、日志缓冲区和共享池. <br />
l 程序全局区,包括栈区和数据区. <br />
l 排序区 <br />
<br />
软件代码区 <br />
用于存储正在执行的或可以执行的程序代码。 <br />
软件区是只读，可安装成共享或非共享。ORACLE系统程序是可共享的，以致多个ORACLE用户可存取它，而不需要在内存有多个副本。用户程序可以共享也可以不共享。 <br />
<br />
系统全局区 <br />
为一组由ORACLE分配的共享的内存结构，可包含一个数据库实例的数据或控制信息。如果多个用户同时连接到同一实例时，在实例的SGA中数据可为多个用户所共享，所以又称为共享全局区。当实例起动时，SGA的存储自动地被分配；当实例关闭时，该存储被回收。所有连接到多进程数据库实例的全部用户可自动地被分配；当实例关闭时，该存储被回收。所有连接到多进程数据库实例的全部用户可使用其SGA中的信息，但仅仅有几个进程可写入信息。在SGA中存储信息将内存划分成几个区：数据库缓冲存储区、日志缓冲区、共享池、请求和响应队列、数据字典存储区和其它各种信息。 <br />
<br />
程序全局区 <br />
PGA是一个内存区，包含单个进程的数据和控制信息，所以又称为进程全局区（PROCESS GLOBAL AREA）。 <br />
<br />
排序区 <br />
<clk></clk>排序需要内存<nobr style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" target="_blank">空间</nobr>，ORACLE利用该内存排序数据，这部分空间称为排序区。排序区存在于请求排序的用户进程的内存中，该空间的大小为适就排序数据量的大小，可增长，但受初始化参数SORT-AREA-SIZER所限制。 <br />
<br />
<span style="color: red">方案也叫模式，一个模式(schema)为模式对象(scehma object)的一个集合，每一个数据库用户对应一个模式。</span>模式对象为直接引用数据库数据的逻辑结构，模式对象包含如表、视图、索引、聚集、序列、同义词、数据库链、过程和包等结构。模式对象是逻辑数据存储结构。一个模式对象逻辑地存储在数据库的一个表空间中，每一个对象的数据物理地包含在表空间的一个或多个数据文件中。</p>
<p>建议：</p>
<p>服务器可用内存较小，采用多方案。多个SCHEMA（方案、模式）</p>
<p>服务器可用内存充足，采用多实例。多个INSTANCE(实例)</p>
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/326417.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2010-07-17 19:57 <a href="http://www.blogjava.net/xiekai-blog/archive/2010/07/17/326417.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中sequence的使用方法</title><link>http://www.blogjava.net/xiekai-blog/archive/2009/10/12/297904.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Mon, 12 Oct 2009 08:02:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2009/10/12/297904.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/297904.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2009/10/12/297904.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/297904.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/297904.html</trackback:ping><description><![CDATA[在Oracle数据库中，sequence等同于序列号，每次取的时候sequence会自动增加，一般会作用于需要按序列号排序的地方。<br />
<br />
1、Create Sequence<br />
(注释：你需要有CREATE SEQUENCE或CREATE ANY SEQUENCE权限)<br />
CREATE SEQUENCE emp_sequence<br />
INCREMENT BY 1 —— 每次加几个<br />
START WITH 1 —— 从1开始计数<br />
NOMAXVALUE —— 不设置最大值<br />
NOCYCLE —— 一直累加，不循环<br />
CACHE 10;<br />
- 假如指定CACHE值，Oracle就可以预先在内存里面放置一些sequence，这样存取的快些。cache里面的取完后，Oracle自动再取一组到cache. 使用cache或许会跳号， 比如数据库突然不正常down掉(shutdown abort)，cache中的sequence就会丢失。 所以可以在create sequence的时候用nocache防止这种情况。<br />
<br />
只要定义了emp_sequence，你就可以用使CURRVAL，NEXTVAL<br />
CURRVAL=返回 sequence的当前值<br />
NEXTVAL=增加sequence的值，然后返回 sequence 值<br />
例如：<br />
emp_sequence.CURRVAL<br />
emp_sequence.NEXTVAL<br />
<br />
可以使用sequence的地方：<br />
。不包含子查询、snapshot、VIEW的 SELECT 语句<br />
。INSERT语句的子查询中<br />
。INSERT语句的VALUES中<br />
。UPDATE 的 SET中<br />
例：<br />
INSERT INTO emp VALUES<br />
(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);<br />
SELECT empseq.currval FROM DUAL;<br />
<br />
2、Alter Sequence<br />
你需要有sequence的owner，或者拥有ALTER ANY SEQUENCE 权限才能改动sequence.<br />
可以alter除start至以外的所有sequence参数。如果想要改变start值，必须 drop sequence 再 re-create .<br />
<br />
Alter sequence示例：<br />
<pre>ALTER SEQUENCE emp_sequence INCREMENT BY 10 MAXVALUE 10000 CYCLE -- 到10000后从头开始 NOCACHE ;<br />
</pre>
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/297904.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2009-10-12 16:02 <a href="http://www.blogjava.net/xiekai-blog/archive/2009/10/12/297904.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>delete from tablea &amp; truncate table tablea 的区别</title><link>http://www.blogjava.net/xiekai-blog/archive/2009/07/17/287170.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Fri, 17 Jul 2009 07:26:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2009/07/17/287170.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/287170.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2009/07/17/287170.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/287170.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/287170.html</trackback:ping><description><![CDATA[相同点:truncate和不带where子句的delete, 以及drop都会删除表内的数据&nbsp; <br />
不同点:&nbsp; <br />
1. truncate和 delete只删除数据不删除表的结构(定义)&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.&nbsp; <br />
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.&nbsp; <br />
&nbsp;&nbsp;&nbsp; truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.&nbsp; <br />
3.速度,一般来说: drop&gt; truncate &gt; delete<br />
4.想删除表,当然用drop。想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.&nbsp; <br />
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/287170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2009-07-17 15:26 <a href="http://www.blogjava.net/xiekai-blog/archive/2009/07/17/287170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle的exp和imp</title><link>http://www.blogjava.net/xiekai-blog/archive/2009/07/17/287157.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Fri, 17 Jul 2009 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2009/07/17/287157.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/287157.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2009/07/17/287157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/287157.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/287157.html</trackback:ping><description><![CDATA[今天才知道Oracle的exp和imp命令原来这么方便，趁热总结一下。<br />
其实，这是Oracle自带的两个工具，在Oracle的安装目录的BIN目录下，可以看到exp.exe和imp.exe。<br />
<br />
运行--&gt;输入cmd--&gt;进入DOS环境--&gt;输入命令：exp 用户名/密码@数据库名&nbsp; file=xxx.dmp<br />
就可以实现数据库的导出了 （前提是要设置环境变量PATH=C:\oracle\product\10.2.0\client_1\bin）<br />
<br />
或者通过TeraTerm之类的软件登录数据库服务器，登录成功后运行命令：exp 用户名/密码&nbsp; file=xxx.dmp<br />
<br />
通过这个方法，一下子就可以把数据库的表，视图，触发器，包等数据库对象全部导出成dmp文件。<br />
再通过imp命令，就可以实现数据库的转储。
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/287157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2009-07-17 15:05 <a href="http://www.blogjava.net/xiekai-blog/archive/2009/07/17/287157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle SQL 中 RANK &amp; DENSE_RANK 的应用</title><link>http://www.blogjava.net/xiekai-blog/archive/2007/11/29/163961.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Thu, 29 Nov 2007 04:22:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2007/11/29/163961.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/163961.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2007/11/29/163961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/163961.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/163961.html</trackback:ping><description><![CDATA[<p><span class="bold">Oracle中聚合函数RANK和DENSE_RANK的使用.</span><br />
<br />
期末考试成绩表（T_QMKSCJ）<br />
年度&nbsp;班级号&nbsp;科目号&nbsp;学生学号&nbsp;成绩<br />
2000&nbsp;001&nbsp;0001&nbsp;00001001&nbsp;88<br />
2000&nbsp;001&nbsp;0001&nbsp;00001002&nbsp;99<br />
2000&nbsp;001&nbsp;0001&nbsp;00001003&nbsp;89<br />
2000&nbsp;001&nbsp;0002&nbsp;00001001&nbsp;87<br />
2000&nbsp;001&nbsp;0002&nbsp;00001002&nbsp;60<br />
2000&nbsp;001&nbsp;0002&nbsp;00001003&nbsp;70<br />
2000&nbsp;002&nbsp;0001&nbsp;00002001&nbsp;88<br />
2000&nbsp;002&nbsp;0001&nbsp;00002002&nbsp;99<br />
2000&nbsp;002&nbsp;0001&nbsp;00002003&nbsp;89<br />
2000&nbsp;002&nbsp;0002&nbsp;00002001&nbsp;87<br />
2000&nbsp;002&nbsp;0002&nbsp;00002002&nbsp;60<br />
2000&nbsp;002&nbsp;0002&nbsp;00002003&nbsp;70<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
2001&nbsp;001&nbsp;0001&nbsp;01001001&nbsp;88<br />
2001&nbsp;001&nbsp;0001&nbsp;01001002&nbsp;99<br />
2001&nbsp;001&nbsp;0001&nbsp;01001003&nbsp;89<br />
2001&nbsp;001&nbsp;0002&nbsp;01001001&nbsp;87<br />
2001&nbsp;001&nbsp;0002&nbsp;01001002&nbsp;60<br />
2001&nbsp;001&nbsp;0002&nbsp;01001003&nbsp;70<br />
2001&nbsp;002&nbsp;0001&nbsp;01002001&nbsp;88<br />
2001&nbsp;002&nbsp;0001&nbsp;01002002&nbsp;99<br />
2001&nbsp;002&nbsp;0001&nbsp;01002003&nbsp;89<br />
2001&nbsp;002&nbsp;0002&nbsp;01002001&nbsp;87<br />
2001&nbsp;002&nbsp;0002&nbsp;01002002&nbsp;60<br />
2001&nbsp;002&nbsp;0002&nbsp;01002003&nbsp;70<br />
2001&nbsp;003&nbsp;0003&nbsp;01003001&nbsp;87<br />
2001&nbsp;003&nbsp;0003&nbsp;01003002&nbsp;60<br />
2001&nbsp;003&nbsp;0003&nbsp;01003003&nbsp;70</p>
<p>1）选出各年度各班级各科目第一名的学生的信息（年度，班级号，科目号，成绩，学号)</p>
<p>select T.年度, T.班级号, T.科目号, T.成绩，T.学生学号，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dense_rank() over (partition by T.年度, T.班级号, T.科目号 order by T.成绩 desc) T.排名<br />
from&nbsp;&nbsp; T_QMKSCJ T<br />
where&nbsp; T.排名 = '1'</p>
<p><br />
2）选出各年度各班级各科目第一名的学生的信息（年度，班级名，科目名，成绩，学号，学生姓名)</p>
<p>select T.年度, T.班级名, T.科目名, T.成绩，T.学生学号，T.学生姓名，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dense_rank() over (partition by T.年度, T.班级号, T.科目号 order by T.成绩 desc) T.排名<br />
from&nbsp;&nbsp; <br />
&nbsp; (select <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A.年度, A.班级号, A.科目号, A.成绩，A.学生学号，B.班级名, C.学生姓名, D.科目名<br />
&nbsp;&nbsp; from<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; T_QMKSCJ A,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; T_班级 B,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; T_学生 C,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; T_科目 D<br />
&nbsp;&nbsp; where&nbsp; A.班级号 = B.班级号<br />
&nbsp;&nbsp;&nbsp;&nbsp; and&nbsp; A.学生学号 = C.学生学号<br />
&nbsp;&nbsp;&nbsp;&nbsp; and&nbsp; A.科目号 = D.科目号<br />
&nbsp; ) T<br />
where T.排名 = '1'</p>
<p><br />
&nbsp;<br />
3）某年度某班级的某学生的某门科目的考试成绩在其班级排第几？</p>
<p>年度&nbsp;班级号&nbsp;科目号&nbsp;学生学号&nbsp;成绩<br />
2001&nbsp;002&nbsp;0001&nbsp;01002003&nbsp;89</p>
<p>SELECT&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RANK(2001,002,0001,89) WITHIN GROUP&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ORDER BY T.年度, T.班级号, T.科目号, T.成绩 DESC) T.排名&nbsp;&nbsp;&nbsp;&nbsp; <br />
FROM T_QMKSCJ T</p>
<p>注意:<br />
Rank()里的参数必须为常数,或常值表达式,里面参数的个数,类型也要和order by后字段的类型相对应.</p>
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/163961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2007-11-29 12:22 <a href="http://www.blogjava.net/xiekai-blog/archive/2007/11/29/163961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>轻松解决CSE中不显示TimeStamp的问题</title><link>http://www.blogjava.net/xiekai-blog/archive/2007/10/25/155886.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Thu, 25 Oct 2007 08:09:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2007/10/25/155886.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/155886.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2007/10/25/155886.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/155886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/155886.html</trackback:ping><description><![CDATA[以前用CSE查询数据库表时，结果中TimeStamp的字段总是显示为空，不要以为这个字段中没有值，很可能只是没有显示出来。<br />
select timestamp from table<br />
where ....<br />
<br />
其实只要加上to_char()命令，就可以让隐藏起来的数值乖乖显示出来。<br />
select to_char(timestamp) from table <br />
where ....<br />
<br />
进一步，还可以控制显示的格式。<br />
select&nbsp;<br />
&nbsp;&nbsp;&nbsp; to_char(timestamp, 'yyyy/mm/dd hh:mi:ss') <br />
from <br />
&nbsp;&nbsp;&nbsp; table<br />
where&nbsp;<br />
&nbsp;&nbsp;&nbsp; rownum &lt; 'n'&nbsp;&nbsp; --只显示表table中前n-1条记录。-- 
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/155886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2007-10-25 16:09 <a href="http://www.blogjava.net/xiekai-blog/archive/2007/10/25/155886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle SQL性能优化</title><link>http://www.blogjava.net/xiekai-blog/archive/2007/01/22/95241.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Mon, 22 Jan 2007 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2007/01/22/95241.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/95241.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2007/01/22/95241.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/95241.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/95241.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下摘自扁豆的专栏（http://blog.csdn.net/fuwei2241/）												（1）      								选择最有效率的表名顺序				(				只在基于规则的优化器中有效				)				：								ORACLE				的解析器按照从右到左的顺序处...&nbsp;&nbsp;<a href='http://www.blogjava.net/xiekai-blog/archive/2007/01/22/95241.html'>阅读全文</a><img src ="http://www.blogjava.net/xiekai-blog/aggbug/95241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2007-01-22 11:16 <a href="http://www.blogjava.net/xiekai-blog/archive/2007/01/22/95241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle的WHERE语句中的索引的使用</title><link>http://www.blogjava.net/xiekai-blog/archive/2007/01/22/95240.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Mon, 22 Jan 2007 03:13:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2007/01/22/95240.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/95240.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2007/01/22/95240.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/95240.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/95240.html</trackback:ping><description><![CDATA[
		<font color="#000000">
				<span style="COLOR: blue">索引是表的一个概念部分</span>
				<span style="COLOR: blue">,</span>
				<span style="COLOR: blue">用来提高检索数据的效率，</span>
				<span style="COLOR: blue">ORACLE</span>
				<span style="COLOR: blue">使用了一个复杂的自平衡</span>
				<span style="COLOR: blue">B-tree</span>
				<span style="COLOR: blue">结构</span>
				<span style="COLOR: blue">. </span>
				<span style="COLOR: blue">通常</span>
				<span style="COLOR: blue">,</span>
				<span style="COLOR: blue">通过索引查询数据比全表扫描要快</span>
				<span style="COLOR: blue">. </span>
				<span style="COLOR: blue">当</span>
				<span style="COLOR: blue">ORACLE</span>
				<span style="COLOR: blue">找出执行查询和</span>
				<span style="COLOR: blue">Update</span>
				<span style="COLOR: blue">语句的最佳路径时</span>
				<span style="COLOR: blue">, ORACLE</span>
				<span style="COLOR: blue">优化器将使用索引。</span>
		</font>
		<br />
		<font color="#000000">大部分的性能问题其实都是索引应用的问题，Where子句、Order By、Group By 都要用到索引。<br />一般开发人员认为将索引建全了就可以下班回家了，实则还有颇多的思量和陷阱。</font>
		<br />
		<br />
		<strong>索引列上不要使用<font face="Microsoft Sans Serif" size="2">IS NULL 或 IS NOT NULL<br /></font></strong>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #000000">× SELECT Col FROM tbl WHERE col IS NULL</span>
		</div>
		<br />
		<strong>索引列上不要使用函数<br /></strong>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #000000">× SELECT Col FROM tbl WHERE substr(name</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">3</span>
				<span style="COLOR: #000000">) </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> 'ABC'<br />○ SELECT Col FROM tbl WHERE name LIKE 'ABC%'<br /></span>
		</div>
		<font color="#0000ff">WHERE<span style="COLOR: blue">子句中，如果索引列是函数的一部分．优化器将不使用索引而使用全表扫描．<br /></span></font>
		<br />
		<strong>索引列上不要使用NOT</strong>
		<font size="3">
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Microsoft Sans Serif'; mso-hansi-font-family: 'Microsoft Sans Serif'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: JA; mso-bidi-language: AR-SA">（</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Microsoft Sans Serif'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 'MS UI Gothic'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: JA; mso-bidi-language: AR-SA">!=</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Microsoft Sans Serif'; mso-hansi-font-family: 'Microsoft Sans Serif'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: JA; mso-bidi-language: AR-SA">、</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Microsoft Sans Serif'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 'MS UI Gothic'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: JA; mso-bidi-language: AR-SA">&lt;&gt;</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS UI Gothic'; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Microsoft Sans Serif'; mso-hansi-font-family: 'Microsoft Sans Serif'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: JA; mso-bidi-language: AR-SA">）<br /></span>
		</font>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #000000">× SELECT Col FROM tbl WHERE col !</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">10</span>
				<span style="COLOR: #000000">
						<br />○ SELECT Col FROM tbl WHERE col &gt; </span>
				<span style="COLOR: #000000">10</span>
				<span style="COLOR: #000000"> OR col &lt; </span>
				<span style="COLOR: #000000">10</span>
				<span style="COLOR: #000000">
						<br />
				</span>
		</div>
		<p align="left">
				<font color="#0000ff">
						<span style="COLOR: blue">记住</span>
						<span style="COLOR: blue">, </span>
						<span style="COLOR: blue">索引只能告诉你什么存在于表中</span>
						<span style="COLOR: blue">, </span>
						<span style="COLOR: blue">而不能告诉你什么不存在于表中</span>
						<span style="COLOR: blue">.</span>
						<span style="COLOR: purple">
						</span>要避免在索引列上使用<span style="COLOR: blue">NOT, NOT</span><span style="COLOR: blue">会产生在和在索引列上使用函数相同的</span><span style="COLOR: blue">影响</span><span style="COLOR: blue">. </span><span style="COLOR: blue">当</span><span style="COLOR: blue">ORACLE”</span><span style="COLOR: blue">遇到</span><span style="COLOR: blue">”NOT,</span><span style="COLOR: blue">他就会停止使用索引转而执行全表扫描。<br /></span></font>
				<br />
				<strong>索引列上不要进行计算</strong>
				<span style="FONT-SIZE: 8pt; FONT-FAMILY: 'MS UI Gothic'; mso-ascii-font-family: 'Microsoft Sans Serif'; mso-hansi-font-family: 'Microsoft Sans Serif'">
				</span>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #000000">× SELECT Col FROM tbl WHERE col / </span>
				<span style="COLOR: #000000">10</span>
				<span style="COLOR: #000000"> &gt; </span>
				<span style="COLOR: #000000">10</span>
				<span style="COLOR: #000000">
						<br />○ SELECT Col FROM tbl WHERE col &gt; </span>
				<span style="COLOR: #000000">10</span>
				<span style="COLOR: #000000"> * </span>
				<span style="COLOR: #000000">10</span>
				<span style="COLOR: #000000">
						<br />
				</span>
		</div>
		<font color="#0000ff">这是最最普遍的失效陷阱，比如where trunc(order_date)=trunc(sysdate), i+2&gt;4。索引失效的原因也简单，索引是针对原值建的二叉树，你将列值*3/4+2折腾一番后，原来的二叉树当然就用不上了。<br /></font>
		<br />
		<br />
		<br />
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt">
				<span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings">
						<span style="mso-list: Ignore">
								<span style="FONT: 7pt 'Times New Roman'">
										<font face="Wingdings" size="2">
												<br />
										</font>
								</span>
						</span>
				</span> </p>
		<p>
				<br />
		</p>
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/95240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2007-01-22 11:13 <a href="http://www.blogjava.net/xiekai-blog/archive/2007/01/22/95240.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中DECODE的使用</title><link>http://www.blogjava.net/xiekai-blog/archive/2007/01/22/95221.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Mon, 22 Jan 2007 01:57:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2007/01/22/95221.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/95221.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2007/01/22/95221.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/95221.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/95221.html</trackback:ping><description><![CDATA[含义解释： <br /><br /><font color="#0000ff"><font color="#000000">    </font><strong><u>DECODE</u></strong></font>(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)<br /><br />    该函数的含义如下：<br /><br />IF 条件=值1 THEN<br />　　　　RETURN(翻译值1)<br />ELSIF 条件=值2 THEN<br />　　　　RETURN(翻译值2)<br />　　　　......<br />ELSIF 条件=值n THEN<br />　　　　RETURN(翻译值n)<br />ELSE<br />　　　　RETURN(缺省值)<br />END IF<br /><img src ="http://www.blogjava.net/xiekai-blog/aggbug/95221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2007-01-22 09:57 <a href="http://www.blogjava.net/xiekai-blog/archive/2007/01/22/95221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL文中关于UNION和左连接的使用</title><link>http://www.blogjava.net/xiekai-blog/archive/2006/12/18/88472.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Mon, 18 Dec 2006 03:44:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2006/12/18/88472.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/88472.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2006/12/18/88472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/88472.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/88472.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近一直在做一个项目，很久没来这里写东西了。项目刚完成第一期，第二期就接踵而至了。在一期中，我发现自己对SQL文还有不少知识的空白点，比如对于UNION和左连接的使用，下面就这方面做些笔记，与大家共享。■项目中使用的DB是Oracle。■例一，注意UNION的使用。　　★详细式样中的SQL文（部分）：取得項目　　省略選択条件　　請求残高．今回締日　＝　画面．「締日」結合条件　　得意先．得意先コード...&nbsp;&nbsp;<a href='http://www.blogjava.net/xiekai-blog/archive/2006/12/18/88472.html'>阅读全文</a><img src ="http://www.blogjava.net/xiekai-blog/aggbug/88472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2006-12-18 11:44 <a href="http://www.blogjava.net/xiekai-blog/archive/2006/12/18/88472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>