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

  1. 1.       BINARY_FLOAT BINARY_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.       EXISTS NOT EXISTS IN NOT IN  的比较

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

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

  1. 5.       START WITH CONNECT 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()

原文地址:https://www.cnblogs.com/Azhu/p/2431132.html