- 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};
- 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
- 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 的中间值
- 4. EXISTS 和 NOT EXISTS 与IN 和 NOT IN 的比较
EXISTS 只检查行的存在性,而IN 则检查实际值的存在性.
对于一个列如果包含NULL,NOT EXISTS 返回TRUE,NOT IN 返回 FALSE
- 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)
- 6. ROLLUP、CUBE
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()