??xml version="1.0" encoding="utf-8" standalone="yes"?> oracle的case函数create sequence STUDENT_SEQUENCE;
oracle的casel构 begin q个case when ... end case 和上边的case when ... end是不同的?/font> 一?单查? SELECT nickname,email (一) 选择列表 选择列表(select_list)指出所查询列,它可以是一l列名列表、星受表辑ּ、变?包括局部变量和全局变量){构成?/p> 1、选择所有列 例如Q下面语句显Ctesttable表中所有列的数据: SELECT * 2、选择部分列ƈ指定它们的显C次?/p> 查询l果集合中数据的排列序与选择列表中所指定的列名排列顺序相同?br /> 例如Q?/p> SELECT nickname,email 3、更改列标题 在选择列表中,可重新指定列标题。定义格式ؓQ?br /> 列标?列名 SELECT 늧=nickname,电子邮g=email 4、删除重复行 SELECT语句中用ALL或DISTINCT选项来显C中符合条件的所有行或删除其中重复的数据行,默认为ALL。用DISTINCT选项Ӟ对于所有重复的数据行在SELECTq回的结果集合中只保留一行?/p> 5、限制返回的行数 使用TOP n [PERCENT]选项限制q回的数据行敎ͼTOP n说明q回n行,而TOP n PERCENTӞ说明n是表CZ癑ֈ敎ͼ指定q回的行数等于总行数的癑ֈ之几?br /> 例如Q?/p> SELECT TOP 2 * (?FROM子句 FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔?br /> 在FROM子句同时指定多个表或视图Ӟ如果选择列表中存在同名列Q这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定Q?/p> SELECT username,citytable.cityid 在FROM子句中可用以下两U格式ؓ表或视图指定别名Q?br /> 表名 as 别名 (? FROM子句 FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔?br /> 在FROM子句同时指定多个表或视图Ӟ如果选择列表中存在同名列Q这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定Q?/p> SELECT username,citytable.cityid 在FROM子句中可用以下两U格式ؓ表或视图指定别名Q?br /> 表名 as 别名 SELECT username,b.cityid SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所q回的结果集合中查询数据?/p> 例如Q?/p> SELECT a.au_fname+a.au_lname 此例中,SELECTq回的结果集合给予一别名tQ然后再从中索数据?br /> (? 使用WHERE子句讄查询条g WHERE子句讄查询条gQ过滤掉不需要的数据行。例如下面语句查询年龄大?0的数据: SELECT * WHERE子句可包括各U条件运符Q?br /> 比较q算W?大小比较)Q?gt;?gt;=??lt;?lt;=?lt;>?>?< 1、范围运符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 4、空值判断符例WHERE age IS NULL 5、逻辑q算W:优先UؓNOT、AND、OR (?查询l果排序 使用ORDER BY子句Ҏ询返回的l果按一列或多列排序。ORDER BY子句的语法格式ؓQ?br /> ORDER BY {column_name [ASC|DESC]} [,...n] SELECT * 另外Q可以根据表辑ּq行排序?/p> 二?联合查询 UNIONq算W可以将两个或两个以上上SELECT语句的查询结果集合合q成一个结果集合显C,x行联合查询。UNION的语法格式ؓQ?/p> select_statement 其中selectstatement为待联合的SELECT查询语句?/p> ALL选项表示所有行合ƈ到结果集合中。不指定该项Ӟ被联合查询结果集合中的重复行只保留一行?/p> 联合查询Ӟ查询l果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时Q也必须使用W一查询语句中的列名、列标题或者列序号? 在用UNION q算W时Q应保证每个联合查询语句的选择列表中有相同数量的表辑ּQƈ且每个查询选择表达式应h相同的数据类型,或是可以自动它们{换ؓ相同的数据类型。在自动转换Ӟ对于数值类型,pȝ低_ֺ的数据类型{换ؓ高精度的数据cd?/p> 在包括多个查询的UNION语句中,其执行顺序是自左臛_Q用括号可以改变这一执行序。例如: 查询1 UNION (查询2 UNION 查询3) 三、连接查?/p> 通过q接q算W可以实现多个表查询。连接是关系数据库模型的主要特点Q也是它区别于其它类型数据库理pȝ的一个标志?/p> 在关pL据库理pȝ中,表徏立时各数据之间的关系不必定Q常把一个实体的所有信息存攑֜一个表中。当索数据时Q通过q接操作查询出存攑֜多个表中的不同实体的信息。连接操作给用户带来很大的灵zL,他们可以在Q何时候增加新的数据类型。ؓ不同实体创徏新的表,后通过q接q行查询?/p> q接可以在SELECT 语句的FROM子句或WHERE子句中徏立,似是而非在FROM子句中指接时有助于将q接操作与WHERE子句中的搜烦条g区分开来。所以,在Transact-SQL中推荐用这U方法?/p> SQL-92标准所定义的FROM子句的连接语法格式ؓQ?/p> FROM join_table join_type join_table 其中join_table指出参与q接操作的表名,q接可以对同一个表操作Q也可以对多表操作,对同一个表操作的连接又U做自连接?/p> join_type 指出q接cdQ可分ؓ三种Q内q接、外q接和交叉连接。内q接(INNER JOIN)使用比较q算W进行表间某(?列数据的比较操作Qƈ列出q些表中与连接条件相匚w的数据行。根据所使用的比较方式不同,内连接又分ؓ{D接、自然连接和不等q接三种。外q接分ؓ左外q接(LEFT OUTER JOIN或LEFT JOIN)、右外连?RIGHT OUTER JOIN或RIGHT JOIN)和全外连?FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列Zq接条g相匹配的行,而是列出左表(左外q接?、右?叛_q接?或两个表(全外q接?中所有符合搜索条件的数据行?/p> 交叉q接(CROSS JOIN)没有WHERE 子句Q它q回q接表中所有数据行的笛卡尔U,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以W二个表中符合查询条件的数据行数?/p> q接操作中的ON (join_condition) 子句指出q接条gQ它pq接表中的列和比较运符、逻辑q算W等构成?/p> 无论哪种q接都不能对text、ntext和image数据cd列进行直接连接,但可以对q三U列q行间接q接。例如: SELECT p1.pub_id,p2.pub_id,p1.pr_info (一)内连?br /> 内连接查询操作列Zq接条g匚w的数据行Q它使用比较q算W比较被q接列的列倹{内q接分三U: SELECT * (?外连?br /> 内连接时Q返回查询结果集合中的仅是符合查询条? WHERE 搜烦条g?HAVING 条g)和连接条件的行。而采用外q接Ӟ它返回到查询l果集合中的不仅包含W合q接条g的行Q而且q包括左?左外q接?、右?叛_q接?或两个边接表(全外q接)中的所有数据行。如下面使用左外q接论坛内容和作者信息连接v来: SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b 下面使用全外q接city表中的所有作者以及user表中的所有作者,以及他们所在的城市Q?/p> SELECT a.*,b.* (?交叉q接
发表?2006.07.25 12:42
分类: oracle开?
出处Qhttp://zhouwf0726.itpub.net/post/9689/157964
---------------------------------------------------------------
CREATE TABLE students (
id NUMBER(5) PRIMARY KEY,
stu_name VARCHAR2(20),
score NUMBER(10,0),
grade varchar2(2));
INSERT INTO students (id, stu_name, score, grade)
VALUES (student_sequence.NEXTVAL, 'Scott', 98,null);
INSERT INTO students (id, stu_name, score, grade)
VALUES (student_sequence.NEXTVAL, 'Margaret', 88,null);
INSERT INTO students (id, stu_name, score, grade)
VALUES (student_sequence.NEXTVAL, 'Joanne', 75,null);
INSERT INTO students (id, stu_name, score, grade)
VALUES (student_sequence.NEXTVAL, 'Manish', 66,null);
update students
set grade =
case when score > 90 then 'a'
when score > 80 then 'b'
when score > 70 then 'c'
else 'd' end
case when 2<1 then
dbms_output.put_line('y');
else
dbms_output.put_line('n');
end case;
end;
/
]]>SQL查询语句_֍使用?
单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等?br /> 例如Q下面的语句查询testtable表中姓名?张三"的nickname字段和email字段?/p>
FROM testtable
WHERE
FROM testtable
FROM testtable
列名 列标?br /> 如果指定的列标题不是标准的标识符格式Ӟ应用引号定界符Q例如,下列语句使用汉字昄列标题:
FROM testtable
FROM testtable
SELECT TOP 20 PERCENT *
FROM testtable
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid
表名 别名
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid
表名 别名
例如上面语句可用表的别名格式表示为:
FROM usertable a,citytable b
WHERE a.cityid=b.cityid
FROM authors a,titleauthor ta
(SELECT title_id,title
FROM titles
WHERE ytd_sales>10000
) AS t
WHERE a.au_id=ta.au_id
AND ta.title_id=t.title_id
FROM usertable
WHERE age>20
范围q算W?表达式值是否在指定的范?QBETWEEN...AND...
NOT BETWEEN...AND...
列表q算W?判断表达式是否ؓ列表中的指定?QIN (?,?......)
NOT IN (?,?......)
模式匚wW?判断值是否与指定的字W通配格式相符):LIKE、NOT LIKE
I值判断符(判断表达式是否ؓI?QIS NULL、NOT IS NULL
逻辑q算W?用于多条件的逻辑q接)QNOT、AND、OR
2、列表运符例:country IN ('Germany','China')
3、模式匹配符例:常用于模p查找,它判断列值是否与指定的字W串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime{类型查询?br /> 可用以下通配字符Q?br /> 癑ֈ?Q可匚wLcd和长度的字符Q如果是中文Q请使用两个癑ֈ号即%%?br /> 下划U_Q匹配单个Q意字W,它常用来限制表达式的字符长度?br /> Ҏ号[]Q指定一个字W、字W串或范_要求所匚w对象为它们中的Q一个。[^]Q其取g[] 相同Q但它要求所匚w对象为指定字W以外的M个字W?br /> 例如Q?br /> 限制以Publishingl尾Q用LIKE '%Publishing'
限制以A开_LIKE '[A]%'
限制以A开头外QLIKE '[^A]%'
其中ASC表示升序Qؓ默认|DESC为降序。ORDER BY不能按ntext、text和image数据cdq行?br /> 序?br /> 例如Q?/p>
FROM usertable
ORDER BY age desc,userid ASC
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][...n]
[ON (join_condition)]
FROM pub_info AS p1 INNER JOIN pub_info AS p2
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)
1、等D接:在连接条件中使用{于?=)q算W比较被q接列的列|其查询结果中列出被连接表中的所有列Q包括其中的重复列?br /> 2、不{连接: 在连接条件用除{于q算W以外的其它比较q算W比较被q接的列的列倹{这些运符包括>?gt;=?lt;=?lt;?>?<?lt;>?br /> 3、自然连接:在连接条件中使用{于(=)q算W比较被q接列的列|但它使用选择列表指出查询l果集合中所包括的列Qƈ删除q接表中的重复列?br /> 例,下面使用{D接列出authors和publishers表中位于同一城市的作者和出版C:
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
又如使用自然q接Q在选择列表中删除authors 和publishers 表中重复?city和state)Q?br /> SELECT a.*,p.pub_id,p.pub_name,p.country
FROM authors AS a INNER JOIN publishers AS p
ON a.city=p.city
ON a.username=b.username
FROM city as a FULL OUTER JOIN user as b
ON a.username=b.username
交叉q接不带WHERE 子句Q它q回被连接的两个表所有数据行的笛卡尔U,q回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以W二个表中符合查询条件的数据行数。例Qtitles表中?cd书,而publishers表中?家出版社Q则下列交叉q接索到的记录数等?*8=48行?br /> SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type
]]>
函数是一U有零个或多个参数ƈ且有一个返回值的E序。在SQL中Oracle内徏了一pd函数Q这些函数都可被UCؓSQL或PL/SQL语句Q函C要分Z大类Q?
单行函数
l函?
本文讨论如何利用单行函C及用规则?/p>
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语句中?/p>
NULL和单行函?/p>
在如何理解NULL上开始是很困隄Q就是一个很有经验的Z然对此感到困惑。NULLDCZ个未知数据或者一个空|术操作W的M一个操作数为NULL|l果均ؓ提个NULL?q个规则也适合很多函数Q只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了NULL参数时能够返回非NULL倹{在q些中NVL函数时最重要的,因ؓ他能直接处理NULL|NVL有两个参敎ͼNVL(x1,x2),x1和x2都式表达式,当x1为null时返回X2,否则q回x1?/p>
下面我们看看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,那么׃得出错误的结论,q个时候就要用nvl函数来排除null值的影响?br />所以正的语句是:
update empset salary=(salary+nvl(bonus,0)*1.1
单行字符串函?/p>
单行字符串函数用于操作字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均ؓ字符Ԍ函数c2q接到c1的后面,如果c1为null,返回c2.如果c2为null,则返回c1Q如果c1、c2都ؓ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均ؓ字符Ԍi,j为整数。函数返回c2在c1中第jơ出现的位置Q搜索从c1的第i个字W开始。当没有发现需要的字符时返?,如果i敎ͼ那么搜烦从叛_左进行,但是位置的计还是从左到叻Ii和j的缺省gؓ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)函数一P只是他返回的是字节,对于单字节INSTRB(){于INSTR()
LENGTH()
c1为字W串Q返回c1的长度,如果c1为nullQ那么将q回null倹{?br />select LENGTH('Ipso Facto') ergo from dualergo10
LENGTHb()
与LENGTH()一Pq回字节?/p>
lower()
q回c的小写字W,l常出现在where子串?br />select LOWER(colorname) from itemdetail WHERE LOWER(colorname) LIKE '%white%'COLORNAMEWinterwhite
LPAD(,QiQ[,])
c1,c2均ؓ字符Ԍi为整数。在c1的左侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ单空|参见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׃会改变?br />select LTRIM('Mississippi','Mis') from dualLTRppi
RPAD(,QiQ[,])
在c1的右侧用c2字符串补长度i,可多ơ重复,如果i于c1的长度,那么只返回i那么长的c1字符Q其他的被截去。c2的缺省gؓ单空?其他与LPAD怼
RTRIM(,)
把c1中最双的字W去掉,使其W后一个字W不在c2中,如果没有c2Q那么c1׃会改变?/p>
REPLACE(,[,])
c1,c2,c3都是字符Ԍ函数用c3代替出现在c1中的c2后返回?br />select REPLACE('uptown','up','down') from dualREPLACEdowntown
STBSTR(,QiQ[,])
c1Z字符Ԍi,j为整敎ͼ从c1的第i位开始返回长度ؓj的子字符Ԍ如果j为空Q则直到串的N?br />select SUBSTR('Message',1,4) from dualSUBSMess
SUBSTRB(,QiQ[,])
与SUBSTR大致相同Q只是I,J是以字节计算?/p>
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没有提供内徏的弧度和角度的{换函数?/p>
ABS()
q回n的绝对?/p>
ACOS()
反余玄函敎ͼq回-1?之间的数。n表示弧度
select ACOS(-1) pi,ACOS(1) ZERO FROM dualPI ZERO3.14159265 0
ASIN()
反正玄函敎ͼq回-1?Qn表示弧度
ATAN()
反正切函敎ͼq回n的反正切|n表示弧度?/p>
CEIL()
q回大于或等于n的最整数?/p>
COS()
q回n的余玄|n为弧?/p>
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的最大整数?/p>
LN()
q回N的自然对敎ͼN必须大于0
LOG(,)
q回以n1为底n2的对?/p>
MOD()
q回n1除以n2的余敎ͼ
POWER(,)
q回n1的n2ơ方
ROUND(,)
q回舍入数点右边n2位的n1的|n2的缺省gؓ0Q这回将数Ҏ接近的整敎ͼ如果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为弧度?/p>
SINH()
q回n的双曲正玄?n为弧度?/p>
SQRT()
q回n的^Ҏ,n为弧?/p>
TANQ?
q回n的正切?n为弧?/p>
TANH()
q回n的双曲正切?n为弧?/p>
TRUNC(,)
q回截尾到n2位小数的n1的|n2~省讄?Q当n2为缺省设|时会将n1截尾为整敎ͼ如果n2|截֜数点左边相应的位上?/p>
单行日期函数
单行日期函数操作DATA数据cdQ绝大多数都有DATA数据cd的参敎ͼl大多数q回的也是DATA数据cd的倹{?/p>
ADD_MONTHS(,QiQ?
q回日期d加上i个月后的l果。i可以使Q意整数。如果i是一个小敎ͼ那么数据库将隐式的他转换成整敎ͼ会截去数点后面的部分?/p>
LAST_DAY()
函数q回包含日期d的月份的最后一?
MONTHS_BETWEEN(,)
q回d1和d2之间月的数目,如果d1和d2的日的日期都相同Q或者都使该月的最后一天,那么返回一个整敎ͼ否则会返回的l果包含一个分数?/p>
NEW_TIME(,,)
d1是一个日期数据类型,当时区tz1中的日期和时间是dӞq回时区tz2中的日期和时间。tz1和tz2时字W串?/p>
NEXT_DAY(,)
q回日期d后由dowl出的条件的W一天,dow使用当前会话中给出的语言指定了一周中的某一天,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串?/p>
SYADATE
函数没有参数Q返回当前日期和旉?/p>
TRUNC([,])
q回由fmt指定的单位的日期d.
单行转换函数
单行转换函数用于操作多数据类型,在数据类型之间进行{换?/p>
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字符集{换ؓdset字符集,sset的缺省设|ؓ数据库的字符集?/p>
HEXTORAW()
x?6q制的字W串Q函数将16q制的x转换为RAW数据cd?/p>
RAWTOHEX()
x是RAW数据cd字符Ԍ函数RAW数据c{换ؓ16q制的数据类型?/p>
ROWIDTOCHAR()
函数ROWID数据cd转换为CHAR数据cd?/p>
TO_CHAR([[,)
x是一个data或number数据cdQ函数将x转换成fmt指定格式的char数据cdQ如果x为日期nlsparm=NLS_DATE_LANGUAGE 控制q回的月份和日䆾所使用的语a。如果x为数字nlsparm=NLS_NUMERIC_CHARACTERS 用来指定数位和千分位的分隔W,以及货币W号?br />NLS_NUMERIC_CHARACTERS ="dg", NLS_CURRENCY="string"
TO_DATE([,[,Q?br /> c表示字符Ԍfmt表示一U特D格式的字符丌Ӏ返回按照fmt格式昄的c,nlsparm表示使用的语a。函数将字符串c转换成date数据cd?/p>
TO_MULTI_BYTE()
c表示一个字W串Q函数将c的担子截字符转换成多字节字符?/p>
TO_NUMBER([,[,)
c表示字符Ԍfmt表示一个特D格式的字符Ԍ函数q回值按照fmt指定的格式显C。nlsparm表示语言Q函数将q回c代表的数字?/p>
TO_SINGLE_BYTE()
字W串c中得多字节字W{化成{h的单字节字符。该函数仅当数据库字W集同时包含单字节和多字节字W时才?/p>
其它单行函数
BFILENAME(
,)
dir是一个directorycd的对象,fileZ文g名。函数返回一个空的BFILE位置值指C符Q函数用于初始化BFILE变量或者是BFILE列?/p>
DECODE(,,[,,,[])
x是一个表辑ּQm1是一个匹配表辑ּQx与m1比较Q如果m1{于xQ那么返回r1,否则,x与m2比较Q依ơ类推m3,m4,m5....直到有返回结果?/p>
DUMP(,[,[,[,]]])
x是一个表辑ּ或字W,fmt表示8q制?0q制?6q制、或则单字符。函数返回包含了有关x的内部表CZ息的VARCHAR2cd的倹{如果指定了n1,n2那么从n1开始的长度为n2的字节将被返回?/p>
EMPTY_BLOB()
该函数没有参敎ͼ函数q回 一个空的BLOB位置指示W。函数用于初始化一个BLOB变量或BLOB列?/p>
EMPTY_CLOB()
该函数没有参敎ͼ函数q回 一个空的CLOB位置指示W。函数用于初始化一个CLOB变量或CLOB列?/p>
GREATEST()
exp_list是一列表辑ּQ返回其中最大的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,那么q回的结果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?/p>
LEAST()
exp_list是一列表辑ּQ返回其中最的表达式,每个表达式都被隐含的转换W一个表辑ּ的数据类型,如果W一个表辑ּ是字W串数据cd中的M一个,返回的l果是varchar2数据cdQ同时用的比较是非填充I格cd的比较?/p>
UID
该函数没有参敎ͼq回唯一标示当前数据库用L整数?/p>
USER
q回当前用户的用户名
USERENV()
Zoptq回包含当前会话信息。opt的可选gؓQ?/p>
ISDBA 会话中SYSDBA脚色响应Q返回TRUE
SESSIONID q回审计会话标示W?/p>
ENTRYID q回可用的审计项标示W?
INSTANCE 在会话连接后Q返回实例标C符。该值只用于q行Parallel 服务器ƈ且有 多个实例的情况下使用?br /> LANGUAGE q回语言、地域、数据库讄的字W集?br /> LANG q回语言名称的ISO~写?br /> TERMINAL 为当前会话用的l端或计机q回操作pȝ的标C符?/p>
VSIZE()
x是一个表辑ּ。返回x内部表示的字节数?br />SQL中的l函?/p>
l函C叫集合函敎ͼq回Z多个行的单一l果Q行的准数量无法确定,除非查询被执行ƈ且所有的l果都被包含在内。与单行函数不同的是Q在解析时所有的行都是已知的。由于这U差别ɾl函C单行函数有在要求和行Z有微的差异.
l(多行Q函?/p>
与单行函数相比,oracle提供了丰富的Zl的Q多行的函数。这些函数可以在select或select的having子句中用,当用于select子串时常帔R和GROUP BY一起用?/p>
AVG([{DISYINCT|ALL}])
q回数值的q_倹{缺省设|ؓ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回所有的行?/p>
MAX([{DISTINCT|ALL}])
q回选择列表目的最大|如果x是字W串数据cdQ他q回一个VARCHAR2数据cdQ如果X是一个DATA数据cdQ返回一个日期,如果X是numeric数据cdQ返回一个数字。注意distinct和all不v作用Q应为最大gq两U设|是相同的?/p>
MIN([{DISTINCT|ALL}])
q回选择列表目的最倹{?/p>
STDDEV([{DISTINCT|ALL}])
q回选者的列表目的标准差Q所谓标准差是方差的qx栏V?/p>
SUM([{DISTINCT|ALL}])
q回选择列表目的数值的d?/p>
VARIANCE([{DISTINCT|ALL}])
q回选择列表目的统计方差?/p>
用GROUP BYl数据分l?/p>
正如题目暗示的那L函数是操作那些已经分好l的数据Q我们告诉数据库用GROUP BY怎样l数据分l或者分c,当我们在SELECT语句的SELECT子句中用组函数Ӟ我们必须把ؓ分组或非常数列放|在GROUP BY子句中,如果没有用group byq行专门处理Q那么缺省的分类是将整个l果设ؓ一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子串中,例如下面的查询是错误的:
错误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正的Ҏ是用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的函数?/p>