oracle:plsql学习总结,oracle database 10g sql 开发指南

  1. 1.BINARY_FLOATBINARY_DOUBLE的优点:

1. 前者32位后者64位,存储时候前者5byte 后者9byte,number 可能需要多大22byte。

2. 表示的范围更广(相对number)

3. 执行速度更快,因为两者运算通常在硬件中执行,而number 需要先经过软件转换。

4. 运算封闭,对于两者的运算结果要么是数字,要么是一个特殊值。如BINARY_FLOAT 除以一个BINARY_FLOAT结果是BINARY_FLOAT.

5. 取整透明,两者是以二进制来表示数字的,而number 是以十进制表示。例如,一个十进制的浮点数要以最近的十进制位置进行取整,而一个二进制的浮点数则以最近的二进制位置进行取整。

特殊值

描述

BINARY_FLOAT_NAN

非BINARY_FLOAT类型的数字(NotaNnum)

BINARY_FLOAT_INFINITY

BINARY_FLOAT类型的无穷大(INF)

BINARY_DOUBLE_NAN

非BINARY_DOUBLE类型的数字(NotaNnum)

BINARY_DOUBLE_INFINITY

BINARY_DOUBLE类型的无穷大(INF)

Eg:

INSERT INTO table_name( type_float, type_double) VALUES

{ BINRARY_FLOAT_INFINITY, BINARY_DOUBLE_INFINITY};

  1. 2.外连接的符号:(+

Eg:

SELECT p.name , pt.name FROM products p, product_type pt WHERE

p.product_type_id = pt.product_type_id (+)

pt 表中的NULL 会保留,属于左连接。如果(+)放左边属于右连接

注意

1. 只能在连接的一端使用外连接操作符,而且不能再两端同时使用外连接操作符。

2. 不能同时使用外连接条件和IN 操作符:WHERE p.COLUNM (+) IN (1,2,3)

3. 不能同时使用一个外连接条件和另外一个使用or 操作符的连接条件:WHERE p.COLUNM(+) = pt.COLUNM OR p.COLUNM 1;

可以参考oracle 的 SQLReference手册。

SQL 语法执行:

1. FROM table1 t1 INNER JOIN table2 t2 ON t1.COLUNM = t2.COLUNM

2. FROM table1 t1 INNER JOIN table2 t2 USING( COLUNM)

3. 笛卡尔连接: FROM t1 CROSS JOIN t2

  1. 3.一些函数:

NANVL(x,value)如果x匹配NaN,就返回value ,否者返回x

ASCII(x)

CHR(x)

INITCAP(x)

INSTR(x, find_string, [strart]),[occurence])

LENGTH(x)

LOWER(x)

LPAD(x, width [,pad_string])

LTRIM(x [,trim_string] )

……

LTRIM(x [,trim_string]), TRIM()和 TRIM(trim_string from x )

左边截取,右边截取,左右同时截取,x为源字符串,trim_string 为需求截取的 ‘1235’ ,为空即为空格。

如 x=123534535242433aaaaaaaaa , trim_string =’12345’

结果为 : aaaaaaa

BITAND(x,y) 对x 和 y 进行 位与 操作。

CEIL(x) 返回大于或等于x 的最小整数

FLOOR(x) 返回小于或等于x 的最大整数

ROUND(x [,y]) 对x四舍五入,y为对即为小数进行取整,y<0即对小数点左边进行取整

TRUNC(x [,y] ) 对x进行截取

CAST(x AS type_name) 将x 转换为tpye_name类型

BIN_TO_NUM(x)

CHARTOROWID(x)

CONVERT(x, source_char_set, dest_char_set) 一个字符集到另一个字符集

DECODE(x, search, result ,default)

TRANSLATE(x, from_string, to_string) 对应转换

TO_CHAR(x [,format] )可以控制格式

聚集函数: avg(x)等, MEDLAN(x)返回x的中间值

  1. 4.EXISTSNOT EXISTSINNOT IN的比较

EXISTS 只检查行的存在性,而IN 则检查实际值的存在性.

对于一个列如果包含NULL,NOT EXISTS 返回TRUE,NOT IN 返回 FALSE

  1. 5.START WITHCONNECT BY

SELECT [LEVEL,] column, expression

FROM table

[WHERE where_clause]

[START WITH start_condition] [CONNECT BY PRIOR prior_condition];

LEVEL 是一个“伪列”,隐藏的,表示位于数的第几层,根节点为1

从上到下历遍,employee_id = manager_id

从下到上历遍, manager_id = employee_id

START WITH 可以不从根节点开始

同记层数可以写 COUNT(DISTINCT LEVEL)

  1. 6.ROLLUPCUBE

ROLLUP 为每个分组返回一条小计记录,并为全部分组返回总计

GROUP BY ROLLUP(division_id );

CUBE 返回所有列组合的小计信息,同时在最后显示总计信息

GROUP BY CUBE(division_id);

GROUPING(division_id) 对输入列返回0或1,如果为空返回1, 非空返回0

GROUPING SETS(division_id) 只返回统计信息

GROUPING_ID()