﻿<?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-☆-文章分类-数据库原理</title><link>http://www.blogjava.net/lizhuxin/category/33770.html</link><description>☆</description><language>zh-cn</language><lastBuildDate>Thu, 14 Aug 2008 06:03:30 GMT</lastBuildDate><pubDate>Thu, 14 Aug 2008 06:03:30 GMT</pubDate><ttl>60</ttl><item><title>oracle 序列 Sequence实现主键自动增1</title><link>http://www.blogjava.net/lizhuxin/articles/221962.html</link><dc:creator>☆</dc:creator><author>☆</author><pubDate>Thu, 14 Aug 2008 04:48:00 GMT</pubDate><guid>http://www.blogjava.net/lizhuxin/articles/221962.html</guid><wfw:comment>http://www.blogjava.net/lizhuxin/comments/221962.html</wfw:comment><comments>http://www.blogjava.net/lizhuxin/articles/221962.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lizhuxin/comments/commentRss/221962.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lizhuxin/services/trackbacks/221962.html</trackback:ping><description><![CDATA[oracle 序列 Sequence实现主键自动增1：<br />
<br />
<p>Oracle序列Sequence是一种数据库项，它生成一个整数序列。<br />
序列所生成的整数通常可以用来填充数字类型的主键列。</p>
<p>注：<br />
SEQ_NOTICE_NO:Sequence；<br />
TSS_INFO_NOTICE ：公告基本信息表</p>
<p>1.创建序列<br />
e.g:<br />
create sequence SEQ_NOTICE_NO<br />
minvalue 1<br />
maxvalue 999999999999999999999999999<br />
start with 1<br />
increment by 1<br />
cache 20;<br />
详细语法参考Oracle官方资料。</p>
<p>2.从数据字典中获取有关序列的信息<br />
从user_sequences中可以获得有关序列的信息。<br />
e.g:select * from user_sequences;</p>
<p>3.使用序列<br />
一个序列包含两个&#8220;伪列&#8221;，分别是currval和next，可以分别用来获取该序列的当前值和下一个值。<br />
e.g:<br />
&nbsp;&nbsp;&nbsp; select SEQ_NOTICE_NO.nextval from dual;</p>
<p>&nbsp;&nbsp;&nbsp; select SEQ_NOTICE_NO.currval from dual;</p>
<p>4.使用序列填充主键<br />
当表的主键是整数时，通常使用序列来生成主键。<br />
e.g:<br />
&nbsp;&nbsp;&nbsp; create sequence TSS_INFO_NOTICE NOCACHE;</p>
<p>5.修改序列<br />
&nbsp;&nbsp;&nbsp; alter sequence SEQ_NOTICE_NO<br />
&nbsp;&nbsp;&nbsp; increment by 8;<br />
&nbsp;&nbsp;&nbsp; 说明：将SEQ_SVC_NO的增量修改为8。</p>
<p>6.删除序列<br />
&nbsp;&nbsp;&nbsp; drop sequence SEQ_NOTICE_NO;</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/lizhuxin/aggbug/221962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lizhuxin/" target="_blank">☆</a> 2008-08-14 12:48 <a href="http://www.blogjava.net/lizhuxin/articles/221962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>orcle数据库常用函数</title><link>http://www.blogjava.net/lizhuxin/articles/221961.html</link><dc:creator>☆</dc:creator><author>☆</author><pubDate>Thu, 14 Aug 2008 04:47:00 GMT</pubDate><guid>http://www.blogjava.net/lizhuxin/articles/221961.html</guid><wfw:comment>http://www.blogjava.net/lizhuxin/comments/221961.html</wfw:comment><comments>http://www.blogjava.net/lizhuxin/articles/221961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lizhuxin/comments/commentRss/221961.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lizhuxin/services/trackbacks/221961.html</trackback:ping><description><![CDATA[orcle数据库常用函数：<br />
<br />
<p>SQL中的单记录函数</p>
<p>1.ASCII 返回与指定的字符对应的十进制数;<br />
SQL&gt; select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual;</p>
<p>A A ZERO SPACE<br />
--------- --------- --------- ---------<br />
65 97 48 32</p>
<p><br />
2.CHR 给出整数,返回对应的字符;<br />
SQL&gt; select chr(54740) zhao,chr(65) chr65 from dual;</p>
<p>ZH C<br />
-- -<br />
赵 A</p>
<p>3.CONCAT 连接两个字符串;<br />
SQL&gt; select concat('010-','88888888')||'转23' 高乾竞电话 from dual;</p>
<p>高乾竞电话<br />
----------------<br />
010-88888888转23</p>
<p>4.INITCAP 返回字符串并将字符串的第一个字母变为大写;<br />
SQL&gt; select initcap('smith') upp from dual;</p>
<p>UPP<br />
-----<br />
Smith</p>
<p>5.INSTR(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置;<br />
C1 被搜索的字符串<br />
C2 希望搜索的字符串<br />
I 搜索的开始位置,默认为1<br />
J 出现的位置,默认为1<br />
SQL&gt; select instr('oracle traning','ra',1,2) instring from dual;</p>
<p>INSTRING<br />
---------<br />
9</p>
<p>6.LENGTH 返回字符串的长度;<br />
SQL&gt; select name,length(name),addr,length(addr),sal,length(to_char(sal)) from .nchar_tst;</p>
<p>NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL))<br />
------ ------------ ---------------- ------------ --------- --------------------<br />
高乾竞 3 北京市海锭区 6 9999.99 7</p>
<p>7.LOWER 返回字符串,并将所有的字符小写<br />
SQL&gt; select lower('AaBbCcDd')AaBbCcDd from dual;</p>
<p>AABBCCDD<br />
--------<br />
aabbccdd</p>
<p>8.UPPER 返回字符串,并将所有的字符大写<br />
SQL&gt; select upper('AaBbCcDd') upper from dual;</p>
<p>UPPER<br />
--------<br />
AABBCCDD</p>
<p>9.RPAD和LPAD(粘贴字符)<br />
RPAD 在列的右边粘贴字符<br />
LPAD 在列的左边粘贴字符<br />
SQL&gt; select lpad(rpad('gao',10,'*'),17,'*')from dual;</p>
<p>LPAD(RPAD('GAO',1<br />
-----------------<br />
*******gao*******<br />
不够字符则用*来填满</p>
<p>10.LTRIM和RTRIM<br />
LTRIM 删除左边出现的字符串<br />
RTRIM 删除右边出现的字符串<br />
SQL&gt; select ltrim(rtrim(' gao qian jing ',' '),' ') from dual;</p>
<p>LTRIM(RTRIM('<br />
-------------<br />
gao qian jing</p>
<p>11.SUBSTR(string,start,count)<br />
取子字符串,从start开始,取count个<br />
SQL&gt; select substr('13088888888',3,8) from dual;</p>
<p>SUBSTR('<br />
--------<br />
08888888</p>
<p>12.REPLACE('string','s1','s2')<br />
string 希望被替换的字符或变量<br />
s1 被替换的字符串<br />
s2 要替换的字符串<br />
SQL&gt; select replace('he love you','he','i') from dual;</p>
<p>REPLACE('HELOVEYOU','HE','I')<br />
------------------------------<br />
i love you</p>
<p>13.SOUNDEX 返回一个与给定的字符串读音相同的字符串<br />
SQL&gt; create table table1(xm varchar(8));<br />
SQL&gt; insert into table1 values('weather');<br />
SQL&gt; insert into table1 values('wether');<br />
SQL&gt; insert into table1 values('gao');</p>
<p>SQL&gt; select xm from table1 where soundex(xm)=soundex('weather');</p>
<p>XM<br />
--------<br />
weather<br />
wether</p>
<p>14.TRIM('s' from 'string')<br />
LEADING 剪掉前面的字符<br />
TRAILING 剪掉后面的字符<br />
如果不指定,默认为空格符</p>
<p>15.ABS 返回指定值的绝对值<br />
SQL&gt; select abs(100),abs(-100) from dual;</p>
<p>ABS(100) ABS(-100)<br />
--------- ---------<br />
100 100</p>
<p>16.ACOS 给出反余弦的值<br />
SQL&gt; select acos(-1) from dual;</p>
<p>ACOS(-1)<br />
---------<br />
3.1415927</p>
<p>17.ASIN 给出反正弦的值<br />
SQL&gt; select asin(0.5) from dual;</p>
<p>ASIN(0.5)<br />
---------<br />
.52359878</p>
<p>18.ATAN 返回一个数字的反正切值<br />
SQL&gt; select atan(1) from dual;</p>
<p>ATAN(1)<br />
---------<br />
.78539816</p>
<p>19.CEIL 返回大于或等于给出数字的最小整数<br />
SQL&gt; select ceil(3.1415927) from dual;</p>
<p>CEIL(3.1415927)<br />
---------------<br />
4</p>
<p>20.COS 返回一个给定数字的余弦<br />
SQL&gt; select cos(-3.1415927) from dual;</p>
<p>COS(-3.1415927)<br />
---------------<br />
-1</p>
<p>21.COSH 返回一个数字反余弦值<br />
SQL&gt; select cosh(20) from dual;</p>
<p>COSH(20)<br />
---------<br />
242582598</p>
<p>22.EXP 返回一个数字e的n次方根<br />
SQL&gt; select exp(2),exp(1) from dual;</p>
<p>EXP(2) EXP(1)<br />
--------- ---------<br />
7.3890561 2.7182818</p>
<p>23.FLOOR 对给定的数字取整数<br />
SQL&gt; select floor(2345.67) from dual;</p>
<p>FLOOR(2345.67)<br />
--------------<br />
2345</p>
<p>24.LN 返回一个数字的对数值<br />
SQL&gt; select ln(1),ln(2),ln(2.7182818) from dual;</p>
<p>LN(1) LN(2) LN(2.7182818)<br />
--------- --------- -------------<br />
0 .69314718 .99999999</p>
<p>25.LOG(n1,n2) 返回一个以n1为底n2的对数<br />
SQL&gt; select log(2,1),log(2,4) from dual;</p>
<p>LOG(2,1) LOG(2,4)<br />
--------- ---------<br />
0 2</p>
<p>26.MOD(n1,n2) 返回一个n1除以n2的余数<br />
SQL&gt; select mod(10,3),mod(3,3),mod(2,3) from dual;</p>
<p>MOD(10,3) MOD(3,3) MOD(2,3)<br />
--------- --------- ---------<br />
1 0 2</p>
<p>27.POWER 返回n1的n2次方根<br />
SQL&gt; select power(2,10),power(3,3) from dual;</p>
<p>POWER(2,10) POWER(3,3)<br />
----------- ----------<br />
1024 27</p>
<p>28.ROUND和TRUNC<br />
按照指定的精度进行舍入<br />
SQL&gt; select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual;</p>
<p>ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)<br />
----------- ------------ ----------- ------------<br />
56 -55 55 -55</p>
<p>29.SIGN 取数字n的符号,大于0返回1,小于0返回-1,等于0返回0<br />
SQL&gt; select sign(123),sign(-100),sign(0) from dual;</p>
<p>SIGN(123) SIGN(-100) SIGN(0)<br />
--------- ---------- ---------<br />
1 -1 0</p>
<p>30.SIN 返回一个数字的正弦值<br />
SQL&gt; select sin(1.57079) from dual;</p>
<p>SIN(1.57079)<br />
------------<br />
1</p>
<p>31.SIGH 返回双曲正弦的值<br />
SQL&gt; select sin(20),sinh(20) from dual;</p>
<p>SIN(20) SINH(20)<br />
--------- ---------<br />
.91294525 242582598</p>
<p>32.SQRT 返回数字n的根<br />
SQL&gt; select sqrt(64),sqrt(10) from dual;</p>
<p>SQRT(64) SQRT(10)<br />
--------- ---------<br />
8 3.1622777</p>
<p>33.TAN 返回数字的正切值<br />
SQL&gt; select tan(20),tan(10) from dual;</p>
<p>TAN(20) TAN(10)<br />
--------- ---------<br />
2.2371609 .64836083</p>
<p>34.TANH<br />
返回数字n的双曲正切值<br />
SQL&gt; select tanh(20),tan(20) from dual;</p>
<p>TANH(20) TAN(20)<br />
--------- ---------<br />
1 2.2371609</p>
<p>35.TRUNC<br />
按照指定的精度截取一个数<br />
SQL&gt; select trunc(124.1666,-2) trunc1,trunc(124.16666,2) from dual;</p>
<p>TRUNC1 TRUNC(124.16666,2)<br />
--------- ------------------<br />
100 124.16</p>
<p>36.ADD_MONTHS<br />
增加或减去月份<br />
SQL&gt; select to_char(add_months(to_date('199912','yyyymm'),2),'yyyymm') from dual;</p>
<p>TO_CHA<br />
------<br />
200002<br />
SQL&gt; select to_char(add_months(to_date('199912','yyyymm'),-2),'yyyymm') from dual;</p>
<p>TO_CHA<br />
------<br />
199910</p>
<p>37.LAST_DAY<br />
返回日期的最后一天<br />
SQL&gt; select to_char(sysdate,'yyyy.mm.dd'),to_char((sysdate)+1,'yyyy.mm.dd') from dual;</p>
<p>TO_CHAR(SY TO_CHAR((S<br />
---------- ----------<br />
2004.05.09 2004.05.10<br />
SQL&gt; select last_day(sysdate) from dual;</p>
<p>LAST_DAY(S<br />
----------<br />
31-5月 -04</p>
<p>38.MONTHS_BETWEEN(date2,date1)<br />
给出date2-date1的月份<br />
SQL&gt; select months_between('19-12月-1999','19-3月-1999') mon_between from dual;</p>
<p>MON_BETWEEN<br />
-----------<br />
9<br />
SQL&gt;selectmonths_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.dd')) mon_betw from dual;</p>
<p>MON_BETW<br />
---------<br />
-60</p>
<p>39.NEW_TIME(date,'this','that')<br />
给出在this时区=other时区的日期和时间<br />
SQL&gt; select to_char(sysdate,'yyyy.mm.dd hh24:mi:ss') bj_time,to_char(new_time<br />
2 (sysdate,'PDT','GMT'),'yyyy.mm.dd hh24:mi:ss') los_angles from dual;</p>
<p>BJ_TIME LOS_ANGLES<br />
------------------- -------------------<br />
2004.05.09 11:05:32 2004.05.09 18:05:32</p>
<p>40.NEXT_DAY(date,'day')<br />
给出日期date和星期x之后计算下一个星期的日期<br />
SQL&gt; select next_day('18-5月-2001','星期五') next_day from dual;</p>
<p>NEXT_DAY<br />
----------<br />
25-5月 -01</p>
<p>41.SYSDATE 用来得到系统的当前日期<br />
SQL&gt; select to_char(sysdate,'dd-mm-yyyy day') from dual;</p>
<p>TO_CHAR(SYSDATE,'<br />
-----------------<br />
09-05-2004 星期日<br />
trunc(date,fmt)按照给出的要求将日期截断,如果fmt='mi'表示保留分,截断秒<br />
SQL&gt; select to_char(trunc(sysdate,'hh'),'yyyy.mm.dd hh24:mi:ss') hh,<br />
2 to_char(trunc(sysdate,'mi'),'yyyy.mm.dd hh24:mi:ss') hhmm from dual;</p>
<p>HH HHMM<br />
------------------- -------------------<br />
2004.05.09 11:00:00 2004.05.09 11:17:00</p>
<p>42.CHARTOROWID 将字符数据类型转换为ROWID类型<br />
SQL&gt; select rowid,rowidtochar(rowid),ename from scott.emp;</p>
<p>ROWID ROWIDTOCHAR(ROWID) ENAME<br />
------------------ ------------------ ----------<br />
AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH<br />
AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN<br />
AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD<br />
AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES</p>
<p><br />
43.CONVERT(c,dset,sset)<br />
将源字符串 sset从一个语言字符集转换到另一个目的dset字符集<br />
SQL&gt; select convert('strutz','we8hp','f7dec') "conversion" from dual;</p>
<p>conver<br />
------<br />
strutz</p>
<p>44.HEXTORAW 将一个十六进制构成的字符串转换为二进制</p>
<p>45.RAWTOHEXT 将一个二进制构成的字符串转换为十六进制</p>
<p>46.ROWIDTOCHAR 将ROWID数据类型转换为字符类型</p>
<p>47.TO_CHAR(date,'format')<br />
SQL&gt; select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;</p>
<p>TO_CHAR(SYSDATE,'YY<br />
-------------------<br />
2004/05/09 21:14:41</p>
<p>48.TO_DATE(string,'format') 将字符串转化为ORACLE中的一个日期</p>
<p>49.TO_MULTI_BYTE 将字符串中的单字节字符转化为多字节字符<br />
SQL&gt; select to_multi_byte('高') from dual;</p>
<p>TO<br />
--<br />
高</p>
<p>50.TO_NUMBER<br />
将给出的字符转换为数字<br />
SQL&gt; select to_number('1999') year from dual;</p>
<p>YEAR<br />
---------<br />
1999</p>
<p>51.BFILENAME(dir,file)指定一个外部二进制文件<br />
SQL&gt;insert into file_tb1 values(bfilename('lob_dir1','image1.gif'));</p>
<p>52.CONVERT('x','desc','source') 将x字段或变量的源source转换为desc<br />
SQL&gt; select sid,serial#,username,decode(command,<br />
2 0,'none',<br />
3 2,'insert',<br />
4 3,<br />
5 'select',<br />
6 6,'update',<br />
7 7,'delete',<br />
8 8,'drop',<br />
9 'other') cmd from v$session where type!='background';</p>
<p>SID SERIAL# USERNAME CMD<br />
--------- --------- ------------------------------ ------<br />
1 1 none<br />
2 1 none<br />
3 1 none<br />
4 1 none<br />
5 1 none<br />
6 1 none<br />
7 1275 none<br />
8 1275 none<br />
9 20 GAO select<br />
10 40 GAO none</p>
<p>53.DUMP(s,fmt,start,length)<br />
DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值<br />
SQL&gt; col global_name for a30<br />
SQL&gt; col dump_string for a50<br />
SQL&gt; set lin 200<br />
SQL&gt; select global_name,dump(global_name,1017,8,5) dump_string from global_name;</p>
<p>GLOBAL_NAME DUMP_STRING<br />
------------------------------ --------------------------------------------------<br />
ORACLE.WORLD Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D</p>
<p>54.EMPTY_BLOB()和EMPTY_CLOB()<br />
这两个函数都是用来对大数据类型字段进行初始化操作的函数</p>
<p>55.GREATEST<br />
返回一组表达式中的最大值,即比较字符的编码大小.<br />
SQL&gt; select greatest('AA','AB','AC') from dual;</p>
<p>GR<br />
--<br />
AC<br />
SQL&gt; select greatest('啊','安','天') from dual;</p>
<p>GR<br />
--<br />
天</p>
<p>56.LEAST<br />
返回一组表达式中的最小值<br />
SQL&gt; select least('啊','安','天') from dual;</p>
<p>LE<br />
--<br />
啊</p>
<p>57.UID<br />
返回标识当前用户的唯一整数<br />
SQL&gt; show user<br />
USER 为"GAO"<br />
SQL&gt; select username,user_id from dba_users where user_id=uid;</p>
<p>USERNAME USER_ID<br />
------------------------------ ---------<br />
GAO 25</p>
<p>58.USER<br />
返回当前用户的名字<br />
SQL&gt; select user from dual;</p>
<p>USER<br />
------------------------------<br />
GAO</p>
<p>59.USEREVN<br />
返回当前用户环境的信息,opt可以是:<br />
ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE<br />
ISDBA 查看当前用户是否是DBA如果是则返回true<br />
SQL&gt; select userenv('isdba') from dual;</p>
<p>USEREN<br />
------<br />
FALSE<br />
SQL&gt; select userenv('isdba') from dual;</p>
<p>USEREN<br />
------<br />
TRUE<br />
SESSION<br />
返回会话标志<br />
SQL&gt; select userenv('sessionid') from dual;</p>
<p>USERENV('SESSIONID')<br />
--------------------<br />
152<br />
ENTRYID<br />
返回会话人口标志<br />
SQL&gt; select userenv('entryid') from dual;</p>
<p>USERENV('ENTRYID')<br />
------------------<br />
0<br />
INSTANCE<br />
返回当前INSTANCE的标志<br />
SQL&gt; select userenv('instance') from dual;</p>
<p>USERENV('INSTANCE')<br />
-------------------<br />
1<br />
LANGUAGE<br />
返回当前环境变量<br />
SQL&gt; select userenv('language') from dual;</p>
<p>USERENV('LANGUAGE')<br />
----------------------------------------------------<br />
SIMPLIFIED CHINESE_CHINA.ZHS16GBK<br />
LANG<br />
返回当前环境的语言的缩写<br />
SQL&gt; select userenv('lang') from dual;</p>
<p>USERENV('LANG')<br />
----------------------------------------------------<br />
ZHS<br />
TERMINAL<br />
返回用户的终端或机器的标志<br />
SQL&gt; select userenv('terminal') from dual;</p>
<p>USERENV('TERMINA<br />
----------------<br />
GAO<br />
VSIZE(X)<br />
返回X的大小(字节)数<br />
SQL&gt; select vsize(user),user from dual;</p>
<p>VSIZE(USER) USER<br />
----------- ------------------------------<br />
6 SYSTEM<br />
60.AVG(DISTINCT|ALL)<br />
all表示对所有的值求平均值,distinct只对不同的值求平均值<br />
SQLWKS&gt; create table table3(xm varchar(8),sal number(7,2));<br />
语句已处理。<br />
SQLWKS&gt; insert into table3 values('gao',1111.11);<br />
SQLWKS&gt; insert into table3 values('gao',1111.11);<br />
SQLWKS&gt; insert into table3 values('zhu',5555.55);<br />
SQLWKS&gt; commit;</p>
<p>SQL&gt; select avg(distinct sal) from gao.table3;</p>
<p>AVG(DISTINCTSAL)<br />
----------------<br />
3333.33</p>
<p>SQL&gt; select avg(all sal) from gao.table3;</p>
<p>AVG(ALLSAL)<br />
-----------<br />
2592.59</p>
<p>61.MAX(DISTINCT|ALL)<br />
求最大值,ALL表示对所有的值求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次<br />
SQL&gt; select max(distinct sal) from scott.emp;</p>
<p>MAX(DISTINCTSAL)<br />
----------------<br />
5000</p>
<p>62.MIN(DISTINCT|ALL)<br />
求最小值,ALL表示对所有的值求最小值,DISTINCT表示对不同的值求最小值,相同的只取一次<br />
SQL&gt; select min(all sal) from gao.table3;</p>
<p>MIN(ALLSAL)<br />
-----------<br />
1111.11</p>
<p>63.STDDEV(distinct|all)<br />
求标准差,ALL表示对所有的值求标准差,DISTINCT表示只对不同的值求标准差<br />
SQL&gt; select stddev(sal) from scott.emp;</p>
<p>STDDEV(SAL)<br />
-----------<br />
1182.5032</p>
<p>SQL&gt; select stddev(distinct sal) from scott.emp;</p>
<p>STDDEV(DISTINCTSAL)<br />
-------------------<br />
1229.951</p>
<p>64.VARIANCE(DISTINCT|ALL) 求协方差</p>
<p>SQL&gt; select variance(sal) from scott.emp;</p>
<p>VARIANCE(SAL)<br />
-------------<br />
1398313.9</p>
<p>65.GROUP BY 主要用来对一组数进行统计<br />
SQL&gt; select deptno,count(*),sum(sal) from scott.emp group by deptno;</p>
<p>DEPTNO COUNT(*) SUM(SAL)<br />
--------- --------- ---------<br />
10 3 8750<br />
20 5 10875<br />
30 6 9400</p>
<p>66.HAVING 对分组统计再加限制条件<br />
SQL&gt; select deptno,count(*),sum(sal) from scott.emp group by deptno having nt(*)&gt;=5;</p>
<p>DEPTNO COUNT(*) SUM(SAL)<br />
--------- --------- ---------<br />
20 5 10875<br />
30 6 9400<br />
SQL&gt; select deptno,count(*),sum(sal) from scott.emp having count(*)&gt;=5 group by tno ;</p>
<p>DEPTNO COUNT(*) SUM(SAL)<br />
--------- --------- ---------<br />
20 5 10875<br />
30 6 9400</p>
<p>67.ORDER BY 用于对查询到的结果进行排序输出<br />
SQL&gt; select deptno,ename,sal from scott.emp order by deptno,sal desc;</p>
<p>DEPTNO ENAME SAL<br />
--------- ---------- ---------<br />
10 KING 5000<br />
10 CLARK 2450<br />
10 MILLER 1300<br />
20 SCOTT 3000<br />
20 FORD 3000<br />
20 JONES 2975<br />
20 ADAMS 1100<br />
20 SMITH 800<br />
30 BLAKE 2850<br />
30 ALLEN 1600<br />
30 TURNER 1500<br />
30 WARD 1250<br />
30 MARTIN 1250<br />
30 JAMES 950<br />
</p>
<img src ="http://www.blogjava.net/lizhuxin/aggbug/221961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lizhuxin/" target="_blank">☆</a> 2008-08-14 12:47 <a href="http://www.blogjava.net/lizhuxin/articles/221961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库原理学习笔记(oracle下练习)</title><link>http://www.blogjava.net/lizhuxin/articles/221960.html</link><dc:creator>☆</dc:creator><author>☆</author><pubDate>Thu, 14 Aug 2008 04:46:00 GMT</pubDate><guid>http://www.blogjava.net/lizhuxin/articles/221960.html</guid><wfw:comment>http://www.blogjava.net/lizhuxin/comments/221960.html</wfw:comment><comments>http://www.blogjava.net/lizhuxin/articles/221960.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lizhuxin/comments/commentRss/221960.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lizhuxin/services/trackbacks/221960.html</trackback:ping><description><![CDATA[数据库原理学习笔记(oracle下练习)：<br />
<br />
<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL原理学习笔记</p>
<p>1) 向数据库中插入多条记录<br />
INSERT INTO TABLE_NAME(colum1,colum2,colum3)<br />
SELECT t.colum1,t.colum2,t.colum3<br />
from TABLE_NAME2 t <br />
where ...; </p>
<p><br />
2) 向数据库中插入一条记录<br />
INSERT INTO TABLE_NAME(id,name,sex)<br />
VALUES(myId,myNAme,mySex)</p>
<p>3)修改数据库中的数据<br />
&nbsp; UPDATE table<br />
&nbsp;&nbsp; SET newvalue<br />
&nbsp;&nbsp; WHERE criteria;<br />
&nbsp;&nbsp; table 表名，该表包含了要修改的数据。 <br />
&nbsp;&nbsp; newvalue 表达式，该表达式确定将要插入到已更新记录的特定字段内的值。 <br />
&nbsp;&nbsp; criteria 表达式，用来确定将更新哪些记录。只有满足该表达式的记录才会被更新。<br />
&nbsp; 例如：update&nbsp; student0136<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set stdentsex = 'a'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where studentId ='1';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select * from&nbsp; student0136</p>
<p><br />
4)删除数据库中的记录<br />
DELETE FROM 表名称 WHERE 条件</p>
<p>DELETE FROM table_name<br />
WHERE column_name = some_value</p>
<p>可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的：<br />
DELETE FROM table_name<br />
或者：DELETE * FROM table_name<br />
truncate table table_name</p>
<p>&nbsp;</p>
<p>数据库查询语句</p>
<p>1) 查询出info_emp中所有信息<br />
&nbsp;select * from info_emp<br />
2) 查询info_emp中有效的员工信息<br />
&nbsp;select * from info_emp where is_used=&#8216;1&#8217;<br />
3) 查询出用户编号、用户名、性别，并按照用户名升序、性别降序进行排列<br />
&nbsp;select emp_id,emp_name,gender from info_emp<br />
&nbsp; order by emp_name asc,gender desc<br />
&nbsp;&nbsp; asc为升序，desc为降序，数据库默认的为升序排序</p>
<p><br />
1) 给info_emp表命一个别名<br />
&nbsp;select a.* from info_emp a<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表示info_emp表的别名为 a<br />
2) 给info_emp中的字段命一个别名<br />
&nbsp;select a.emp_id emp_no, a.emp_name name<br />
&nbsp;from info_emp a<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此时，字段emp_id的别名为emp_no，字段emp_name的别名为name，info_emp表的别名为 a<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外，还可以有如下写法，中间价格as<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select a.emp_id as emp_no, a.emp_name as name from info_emp a</p>
<p><br />
多表关联操作<br />
1)将info_emp和info_dept进行关联，查询出员工编号、员工名、所属部门(名称)的列表，并按照部门名称和员工姓名进行排序</p>
<p>&nbsp;&nbsp;&nbsp; select a.id,a.name,b.name form info_emp a,info_dept b<br />
&nbsp;&nbsp;&nbsp; where a.deptId = b.deptId <br />
&nbsp;&nbsp;&nbsp; order by b.name,a.name</p>
<p><br />
左外连接<br />
SELECT * FROM bb A<br />
LEFT JOIN bbb C ON A.NAME1 = c.NAME<br />
或<br />
select * from bb a,bbb b<br />
where a.NAME1=b.NAME(+)</p>
<p>右外连接<br />
SELECT *<br />
&nbsp; FROM bb A<br />
right JOIN bbb C ON A.NAME1 = c.NAME<br />
或<br />
select * from bb a,bbb b<br />
where a.NAME1(+)=b.NAME</p>
<p>全外连接<br />
SELECT * FROM bb A<br />
full JOIN bbb C ON A.NAME1 = c.NAME</p>
<p>其他sql<br />
1) 返回前N行数据<br />
&nbsp;select * from info_emp where rownum &lt; 10 <br />
&nbsp;表示返回前9条的数据，rownum是数据库中的关键字</p>
<p>2) 去掉重复值：<br />
&nbsp; select distinct dept_id from info_emp<br />
&nbsp; 表示去掉字段dept_id有重复的，只返回的结果中只保留一条记录。</p>
<p>3) 数据库模糊查询<br />
&nbsp; select * from info_emp where emp_name like '张%'</p>
<p>集合函数的应用<br />
1) 函数COUNT()用来统计一个表中有多少条记录。<br />
&nbsp;&nbsp; 例如：统计info_emp中员工的数量<br />
&nbsp;select count(*) emp_nums from info_emp;</p>
<p>2) 函数AVG()可以返回一个字段中所有值的平均值。<br />
&nbsp; 注意：函数AVG()只能对数值型字段使用。这个函数在计算平均值时也忽略空值。<br />
&nbsp; </p>
<p>3) 计算字段值的和使用函数SUM()。<br />
&nbsp;&nbsp; 注意：函数SUM()的返回值代表某个字段中所有值的总和。<br />
&nbsp;&nbsp; 例如：统计某个部门员工的基本工资总额<br />
&nbsp;&nbsp;&nbsp; select sum(a.salary_money) total_money<br />
&nbsp;from info_salary a, info_emp b<br />
&nbsp;where a.emp_id = b.emp_id and a.item_id ='00' and a.dept_id = '001' ;</p>
<p>4) 函数MAX()和函数MIN()分别用于返回最大值和最小值<br />
&nbsp; 注意：函数MIN()返回一个字段的所有值中的最小值。如果字段是空的，函数MIN()返回空值。</p>
<p>创建一张表<br />
create table bbbb(<br />
&nbsp;stuId varchar2(20) not null,<br />
&nbsp;sex number,<br />
&nbsp;constraint&nbsp; PK_STU_ID primary key(stuId) constraint table_name primary key()<br />
);<br />
insert into bbbb<br />
values('20044246','100')</p>
<p>删除一张表<br />
drop table bbbb</p>
<p>修改表的名称<br />
alter table result013 rename to result0136;<br />
select * from result0136</p>
<p>向表格中增加一列<br />
alter table result0136 add clollge varchar2(20); <br />
UPDATE result0136<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET clollge= 'jsj' <br />
select * from result0136<br />
where clollge='jsj'</p>
<p>修改列的类型<br />
alter table result0136 modify clollge&nbsp; varchar2(32)；</p>
<p>修改列的名称<br />
alter table result0136 rename column clollge to college;<br />
select * from&nbsp; result0136</p>
<p>删除一列<br />
alter table result0136 drop column college;<br />
select * from&nbsp; result0136</p>
<p>集合函数的使用<br />
select b.techerid 老师编号,<br />
sum(b.xueshi) 总学时,sum(b.xuefen) 总学分, min(b.xueshi) 最小学时, min(b.xuefen)最小学分,<br />
max(b.xueshi)最大学时,max(b.xuefen) 最大学分<br />
from couser0136 b<br />
group by b.techerid</p>
<p>查找前2条数据<br />
select * from couser0136<br />
&nbsp;where rownum &lt; 3<br />
模糊查询<br />
select *<br />
&nbsp;from couser0136<br />
&nbsp;where xueshi like '8%'</p>
<p>count函数的使用<br />
select count(a.couserid)<br />
&nbsp;from couser0136 a<br />
&nbsp;where xueshi like '8%'</p>
<p>avg函数使用<br />
select avg(a.xueshi) 平均学时<br />
&nbsp;from couser0136 a</p>
<p>sum求和函数<br />
select sum(a.xueshi) 总学时 from couser0136 a</p>
<p>min和max函数的使用<br />
select min(a.xueshi) 最小学时,max(a.xueshi) 最大学时 from couser0136 a</p>
<p><br />
case....when的使用</p>
<p>select couserid, cousername, xuefen ,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when xueshi &gt;= 90 then 'a'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when xueshi &gt;=80 then 'b'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when xueshi &gt;=40 then 'c'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else 'd' end xueshi<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from couser0136<br />
其中( case when xueshi &gt;= 90 then 'a' when xueshi &gt;=80 then 'b' when xueshi &gt;=40 then 'c'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else 'd' end )相当一个字段。</p>
<p>decode函数的使用<br />
select couserid, cousername, xuefen ,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when xueshi &gt;= 90 then 'a'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when xueshi &gt;=80 then 'b'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when xueshi &gt;=40 then 'c'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else 'd' end xueshi,decode(techerid,'10','100','1') techerid<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from couser0136<br />
&nbsp;&nbsp; 如果techerid = 10，输出100，否则输出1，techerid为数据库中的字段。</p>
<p><br />
select decode(a.techerid,10,'100',11,'101',12,'102',13,'103') techerid<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from couser0136 a<br />
&nbsp;&nbsp; 如果techerid=10，输出100，techerid=11，输出101，techerid=12，输出102，techerid=13，输出103，</p>
<p>select decode(a.techerid,11,'100',12,'101',13,'102','103') techerid<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from couser0136 a<br />
&nbsp;如果techerid=11，输出100，techerid=12，输出101，techerid=13，输出102，其余的输出103</p>
<p><br />
把表格中的列相加：<br />
select nvl(aaa,0)+nvl(bbb,0)+nvl(ccc,0)+ nvl(ddd,0) from AAA</p>
<p><br />
创建索引<br />
create index idx_stuId on result0136 (studentid);<br />
删除索引<br />
drop index idx_stuId </p>
<p><br />
分析函数row_number()的使用：<br />
按dep_id分组，然后按emp_id给每组降序排序。<br />
select * from (select dep_id,emp_id,phone,row_number() over(partition by dep_id order by emp_id desc) rw from info_emp0136 )<br />
&nbsp;where rw=1;</p>
<p><br />
分析函数rollup的使用：</p>
<p>select nvl(dep_id,'合计') dep_id,sum(phone) phone<br />
from info_emp0136<br />
group by rollup(dep_id)</p>
<p>select case<br />
&nbsp; when a.dep_id is null then '合计'<br />
&nbsp; else a.dep_id end dep_id,a.phone<br />
&nbsp;from<br />
( select dep_id,sum(phone) phone from info_emp0136<br />
&nbsp;&nbsp; group by rollup(dep_id)) a</p>
<p>select dep_id,sum(phone) phone from info_emp0136<br />
group by dep_id<br />
union all<br />
select '合计' dep_id,sum(phone) phone<br />
from&nbsp;&nbsp; info_emp0136</p>
<p>分析函数cube的使用：<br />
select dep_id,degree_id,sum(phone) from info_emp0136<br />
&nbsp;&nbsp; group by cube(dep_id,degree_id)<br />
&nbsp;&nbsp; order by dep_id, degree_id nulls last&nbsp; <br />
//从多维的角度考虑</p>
<p>lag和lead函数的使用<br />
select emp_id,item_id,salary_money,<br />
&nbsp; lag(salary_money,1,0) over(partition by emp_id order by item_id) a,<br />
&nbsp; lead(salary_money,1,0) over (partition by emp_id order by item_id ) b<br />
&nbsp; from info_salary_ly</p>
<p>first_value分析函数的使用<br />
&nbsp;select bill_month,area_code,sum(local_fare) local_fare,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; first_value(area_code)over (order by sum(local_fare) desc<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rows unbounded preceding ) firstval,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; first_value(area_code)over(order by sum(local_fare) asc<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rows unbounded preceding ) lastval from t_t<br />
&nbsp;&nbsp;&nbsp; group by bill_month,area_code</p>
<p>移动分析函数su,avg,max,min的使用<br />
&nbsp;select area_code,bill_month, local_fare,<br />
&nbsp;&nbsp;&nbsp; sum(local_fare) over ( partition by area_code<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order by to_number(bill_month)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range between 1 preceding and 1 following ) "3month_sum",<br />
&nbsp;&nbsp;&nbsp; avg(local_fare) over ( partition by area_code<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order by to_number(bill_month)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range between 1 preceding and 1 following ) "3month_avg",<br />
&nbsp;&nbsp;&nbsp; max(local_fare) over ( partition by area_code<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order by to_number(bill_month)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range between 1 preceding and 1 following ) "3month_max",<br />
&nbsp;&nbsp;&nbsp; min(local_fare) over ( partition by area_code<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order by to_number(bill_month)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range between 1 preceding and 1 following ) "3month_min"<br />
&nbsp;&nbsp; from ( select area_code,bill_month,sum(local_fare) local_fare <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from t_t group by area_code,bill_month )</p>
<img src ="http://www.blogjava.net/lizhuxin/aggbug/221960.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lizhuxin/" target="_blank">☆</a> 2008-08-14 12:46 <a href="http://www.blogjava.net/lizhuxin/articles/221960.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>