??xml version="1.0" encoding="utf-8" standalone="yes"?>
2 '/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()',8081))
3 /
SQL> commit;
Commit complete.
SQL> exec dbms_xdb.cfg_refresh;
SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),
2 '/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()',2111))
3 /
Call completed.
SQL> commit;
Commit complete.
SQL> exec dbms_xdb.cfg_refresh;
表自复制
INSERT INTO 表名 Q列,...Q?SELECT * FROM 表名Q?br />
如:(x)
INSERT INTO students (sid,sname,sage,...) SELECT * FROM studentsQ?br />
SET命o(h)(常用): SET pȝ变量 ?br />
ARRAY[SIZE]
{20d|n}
SQL*PLUS一ơ从数据库获取的行数,有效gؓ(f)1?000.
LIN[ESIZE]
{80d|n}
SQL*PLUS一行显C的字符L,它还控制对准中心的文本和叛_齐文?
PAGES[IZE]
{14d|n}
从顶部标题至늻束之间的行数.
SQLN[UMBER]
{OFF|ONd}
为SQL命o(h)和PL/SQL块的W二行和后行设|提C?
TIMI[NG]
{OFFd|ON}
昄每一个运行的SQL命o(h)或PL/SQL块的旉l计.
ORACLE保留关键?/strong>
ACCESS ADD ALL ALTER AND ANY AS ASC AUDIT BETWEEN BY CHAR CHECK CLUSTER COLUMN COMMENT
COMPRESS CONNECT CREATE CURRENT DATE DECIMAL DEFAULT DELETE DESC DISTINCT DROP ELSE EXCLUSIVE
EXISTS FILE FLOAT FOR FROM GRANT GROUP HAVING IDENTIFIED IMMEDIATE IN INCREMENT INDEX INITIAL
INSERT INTEGER INTERSECT INTO IS LEVEL LIKE LOCK LONG MAXEXTENTS MINUS MLSLABEL MODE MODIFY
NOAUDIT NOCOMPRESS NOT NOWAIT NULL NUMBER OF OFFLINE ON ONLINE OPTION OR ORDER PCTFREE PRIOR
PRIVILEGES PUBLIC RAW RENAME RESOURCE REVOKE ROW ROWID ROWNUM ROWS SELECT SESSION SET
SHARE SIZE SMALLINT START SUCCESSFUL SYNONYM SYSDATE TABLE THEN TO TRIGGER UID UNION UNIQUE
UPDATE USER VALIDATE VALUES VARCHAR VARCHAR2 VIEW WHENEVER WHERE WITH
TO_DATE与TO_CHAR
1.在用Oracle的to_date函数来做日期转换Ӟ很多JavaE序员也怼(x)和我一P直觉的采?#8220;yyyy-MM-dd HH:mm:ss”的格式作为格式进行{换,但是在Oracle中会(x)引v错误Q?#8220;ORA 01810 格式代码出现两次”?br />
如:(x)select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;
原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟?br />
select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;
2.另要?4时的Ş式显C出来要用HH24
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分?br />
select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm?x)显C月?/p>
JDBCq接Oracle
1.本机q接Q控刉?理工具-数据?(ODBC)d相应的Oracle的DNS服务QDNSnameQ;
加蝲驱动QClass.forName("sun.jdbc.odbc.JdbcOdbcDriver");
建立q接QDriverManager.getConnection("jdbc:odbc:DNSname","username","password");
2.URLq接Q?br />
加蝲驱动QClass.forName("oracle.jdbc.driver.OracleDriver");
Q此驱动一般在Oracle安装目录内相应server\jdbc\lib目录下能扑ֈQ;
建立q接QDriverManager.getConnection("jdbc:oracle:thin:@url:port:OSname","username","password");
■联?UNION)
UNION(联合)q算
UNIONq算q回所有由M查询选择的行。用UNIONq算从多表返回所有行Q但除去M重复的行?br />
・原?br />
:: 被选择的列数和列的数据cd必须是与所有用在查询中的SELECT语句一致。列的名字不必相同?br />
:: 联合q算在所有被选择的列上进行?br />
:: 在做重复(g)查的时候不忽略I?NULL)倹{?br />
:: INq算有比U(ku)NIONq算高的优先U?br />
:: 在默认情况下Q输ZSELECT子句的第一列的升序排序?/p>
■全联合(UNION ALL)
q算从两个查询返回包括所有重复值的l果
原则
:: 和联合不同,重复的行不被qo(h)Qƈ且默认情况下输出不排序?br />
:: 不能使用DISTINCT关键字?br />
注:(x)除了上面的两点,UNION ALL的原则与UNION相同?/p>
■相?INTERSECT)
用相交运返回多个查询中所有的公共行?br />
原则
:: 在查询中?SELECT 语句选择的列数和数据cd必须与在查询中所使用的所有的 SELTCT 语句中的 一P但列的名字不必一栗?br />
:: 颠倒相交的表的排序不改变结果?br />
:: 怺不忽略空倹{?/p>
■相?MINUS)
用相减运返回由W一个查询返回的行,那些行不出现在第二个查询?(W一个SELECT语句减第二个SELECT语句)?br />
原则
:: 在查询中被SELECT语句选择的列数和数据cd必须与在查询中所使用的所有的SELTCT语句中的一P但列的名字不必一栗?br />
:: 对于MINUSq算Q在WHERE子句中所有的列都必须在SELECT子句中?br />
?br />
※集合运的原则
:: 在两个SELECT列表中的表达式必d数目上和数据cd上相匚w
:: 可以用圆括号改变执行的顺?br />
:: ORDER BY子句Q?br />
–只能出现在语句的最?br />
–从第一个SELECT语句接收列名、别名,或者位|记?br />
:: 集合q算可以用在子查询中?/p>
■Oracle 服务器和集合q算
:: 除了UNION ALLQ重复行自动被清?br />
:: 在结果中的列名是W一个查询中出现的列?br />
:: 除了UNION ALL(无排?Q默认情况下按升序顺序输?br />
在一个复合查询的各查询组成部分的选择列表中相应的表达式必d数目和类型上匚w。如果查询的l成部分选择字符数据Q返回值的数据cd被如下决定:(x)
:: 如果查询选择的数据类型的gؓ(f)CHARQ那么,q回值的数据cd也ؓ(f)CHAR?br />
:: 如果查询选择的两者之一或两者的数据cdgؓ(f)VARCHAR2Q那么,q回值的数据cd也是VARCHAR2?/p>
你可能需要提?qing),输出以第一个SELECT子句的第一列的升序被排序,然后是第二列Q等{?/p>
■匹配SELECT语句 //凑数
eg:
SELECT department_id, TO_NUMBER(null) location, hire_date
FROM employees
UNION
SELECT department_id, location_id, TO_DATE(null)
FROM departments;
DEPARTMENT_ID LOCATION HIRE_DATE
------------- ---------- ----------
80 21-4?-00
90 1700
90 17-6?-87
90 21-9?-89
90 13-1?-93
100 1700
100 16-8?-94
100 17-8?-94
100 28-9?-97
100 30-9?-97
100 07-3?-98
匚wSELECT语句
׃在两个查询的SELECT列表中的表达式必d数量上匹配,你可以用虚拟列和{换函数数据类型来满该规则。在qȝ片中使用了虚拟列Q在W一个查询中的TO_NUMBER函数被用以匹配第二个查询中返回的LOCATION_ID列的数字数据cdQ同样地Q第二个查询中的TO_DATE函数被用于匹?W一个查询返回的日期数据cd?/p>
DIY部落(http://www.diybl.com/course/7_databases/oracle/oraclexl/20090825/171870.html)
A.用户角色必须要有用户操作权限才可以常见用P例如sys,systemQ?
B.1.创徏一个用P(x)CREATE USER username IDENTIFIED BY passwordQ?br />
2.删除一个用P(x)DROP USER username CASCADEQ?-U联删除此用L(fng)x?br />
3.更改密码QALTER USER username IDENTIFIED BY password;
4.锁定用户QALTER USER username ACCOUNT LOCK;
5.解锁用户QALTER USER username ACCOUNT UNLOCK;
C.1.GRANT privilege... ON object... TO {public|group|user}
赋予 权利 操作对象 l?nbsp; |用户
GRANT roll. TO user
赋予 角色l?用户 --角色Qconnect|resource|dba...
2.REVOKE privilege... ON object... FROM {public|group|user}
取消 权利 操作对象 ?nbsp; |用户
REVOKE roll. FROM user
撤销 角色 ?nbsp; 用户
D.1.登陆配置文g创徏(错误三次锁定两天)
CREATE PROFILE pname LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 2;
2.l予用户此约?br />
ALTER USER user PROFILE pname;
2.CHR
l出整数,q回对应的字W?
SQL> select chr(54740) zhao,chr(65) chr65 from dual;
ZH C
-- -
?A
3.CONCAT
q接两个字符?
SQL> select concat(’010-’,’88888888’)||’?3’ 高乾竞电(sh)?from dual;
高乾竞电(sh)?
----------------
010-88888888?3
4.INITCAP
q回字符串ƈ字W串的第一个字母变为大?
SQL> select initcap(’smith’) upp from dual;
UPP
-----
Smith
5.INSTR(C1,C2,I,J)
在一个字W串中搜索指定的字符,q回发现指定的字W的位置;
C1 被搜索的字符?
C2 希望搜烦(ch)的字W串
I 搜烦(ch)的开始位|?默认?
J 出现的位|?默认?
SQL> select instr(’oracle traning’,’ra’,1,2) instring from dual;
INSTRING
---------
9
6.LENGTH
q回字符串的长度;
SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst;
NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL))
------ ------------ ---------------- ------------ --------- --------------------
高乾?3 北京?jng)v锭区 6 9999.99 7
7.LOWER
q回字符?q将所有的字符写
SQL> select lower(’AaBbCcDd’)AaBbCcDd from dual;
AABBCCDD
--------
aabbccdd
8.UPPER
q回字符?q将所有的字符大写
SQL> select upper(’AaBbCcDd’) upper from dual;
UPPER
--------
AABBCCDD
9.RPAD和LPAD(_脓(chung)字符)
RPAD 在列的右边粘贴字W?
LPAD 在列的左边粘贴字W?
SQL> select lpad(rpad(’gao’,10,’*’),17,’*’)from dual;
LPAD(RPAD(’GAO’,1
-----------------
*******gao*******
不够字符则用*来填?/p>
10.LTRIM和RTRIM
LTRIM 删除左边出现的字W串
RTRIM 删除双出现的字W串
SQL> select ltrim(rtrim(’ gao qian jing ’,’ ’),’ ’) from dual;
LTRIM(RTRIM(’
-------------
gao qian jing
11.SUBSTR(string,start,count)
取子字符?从start开?取count?
SQL> select substr(’13088888888’,3,8) from dual;
SUBSTR(’
--------
08888888
12.REPLACE(’string’,’s1’,’s2’)
string 希望被替换的字符或变?
s1 被替换的字符?
s2 要替换的字符?
SQL> select replace(’he love you’,’he’,’i’) from dual;
REPLACE(’H
----------
i love you
13.SOUNDEX
q回一个与l定的字W串读音相同的字W串
SQL> create table table1(xm varchar(8));
SQL> insert into table1 values(’weather’);
SQL> insert into table1 values(’wether’);
SQL> insert into table1 values(’gao’);
SQL> select xm from table1 where soundex(xm)=soundex(’weather’);
XM
--------
weather
wether
14.TRIM(’s’ from ’string’)
LEADING 剪掉前面的字W?
TRAILING 剪掉后面的字W?
如果不指?默认为空格符
15.ABS
q回指定值的l对?
SQL> select abs(100),abs(-100) from dual;
ABS(100) ABS(-100)
--------- ---------
100 100
16.ACOS
l出反余弦的?
SQL> select acos(-1) from dual;
ACOS(-1)
---------
3.1415927
17.ASIN
l出反正弦的?
SQL> select asin(0.5) from dual;
ASIN(0.5)
---------
.52359878
18.ATAN
q回一个数字的反正切?
SQL> select atan(1) from dual;
ATAN(1)
---------
.78539816
19.CEIL
q回大于或等于给出数字的最整?
SQL> select ceil(3.1415927) from dual;
CEIL(3.1415927)
---------------
4
20.COS
q回一个给定数字的余u
SQL> select cos(-3.1415927) from dual;
COS(-3.1415927)
---------------
-1
21.COSH
q回一个数字反余u?
SQL> select cosh(20) from dual;
COSH(20)
---------
242582598
22.EXP
q回一个数字e的nơ方?
SQL> select exp(2),exp(1) from dual;
EXP(2) EXP(1)
--------- ---------
7.3890561 2.7182818
23.FLOOR
对给定的数字取整?
SQL> select floor(2345.67) from dual;
FLOOR(2345.67)
--------------
2345
24.LN
q回一个数字的Ҏ(gu)?
SQL> select ln(1),ln(2),ln(2.7182818) from dual;
LN(1) LN(2) LN(2.7182818)
--------- --------- -------------
0 .69314718 .99999999
25.LOG(n1,n2)
q回一个以n1为底n2的对?
SQL> select log(2,1),log(2,4) from dual;
LOG(2,1) LOG(2,4)
--------- ---------
0 2
26.MOD(n1,n2)
q回一个n1除以n2的余?
SQL> select mod(10,3),mod(3,3),mod(2,3) from dual;
MOD(10,3) MOD(3,3) MOD(2,3)
--------- -------- ---------
1 0 2
27.POWER
q回n1的n2ơ方?
SQL> select power(2,10),power(3,3) from dual;
POWER(2,10) POWER(3,3)
----------- ----------
1024 27
28.ROUND和TRUNC
按照指定的精度进行舍?
SQL> select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual;
ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)
----------- ------------ ----------- ------------
56 -55 55 -55
29.SIGN
取数字n的符?大于0q回1,于0q回-1,{于0q回0
SQL> select sign(123),sign(-100),sign(0) from dual;
SIGN(123) SIGN(-100) SIGN(0)
--------- ---------- ---------
1 -1 0
30.SIN
q回一个数字的正u?
SQL> select sin(1.57079) from dual;
SIN(1.57079)
------------
1
31.SIGH
q回双曲正u的?
SQL> select sin(20),sinh(20) from dual;
SIN(20) SINH(20)
--------- ---------
.91294525 242582598
32.SQRT
q回数字n的根
SQL> select sqrt(64),sqrt(10) from dual;
SQRT(64) SQRT(10)
--------- ---------
8 3.1622777
33.TAN
q回数字的正切?
SQL> select tan(20),tan(10) from dual;
TAN(20) TAN(10)
--------- ---------
2.2371609 .64836083
34.TANH
q回数字n的双曲正切?
SQL> select tanh(20),tan(20) from dual;
TANH(20) TAN(20)
--------- ---------
1 2.2371609
35.TRUNC
按照指定的精度截取一个数
SQL> select trunc(124.1666,-2) trunc1,trunc(124.16666,2) from dual;
TRUNC1 TRUNC(124.16666,2)
--------- ------------------
100 124.16
36.ADD_MONTHS
增加或减L?
SQL> select to_char(add_months(to_date(’199912’,’yyyymm’),2),’yyyymm’) from dual;
TO_CHA
------
200002
SQL> select to_char(add_months(to_date(’199912’,’yyyymm’),-2),’yyyymm’) from dual;
TO_CHA
------
199910
37.LAST_DAY
q回日期的最后一?
SQL> select to_char(sysdate,’yyyy.mm.dd’),to_char((sysdate)+1,’yyyy.mm.dd’) from dual;
TO_CHAR(SY TO_CHAR((S
---------- ----------
2004.05.09 2004.05.10
SQL> select last_day(sysdate) from dual;
LAST_DAY(S
----------
31-5?-04
38.MONTHS_BETWEEN(date2,date1)
l出date2-date1的月?
SQL> select months_between(’19-12?1999’,’19-3?1999’) mon_between from dual;
MON_BETWEEN
-----------
9
SQL>selectmonths_between(to_date(’2000.05.20’,’yyyy.mm.dd’),to_date(’2005.05.20’,’yyyy.mm.dd’)) mon_betw from dual;
MON_BETW
---------
-60
39.NEW_TIME(date,’this’,’that’)
l出在this时区=other时区的日期和旉
SQL> select to_char(sysdate,’yyyy.mm.dd hh24:mi:ss’) bj_time,to_char(new_time
2 (sysdate,’PDT’,’GMT’),’yyyy.mm.dd hh24:mi:ss’) los_angles from dual;
BJ_TIME LOS_ANGLES
------------------- -------------------
2004.05.09 11:05:32 2004.05.09 18:05:32
40.NEXT_DAY(date,’day’)
l出日期date和星期x之后计算下一个星期的日期
SQL> select next_day(’18-5?2001’,’星期?#8217;) next_day from dual;
NEXT_DAY
----------
25-5?-01
41.SYSDATE
用来得到pȝ的当前日?
SQL> select to_char(sysdate,’dd-mm-yyyy day’) from dual;
TO_CHAR(SYSDATE,’
-----------------
09-05-2004 星期?
trunc(date,fmt)按照l出的要求将日期截断,如果fmt=’mi’表示保留?截断U?
SQL> select to_char(trunc(sysdate,’hh’),’yyyy.mm.dd hh24:mi:ss’) hh,
2 to_char(trunc(sysdate,’mi’),’yyyy.mm.dd hh24:mi:ss’) hhmm from dual;
HH HHMM
------------------- -------------------
2004.05.09 11:00:00 2004.05.09 11:17:00
42.CHARTOROWID
字W数据类型{换ؓ(f)ROWIDcd
SQL> select rowid,rowidtochar(rowid),ename from scott.emp;
ROWID ROWIDTOCHAR(ROWID) ENAME
------------------ ------------------ ----------
AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH
AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN
AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD
AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES
43.CONVERT(c,dset,sset)
源字符?sset从一个语a字符集{换到另一个目的dset字符?
SQL> select convert(’strutz’,’we8hp’,’f7dec’) "conversion" from dual;
conver
------
strutz
44.HEXTORAW
一个十六进制构成的字符串{换ؓ(f)二进?/p>
45.RAWTOHEXT
一个二q制构成的字W串转换为十六进?/p>
46.ROWIDTOCHAR
ROWID数据cd转换为字W类?/p>
47.TO_CHAR(date,’format’)
SQL> select to_char(sysdate,’yyyy/mm/dd hh24:mi:ss’) from dual;
TO_CHAR(SYSDATE,’YY
-------------------
2004/05/09 21:14:41
48.TO_DATE(string,’format’)
字W串转化为ORACLE中的一个日?/p>
49.TO_MULTI_BYTE
字W串中的单字节字W{化ؓ(f)多字节字W?
SQL> select to_multi_byte(’?#8217;) from dual;
TO
--
?/p>
50.TO_NUMBER
给出的字符转换为数?
SQL> select to_number(’1999’) year from dual;
YEAR
---------
1999
51.BFILENAME(dir,file)
指定一个外部二q制文g
SQL>insert into file_tb1 values(bfilename(’lob_dir1’,’image1.gif’));
52.CONVERT(’x’,’desc’,’source’)
x字段或变量的源source转换为desc
SQL> select sid,serial#,username,decode(command,
2 0,’none’,
3 2,’insert’,
4 3,
5 ’select’,
6 6,’update’,
7 7,’delete’,
8 8,’drop’,
9 ’other’) cmd from v$session where type!=’background’;
SID SERIAL# USERNAME CMD
--------- --------- ------------------------------ ------
1 1 none
2 1 none
3 1 none
4 1 none
5 1 none
6 1 none
7 1275 none
8 1275 none
9 20 GAO select
10 40 GAO none
53.DUMP(s,fmt,start,length)
DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2cd的?
SQL> col global_name for a30
SQL> col dump_string for a50
SQL> set lin 200
SQL> select global_name,dump(global_name,1017,8,5) dump_string from global_name;
GLOBAL_NAME DUMP_STRING
------------------------------ --------------------------------------------------
ORACLE.WORLD Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D
54.EMPTY_BLOB()和EMPTY_CLOB()
q两个函数都是用来对大数据类型字D进行初始化操作的函?/p>
55.GREATEST
q回一l表辑ּ中的最大?x较字W的~码大小.
SQL> select greatest(’AA’,’AB’,’AC’) from dual;
GR
--
AC
SQL> select greatest(’?#8217;,’?#8217;,’?#8217;) from dual;
GR
--
?/p>
56.LEAST
q回一l表辑ּ中的最?
SQL> select least(’?#8217;,’?#8217;,’?#8217;) from dual;
LE
--
?/p>
57.UID
q回标识当前用户的唯一整数
SQL> show user
USER ?GAO"
SQL> select username,user_id from dba_users where user_id=uid;
USERNAME USER_ID
------------------------------ ---------
GAO 25
58.USER
q回当前用户的名?
SQL> select user from dual;
USER
------------------------------
GAO
59.USEREVN
q回当前用户环境的信?opt可以?
ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE
ISDBA 查看当前用户是否是DBA如果是则q回true
SQL> select userenv(’isdba’) from dual;
USEREN
------
FALSE
SQL> select userenv(’isdba’) from dual;
USEREN
------
TRUE
SESSION
q回?x)话标?
SQL> select userenv(’sessionid’) from dual;
USERENV(’SESSIONID’)
--------------------
152
ENTRYID
q回?x)话人口标?
SQL> select userenv(’entryid’) from dual;
USERENV(’ENTRYID’)
------------------
0
INSTANCE
q回当前INSTANCE的标?
SQL> select userenv(’instance’) from dual;
USERENV(’INSTANCE’)
-------------------
1
LANGUAGE
q回当前环境变量
SQL> select userenv(’language’) from dual;
USERENV(’LANGUAGE’)
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
LANG
q回当前环境的语a的羃?
SQL> select userenv(’lang’) from dual;
USERENV(’LANG’)
----------------------------------------------------
ZHS
TERMINAL
q回用户的终端或机器的标?
SQL> select userenv(’terminal’) from dual;
USERENV(’TERMINA
----------------
GAO
VSIZE(X)
q回X的大?字节)?
SQL> select vsize(user),user from dual;
VSIZE(USER) USER
----------- ------------------------------
6 SYSTEM
60.AVG(DISTINCT|ALL)
all表示Ҏ(gu)有的值求q_?distinct只对不同的值求q_?
SQLWKS> create table table3(xm varchar(8),sal number(7,2));
语句已处理?
SQLWKS> insert into table3 values(’gao’,1111.11);
SQLWKS> insert into table3 values(’gao’,1111.11);
SQLWKS> insert into table3 values(’zhu’,5555.55);
SQLWKS> commit;
SQL> select avg(distinct sal) from gao.table3;
AVG(DISTINCTSAL)
----------------
3333.33
SQL> select avg(all sal) from gao.table3;
AVG(ALLSAL)
-----------
2592.59
61.MAX(DISTINCT|ALL)
求最大?ALL表示Ҏ(gu)有的值求最大?DISTINCT表示对不同的值求最大?相同的只取一?
SQL> select max(distinct sal) from scott.emp;
MAX(DISTINCTSAL)
----------------
5000
62.MIN(DISTINCT|ALL)
求最?ALL表示Ҏ(gu)有的值求最?DISTINCT表示对不同的值求最?相同的只取一?
SQL> select min(all sal) from gao.table3;
MIN(ALLSAL)
-----------
1111.11
63.STDDEV(distinct|all)
求标准差,ALL表示Ҏ(gu)有的值求标准?DISTINCT表示只对不同的值求标准?
SQL> select stddev(sal) from scott.emp;
STDDEV(SAL)
-----------
1182.5032
SQL> select stddev(distinct sal) from scott.emp;
STDDEV(DISTINCTSAL)
-------------------
1229.951
64.VARIANCE(DISTINCT|ALL)
求协方差
SQL> select variance(sal) from scott.emp;
VARIANCE(SAL)
-------------
1398313.9
65.GROUP BY
主要用来对一l数q行l计
SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno;
DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
10 3 8750
20 5 10875
30 6 9400
66.HAVING
对分l统计再加限制条?
SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno having count(*)>=5;
DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
20 5 10875
30 6 9400
SQL> select deptno,count(*),sum(sal) from scott.emp having count(*)>=5 group by deptno ;
DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
20 5 10875
30 6 9400
67.ORDER BY
用于Ҏ(gu)询到的结果进行排序输?
SQL> select deptno,ename,sal from scott.emp order by deptno,sal desc;
DEPTNO ENAME SAL
--------- ---------- ---------
10 KING 5000
10 CLARK 2450
10 MILLER 1300
20 SCOTT 3000
20 FORD 3000
20 JONES 2975
20 ADAMS 1100
20 SMITH 800
30 BLAKE 2850
30 ALLEN 1600
30 TURNER 1500
30 WARD 1250
30 MARTIN 1250
30 JAMES 950
单行函数
l函?
本文讨论如何利用单行函C?qing)用规则?/span>
SQL中的单行函数
SQL和PL/SQL中自带很多类型的函数Q有字符、数字、日期、{换、和混合型等多种函数用于处理单行数据Q因此这些都可被l称为单行函数。这些函数均可用于SELECT,WHERE、ORDER BY{子句中Q例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX{单行函数?br />
SELECT ename,TO_CHAR(hiredate,''day,DD-Mon-YYYY'')FROM empWhere UPPER(ename) Like ''AL%''ORDER BY SOUNDEX(ename)
单行函数也可以在其他语句中用,如update的SET子句QINSERT的VALUES子句QDELET的WHERE子句,认证考试特别注意在SELECT语句中用这些函敎ͼ所以我们的注意力也集中在SELECT语句中?/span>
NULL和单行函?/span>
在如何理解NULL上开始是很困隄Q就是一个很有经验的Z然对此感到困惑。NULLDCZ个未知数据或者一个空|术操作W的M一个操作数为NULL|l果均ؓ(f)提个NULL?q个规则也适合很多函数Q只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了NULL参数时能够返回非NULL倹{在q些中NVL函数时最重要的,因ؓ(f)他能直接处理NULL|NVL有两个参敎ͼ(x)NVL(x1,x2),x1和x2都式表达式,当x1为null时返回X2,否则q回x1?/span>
下面我们看看emp数据表它包含了薪水、奖金两,需要计ȝ补偿
column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2
不是单的薪水和奖金加v来就可以了,如果某一行是null值那么结果就是nullQ比如下面的例子Q?br />
update empset salary=(salary+bonus)*1.1
q个语句中,雇员的工资和奖金都将更新Z个新的|但是如果没有奖金Q即 salary + null,那么׃(x)得出错误的结论,q个时候就要用nvl函数来排除null值的影响?br />
所以正的语句是:(x)
update empset salary=(salary+nvl(bonus,0)*1.1
单行字符串函?/span>
单行字符串函数用于操作字W串数据Q他们大多数有一个或多个参数Q其中绝大多数返回字W串
ASCII()
c1是一字符Ԍq回c1W一个字母的ASCII码,他的逆函数是CHR()
SELECT ASCII(''A'') BIG_A,ASCII(''z'') BIG_z FROM empBIG_A BIG_z65 122
CHR(QiQ?[NCHAR_CS]
i是一个数字,函数q回十进制表C的字符
select CHR(65),CHR(122),CHR(223) FROM empCHR65 CHR122 CHR223A z B
CONCAT(,)
c1,c2均ؓ(f)字符Ԍ函数c2q接到c1的后面,如果c1为null,返回c2.如果c2为null,则返回c1Q如果c1、c2都ؓ(f)nullQ则q回null。他和操作符||q回的结果相?br />
select concat(''slobo '',''Svoboda'') username from dualusernameslobo Syoboda
INITCAP()
c1Z字符丌Ӏ函数将每个单词的第一个字母大写其它字母小写返回。单词由I格Q控制字W,标点W号限制?br />
select INITCAP(''veni,vedi,vici'') Ceasar from dualCeasarVeni,Vedi,Vici
INSTR(,[,QiQ[,]])
c1,c2均ؓ(f)字符Ԍi,j为整数。函数返回c2在c1中第jơ出现的位置Q搜索从c1的第i个字W开始。当没有发现需要的字符时返?,如果i敎ͼ那么搜烦(ch)从叛_左进行,但是位置的计还是从左到叻Ii和j的缺省gؓ(f)1.
select INSTR(''Mississippi'',''i'',3,3) from dualINSTR(''MISSISSIPPI'',''I'',3,3)11select INSTR(''Mississippi'',''i'',-2,3) from dualINSTR(''MISSISSIPPI'',''I'',3,3)2
INSTRB(,[,i[,j])
与INSTRQ)(j)函数一P只是他返回的是字节,对于单字节INSTRB(){于INSTR()
LENGTH()
c1为字W串Q返回c1的长度,如果c1为nullQ那么将q回null倹{?br />
select LENGTH(''Ipso Facto'') ergo from dualergo10
LENGTHb()
与LENGTH()一Pq回字节.
lower()
q回c的小写字W,l常出现在where子串?br />
select LOWER(colorname) from itemdetail WHERE LOWER(colorname) LIKE ''%white%''COLORNAMEWinterwhite
LPAD(,QiQ[,])
c1,c2均ؓ(f)字符Ԍi为整数。在c1的左侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ(f)单空|参见RPAD?br />
select LPAD(answer,7,'''') padded,answer unpadded from question;PADDED UNPADDED Yes YesNO NOMaybe maybe
LTRIM(,)
把c1中最左边的字W去掉,使其W一个字W不在c2中,如果没有c2Q那么c1׃?x)改变?br />
select LTRIM(''Mississippi'',''Mis'') from dualLTRppi
RPAD(,QiQ[,])
在c1的右侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ(f)单空?其他与LPAD怼
RTRIM(,)
把c1中最双的字W去掉,使其W后一个字W不在c2中,如果没有c2Q那么c1׃?x)改变?/span>
REPLACE(,[,])
c1,c2,c3都是字符Ԍ函数用c3代替出现在c1中的c2后返回?br />
select REPLACE(''uptown'',''up'',''down'') from dualREPLACEdowntown
STBSTR(,QiQ[,])
c1Z字符Ԍi,j为整敎ͼ从c1的第i位开始返回长度ؓ(f)j的子字符Ԍ如果j为空Q则直到串的N?br />
select SUBSTR(''Message'',1,4) from dualSUBSMess
SUBSTRB(,QiQ[,])
与SUBSTR大致相同Q只是I,J是以字节计算?/span>
SOUNDEX()
q回与c1发音怼的词
select SOUNDEX(''dawes'') Dawes SOUNDEX(''daws'') Daws, SOUNDEX(''dawson'') from dualDawes Daws DawsonD200 D200 D250
TRANSLATE(,,)
c1中与c2相同的字W以c3代替
select TRANSLATE(''fumble'',''uf'',''ar'') test from dualTEXTramble
TRIM([[]] from c3)
c3串中的第一个,最后一个,或者都删除?br />
select TRIM('' space padded '') trim from dual TRIMspace padded
UPPER()
q回c1的大写,常出现where子串?br />
select name from dual where UPPER(name) LIKE ''KI%''NAMEKING
单行数字函数
单行数字函数操作数字数据Q执行数学和术q算。所有函数都有数字参数ƈq回数字倹{所有三角函数的操作数和值都是弧度而不是角度,oracle没有提供内徏的弧度和角度的{换函数?/span>
ABS()
q回n的绝对?/span>
ACOS()
反余玄函敎ͼq回-1?之间的数。n表示弧度
select ACOS(-1) pi,ACOS(1) ZERO FROM dualPI ZERO3.14159265 0
ASIN()
反正玄函敎ͼq回-1?Qn表示弧度
ATAN()
反正切函敎ͼq回n的反正切|n表示弧度?/span>
CEIL()
q回大于或等于n的最整数?/span>
COS()
q回n的余玄|n为弧?/span>
COSH()
q回n的双曲余玄|n 为数字?br />
select COSH(<1.4>) FROM dualCOSH(1.4)2.15089847
EXP()
q回e的nơ幂Qe=2.71828183.
FLOOR()
q回于{于N的最大整数?/span>
LN()
q回N的自然对敎ͼN必须大于0
LOG(,)
q回以n1为底n2的对?/span>
MOD()
q回n1除以n2的余敎ͼ
POWER(,)
q回n1的n2ơ方
ROUND(,)
q回舍入数点右边n2位的n1的|n2的缺省gؓ(f)0Q这回将数Ҏ(gu)接近的整敎ͼ如果n2数就舍入到小数点左边相应的位上,n2必须是整数?br />
select ROUND(12345,-2),ROUND(12345.54321,2) FROM dualROUND(12345,-2) ROUND(12345.54321,2)12300 12345.54
SIGN()
如果n敎ͼq回-1,如果n为正敎ͼq回1Q如果n=0q回0.
SINQ?
q回n的正玄?n为弧度?/span>
SINH()
q回n的双曲正玄?n为弧度?/span>
SQRT()
q回n的^Ҏ(gu),n为弧?/span>
TANQ?
q回n的正切?n为弧?/span>
TANH()
q回n的双曲正切?n为弧?/span>
TRUNC(,)
q回截尾到n2位小数的n1的|n2~省讄?Q当n2为缺省设|时?x)将n1截尾为整敎ͼ如果n2|截֜数点左边相应的位上?/span>
单行日期函数操作DATA数据cdQ绝大多数都有DATA数据cd的参敎ͼl大多数q回的也是DATA数据cd的倹{?/span>
ADD_MONTHS(,QiQ?
q回日期d加上i个月后的l果。i可以使Q意整数。如果i是一个小敎ͼ那么数据库将隐式的他转换成整敎ͼ会(x)截去数点后面的部分?/span>
LAST_DAY()
函数q回包含日期d的月份的最后一?
MONTHS_BETWEEN(,)
q回d1和d2之间月的数目,如果d1和d2的日的日期都相同Q或者都使该月的最后一天,那么返回一个整敎ͼ否则?x)返回的l果包含一个分数?/span>
NEW_TIME(,,)
d1是一个日期数据类型,当时区tz1中的日期和时间是dӞq回时区tz2中的日期和时间。tz1和tz2时字W串?/span>
NEXT_DAY(,)
q回日期d后由dowl出的条件的W一天,dow使用当前?x)话中给出的语言指定了一周中的某一天,q回的时间分量与d的时间分量相同?br />
select NEXT_DAY(''01-Jan-2000'',''Monday'') "1st Monday",NEXT_DAY(''01-Nov-2004'',''Tuesday'')+7 "2nd Tuesday") from dual;1st Monday 2nd Tuesday03-Jan-2000 09-Nov-2004
ROUND([,])
日期d按照fmt指定的格式舍入,fmt为字W串?/span>
SYADATE
函数没有参数Q返回当前日期和旉?/span>
TRUNC([,])
q回由fmt指定的单位的日期d.
单行转换函数
单行转换函数用于操作多数据类型,在数据类型之间进行{换?/span>
CHARTORWID()
c 使一个字W串Q函数将c转换为RWID数据cd?br />
SELECT test_id from test_case where rowid=CHARTORWID(''AAAA0SAACAAAALiAAA'')
CONVERT(,[,])
c֭W串Qdset、sset是两个字W集Q函数将字符串c由sset字符集{换ؓ(f)dset字符集,sset的缺省设|ؓ(f)数据库的字符集?/span>
HEXTORAW()
x?6q制的字W串Q函数将16q制的x转换为RAW数据cd?/span>
RAWTOHEX()
x是RAW数据cd字符Ԍ函数RAW数据c{换ؓ(f)16q制的数据类型?/span>
ROWIDTOCHAR()
函数ROWID数据cd转换为CHAR数据cd?/span>
TO_CHAR([[,)
x是一个data或number数据cdQ函数将x转换成fmt指定格式的char数据cdQ如果x为日期nlsparm=NLS_DATE_LANGUAGE 控制q回的月份和日䆾所使用的语a。如果x为数字nlsparm=NLS_NUMERIC_CHARACTERS 用来指定数位和千分位的分隔W,以及(qing)货币W号?br />
NLS_NUMERIC_CHARACTERS ="dg", NLS_CURRENCY="string"
TO_DATE([,[,Q?br />
c表示字符Ԍfmt表示一U特D格式的字符丌Ӏ返回按照fmt格式昄的c,nlsparm表示使用的语a。函数将字符串c转换成date数据cd?/span>
TO_MULTI_BYTE()
c表示一个字W串Q函数将c的担子截字符转换成多字节字符?/span>
TO_NUMBER([,[,)
c表示字符Ԍfmt表示一个特D格式的字符Ԍ函数q回值按照fmt指定的格式显C。nlsparm表示语言Q函数将q回c代表的数字?/span>
TO_SINGLE_BYTE()
字W串c中得多字节字W{化成{h(hun)的单字节字符。该函数仅当数据库字W集同时包含单字节和多字节字W时才?/span>
其它单行函数
BFILENAME(
,)
dir是一个directorycd的对象,fileZ文g名。函数返回一个空的BFILE位置值指C符Q函数用于初始化BFILE变量或者是BFILE列?/span>
DECODE(,,[,,,[])
x是一个表辑ּQm1是一个匹配表辑ּQx与m1比较Q如果m1{于xQ那么返回r1,否则,x与m2比较Q依ơ类推m3,m4,m5....直到有返回结果?/span>
DUMP(,[,[,[,]]])
x是一个表辑ּ或字W,fmt表示8q制?0q制?6q制、或则单字符。函数返回包含了有关x的内部表CZ息的VARCHAR2cd的倹{如果指定了n1,n2那么从n1开始的长度为n2的字节将被返回?/span>
EMPTY_BLOB()
该函数没有参敎ͼ函数q回 一个空的BLOB位置指示W。函数用于初始化一个BLOB变量或BLOB列?/span>
EMPTY_CLOB()
该函数没有参敎ͼ函数q回 一个空的CLOB位置指示W。函数用于初始化一个CLOB变量或CLOB列?/span>
GREATEST()
exp_list是一列表辑ּQ返回其中最大的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,那么q回的结果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?/span>
LEAST()
exp_list是一列表辑ּQ返回其中最的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,返回的l果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?/span>
UID
该函数没有参敎ͼq回唯一标示当前数据库用L(fng)整数?/span>
USER
q回当前用户的用户名
USERENV()
Zoptq回包含当前?x)话信息。opt的可选gؓ(f)Q?/span>
ISDBA ?x)话中SYSDBA脚色响应Q返回TRUE
SESSIONID q回审计?x)话标示W?br />
ENTRYID q回可用的审计项标示W?
INSTANCE 在会(x)话连接后Q返回实例标C符。该值只用于q行Parallel 服务器ƈ且有 多个实例的情况下使用?br />
LANGUAGE q回语言、地域、数据库讄的字W集?br />
LANG q回语言名称的ISO~写?br />
TERMINAL 为当前会(x)话用的l端或计机q回操作pȝ的标C符?/span>
VSIZE()
x是一个表辑ּ。返回x内部表示的字节数?br />
SQL中的l函?/span>
l函C叫集合函敎ͼq回Z多个行的单一l果Q行的准数量无法确定,除非查询被执行ƈ且所有的l果都被包含在内。与单行函数不同的是Q在解析时所有的行都是已知的。由于这U差别ɾl函C单行函数有在要求和行Z有微的差异.
l(多行Q函?/span>
与单行函数相比,oracle提供了丰富的Zl的Q多行的函数。这些函数可以在select或select的having子句中用,当用于select子串时常帔R和GROUP BY一起用?/span>
AVG([{DISYINCT|ALL}])
q回数值的q_倹{缺省设|ؓ(f)ALL.
SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal) FROM scott.empAVG(SAL) AVG(ALL SAL) AVG(DISTINCT SAL)1877.94118 1877.94118 1916.071413
COUNT({*|DISTINCT|ALL} )
q回查询中行的数目,~省讄是ALL,*表示q回所有的行?/span>
MAX([{DISTINCT|ALL}])
q回选择列表目的最大|如果x是字W串数据cdQ他q回一个VARCHAR2数据cdQ如果X是一个DATA数据cdQ返回一个日期,如果X是numeric数据cdQ返回一个数字。注意distinct和all不v作用Q应为最大gq两U设|是相同的?/span>
MIN([{DISTINCT|ALL}])
q回选择列表目的最倹{?/span>
STDDEV([{DISTINCT|ALL}])
q回选者的列表目的标准差Q所谓标准差是方差的qx栏V?/span>
SUM([{DISTINCT|ALL}])
q回选择列表目的数值的d?/span>
VARIANCE([{DISTINCT|ALL}])
q回选择列表目的统计方差?/span>
用GROUP BYl数据分l?/span>
正如题目暗示的那L(fng)函数是操作那些已经分好l的数据Q我们告诉数据库用GROUP BY怎样l数据分l或者分c,当我们在SELECT语句的SELECT子句中用组函数Ӟ我们必须把ؓ(f)分组或非常数列放|在GROUP BY子句中,如果没有用group byq行专门处理Q那么缺省的分类是将整个l果设ؓ(f)一cR?br />
select stat,counter(*) zip_count from zip_codes GROUP BY state;ST ZIP_COUNT-- ---------AK 360AL 1212AR 1309AZ 768CA 3982
在这个例子中Q我们用state字段分类Q如果我们要结果按照zip_codes排序,可以用ORDER BY语句QORDER BY子句可以使用列或l函数?br />
select stat,counter(*) zip_count from zip_codes GROUP BY state ORDER BY COUNT(*) DESC;ST COUNT(*)-- --------NY 4312PA 4297TX 4123CA 3982
用HAVING子句限制分组数据
现在你已l知道了在查询的SELECT语句和ORDER BY子句中用主函数Q组函数只能用于两个子串中,l函C能用于WHERE子串中,例如下面的查询是错误的:(x)
错误SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept=''OUTSIDE'' AND SUM(sale_amount)>10000 GROUP BY sales_clerk
q个语句中数据库不知道SUM()是什么,当我们需要指C数据库对行分组Q然后限制分l后的行的输出时Q正的Ҏ(gu)是用HAVING语句Q?br />
SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept=''OUTSIDE'' GROUP BY sales_clerkHAVING SUM(sale_amount)>10000;
嵌套函数
函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可l承的执行过E。但函数的优先权只是Z位置Q函数遵循由内到外,由左到右的原则。嵌套技术一般用于象DECODEq样的能被用于逻辑判断语句IF....THEN...ELSE的函数?/span>
嵌套函数可以包括在组函数中嵌套单行函敎ͼ或者组函数嵌套入单行函数或l函C。比如下面的例子Q?br />
SELECT deptno, GREATEST(COUNT(DISTINCT job),COUNT(DISTINCT mgr) cnt,COUNT(DISTINCT job) jobs,COUNT(DISTINCT mgr) mgrsFROM empGROUP BY deptno;DEPTNO CNT JOBS MGRS------ --- ---- ----10 4 4 220 4 3 430 3 3 2
增加一个列Q?/strong>
ALTER TABLE 表名 ADD(列名 数据cd);
如:(x)
ALTER TABLE emp ADD(weight NUMBER(5,0));
修改一个列的数据类?一般限于修攚w度,修改Z个不同类型时有诸多限?:
ALTER TABLE 表名 MODIFY(列名 数据cd);
如:(x)
ALTER TABLE emp MODIFY(weight NUMBER(3,0) NOT NULL);
l列改名Q?/span>
ALTER TABLE 表名 RENAME COLUMN 当前列名 TO 新列?
如:(x)
ALTER TABLE emp RENAME COLUMN weight TO weight_new;
删除一个列Q?/strong>
ALTER TABLE 表名 DROP COLUMN 列名;
如:(x)
ALTER TABLE emp DROP COLUMN weight_new;
一个表改名Q?br />
ALTER TABLE 当前表名 RENAME TO 新表?
如:(x)
ALTER TABLE emp RENAME TO emp_new;
删除一个表Q?/strong>
DROP TABLE 表名Q?br />
如:(x)
DROP TABLE emp;
删除一个表的数据:(x)
DELETE TABLE 表名Q?br />
如:(x)
DELETE TABLE emp;