淘宝网开发人员数据库知识参考手册编写、修订、审核记录目录第一章基本元素 (6)第一节数据类型 (6)1.VARCHAR2(size): (6)2.CHAR(size) (6)3.LONG (7)4.CLOB (7)5.NUMBER(p,s) (7)6.DATE (8)7.TIMESTAMP(factional_seconds_precision ) (8)第二节NULL (8)第三节伪列 (11)1.CURRVAL 和NEXTVAL (11)2.LEVEL (12)3.ROWID (12)4.ROWNUM (13)5.XMLDATA (15)第四节注释 (15)第五节数据库的对象 (16)1.模式对象 (16)2.非模式对象 (17)3.部分模式对象 (17)第六节格式模型 (17)1.时间格式 (17)第七节操作符 (19)1.操作符列表 (19)2.操作符优先级 (19)3.连接操作符 (19)4.集合操作符 (19)第二章表达式 (19)第三章条件 (19)第一节条件的优先级 (20)第二节比较条件 (21)第三节逻辑条件 (23)第四节成员关系条件 (23)第五节范围条件 (23)第六节NULL条件 (23)第四章函数 (23)第一节单值函数 (23)1.数值型函数 (24)✧MOD (24)✧ROUND (24)✧ABS (26)✧ACOS (26)✧ASIN (27)✧ATAN (27)✧ATAN2 (28)✧BIN_TO_NUM (29)✧BITAND (29)✧CEIL (29)✧COS (29)✧FLOOR (29)✧SIN (29)✧SINH (29)✧ (29)2.返回字符值的字符型函数 (29)✧LOWER (29)✧UPPER (30)✧LPAD (30)✧RPAD (31)✧TRIM (31)✧LTRIM (32)✧RTRIM (32)✧REPLACE (33)✧SOUNDEX (33)✧SUBSTR (34)✧TRANSLA TE (35)✧ (36)3.返回数字值的字符型函数 (36)✧INSTR (36)✧LENGTH (37)✧ (37)4.日期函数 (37)✧ADD_MONTHS (38)✧CURRENT_DA TE (39)✧CURRENT_TIMESTAMP (40)✧SYSDA TE (40)✧SYSTIMESTAMP (41)✧LAST_DAY (42)✧NEXT_DAY (42)✧MONTHS_BETWEEN (42)✧ROUND (43)✧TRUNC (44)5.转换函数 (45)✧TO_CHAR (45)✧TO_NUMBER (47)6.其他辅助函数 (47)✧DECODE (48)✧GREATEST (49)✧LEAST (49)✧NULLIF (50)✧NVL (50)✧NVL2 (51)✧SYS_CONNECT_BY_PA TH (52)✧SYS_CONTEXT (52)第二节聚集函数 (52)✧AVG (54)✧COUNT (55)✧DENSE_RANK (56)✧RANK (57)✧FIRST (58)✧LAST (58)✧MAX (58)✧MIN (59)✧SUM (59)✧ (60)第三节分析函数 (60)1.概述 (60)2.工作机制 (61)3.语法 (62)4.常用的分析函数 (65)✧A VG (65)✧COUNT (66)✧FIRST_V ALUE (66)✧LAST_V ALUE (67)✧LAG (68)✧LEAD (68)✧MAX (69)✧MIN (69)✧DENSE_RANK (70)✧RANK (71)✧ROW_NUMBER (72)✧SUM (72)5.不太常用的分析函数 (73)6.常见问题 (73)✧计算动态累计问题 (73)✧TOP-N问题 (73)✧交叉查询问题 (73)第四节对象引用函数 (73)第五节函数列表(字母序) (73)1.ABS (73)2.ACOS (73)3.ADD_MONTHS (73)4.ASCII (74)5.ASIN (74)6.ATAN (74)7.ATAN2 (74)8.AVG (75)9.BIN_TO_NUM (75)10.BINAND (75)11.CHARTOROWID (76)12.COUNT (76)13.CURRENT_DATE (76)14.CURRENT_TIMESTAMP (76)15.DECODE (76)16.DENSE_RANK (77)17.DUMP (77)18.FIRST (77)19.FIRST_VALUE (77)20.FLOOR (77)21.GREATEST (77)22.GROUP_ID (77)23.GROUPING (77)24.GROUPING_ID (77)25.INSTR (77)G (77)ST (78)ST_DAY (78)ST_VALUE (78)30.LEAD (78)31.LEAST (78)32.LENGTH (78)33.LOWER (78)34.LP AD (78)35.MAX (78)36.MIN (79)37.MOD (79)38.MONTHS_BETWEEN (79)39.NEXT_DAY (79)40.NULLIF (79)41.NVL (79)43.RANK (79)44.REPLACE (79)45.ROUND(date) (80)46.ROUND(number) (80)47.ROW_NUMBER (80)48.RP AD (80)49.RTRIM (80)50.SOUNDEX (80)51.SUBSTR (80)52.SUM (80)53.SYSDATE (80)54.SYSTIMESTAMP (81)55.TO_CHAR (81)56.TO_DATE (81)57.TO_NUMBER (81)58.TRANSLATE (81)59.TRIM (81)60.TRUNC(number) (81)61.TRUNC(date) (81)62.UPPER (81)第五章后记 (82)第一章基本元素第一节数据类型1.V ARCHAR2(size):可变长度的字符串,最大size个字节。
size最大可取值是4000,如果你指定了size是4000,然后插入超过4000子句的字符串,oracle会字段截取先进入库的4000字节,后面的它就不管了。
如果你知道的size没有4000,而是其他一个数字如200,那么如果你插入的字符串超过200,oracle就会返回一个错误。
size必须指定个正数。
有关VARCHAR类型,它其实和VARCHAR2一样,是它的同义词。
但是不宜指定VARCHAR作为数据类型,因为你不确定oracle哪天头脑发热,把VARCHAR的含义改掉了或者不支持它,那就完了。
2.CHAR(size)固定长度的字符串,最大size个字节。
如果你插入的字符串没有size个字节,那么oracle就会使用空白来填充它。
size最大可取值是2000,如果你指定了size是2000,然后插入超过2000子句的字符串,oracle会字段截取先进入库的4000字节,后面的它就不管了。
如果你知道的size没有2000,而是其他一个数字如200,那么如果你插入的字符串超过200,oracle就会返回一个错误。
如果你不指定size,那么它的默认值就是1。
3.LONG用于存储字符串,最多可以存储2G个字节的字符。
LONG类型有很多的限制,已经不被oracle推荐使用,大家最好不要用,会有一系列操作限制,导致一些隐形的问题。
4.CLOB存储字符串,即支持可变长度的,也支持固定长度的字符串,最大可支持到4G字节。
5.NUMBER(p,s)oracle中唯一存储数字的数据类型。
最大最小值分别为9.99...999 ×10125(38个9后面跟了88个0,因此它的数字精度就是38)和1.0×10-130。
如果你使用的数字超过这个数字,那么oracle返回错误。
p表示这个数字一共有多少个数字组成,范围是从1到38。
s就表示0右边的精度有多少位,就小数是多少位,范围是-84到127。
p和s要么都不指定,就表示范围是使用最大值,即p=38,s=127;要么就指定p,那么s=0;要么都必须同时指定。
不存在只指定s不指定p的情况。
下面给个例子,来详细说明这个类型:下面是“不正常”情况,s的值大于p的值的情况:从上面的例子可以看到,s是表示小数点右边的有多少个数字,即有多少为小数,如果它为负值,那么就表示小数点左边有多少位数字;当所指定的数字超过了这个s精度指定的访问,那么oracle就执行四舍五入。
p表示的是一共有多少为有效数字,不能超过这个有效数字,超过了就返回相应的错误。
6.DATE时间类型,oracle存储时间的数据包括:世纪、年、月、日、时、分、秒。
可见它只精确到秒级别。
往date类型你们插入数据要使用函数to_date(),把date类型数据转换为字符串类型数据,要使用to_char()函数。
有关日期的计算:可以对日期进行加、减计算,不能对其进行乘法和除法运算。
指定一个数字,oracle 对其附加天作为单位来和日期进行计算。
如sysdate-1 就表示昨天,sysdate+1就表示明天,sysdate-7就表示一周以前,而sysdate-10/1440就表示10分钟以前。
7.TIMESTAMP(factional_seconds_precision )TIMESTAMP表示时间戳类型,就是一个时间点。
oracle存储的时间戳数据包括:年、月、日、时、分、秒。
可见它不存储世纪。
对于faction_seconds_precision,表示将秒精确到哪个级别,它的值是从0到9,默认是6,如果是3,就表示把秒精确到毫秒级别,9就表示精确到“纳米”级别。
看个例子就明白了:SQL> select to_char(systimestamp,'yyyy-mm-dd,hh24:mi:ssxff') time from dual;TIME--------------------------2007-09-19,11:20:41.035829存储TIMESTAMP类型,要使用TO_TIMESTAMP()函数,显示TIMESTAMP类型数据要使用TO_CHAR()函数,如例子中那样。
第二节NULLnull表示no value,unknown,它不表示0,也不表示一个空的字符串。
SQL函数中的NULL所有的函数,除了REPLACE , NVL , CONCAT以外,如果你用null作为它的参数,那么结果就是返回null。