1、DML:insert、update、delete、merge
2、DDL: create、alter、drop、truncate
3、DCL:grant、revoke
4、commit、rollback、savepoint
其中自己用的较少的:
*merge:
语法如下
MERGE INTO [your table-name] [rename your table here]
USING ( [write your query here] )[rename your query-sql and using just like a table]
ON ([conditional expression here] AND [...]...)
WHEN MATHED THEN [here you can execute some update sql or something else ]
WHEN NOT MATHED THEN [execute something else here ! ]
示例:
merge into products p using (select * from newproducts) np on (p.product_id = np.product_id)
when matched then
update set p.product_name = np.product_name delete where p.product_id = np.product_id where np.product_name like 'OL%'
when not matched then
insert values(np.product_id, np.product_name, np.category) ;
在Oracle 10g中MERGE有如下一些改进:
1、UPDATE或INSERT子句是可选的
2、UPDATE和INSERT子句可以加WHERE子句
3、在ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表
4、UPDATE子句后面可以跟DELETE子句来去除一些不需要的行
*revoke
Grant和revoke主要是给表、视图、列上分配或失去权限
grant 权限 on 表名/视图 to 用户;
revoke 权限 on 表名/视图 from 用户;
*DENY:
在安全系统中创建一项,以拒绝给当前数据库内的安全帐户授予权限并防止安全帐户通过其组或角色成员资格继承权限。
DENY CREATE DATABASE, CREATE TABLE TO Mary, John;
DENY INSERT, UPDATE, DELETE ON authors TO Mary, John, Tom;
*常用判断:
+-*/ || as is null distinct order by (desc) between and < > <> != in not in like like '%*_%' excape '*' or and not
*常用函数
字符函数:Upper、Lower、initcap、concat(‘a’,'b') ||、Substr Select substr('abcde',2,2) from dual;--前数第2位开始取2位 、length、replace、instr、lpad、rpad、trim
*数值函数
round、mod取余、trunc
*日期函数
months_between(),add_months(),next_day() next_day( date, weekday ) 例next_day(sysdate,'星期二'),last_day
**转换函数
to_char,to_number,to_date
to_char(timestamp, text)
|
text
|
把 timestamp 转换成 string
|
to_char(timestamp 'now','HH12:MI:SS')
|
to_char(int, text)
|
text
|
把 int4/int8 转换成 string
|
to_char(125, '999')
|
to_char(float, text)
|
text
|
把 float4/float8 转换成 string
|
to_char(125.8, '999D9')
|
to_char(numeric, text)
|
text
|
把 numeric 转换成 string
|
to_char(numeric '-125.8', '999D99S')
|
to_date(text, text)
|
date
|
把 string 转换成 date
|
to_date('05 Dec 2000', 'DD Mon YYYY')
|
to_timestamp(text, text)
|
date
|
把 string 转换成 timestamp
|
to_timestamp('05 Dec 2000', 'DD Mon YYYY')
|
to_number(text, text)
|
numeric
|
把 string 转换成 numeric
|
to_number('12,454.8-', '99G999D9S')
|
**通用函数
case deptno
when 10 then '财务部'
when 20 then '研发部'
when 30 then '销售部'
else '未知部门'
end 部门
from emp;
decode(deptno, 10, '财务部',
20, '研发部',
30, '销售部',
'未知部门')
部门
from emp;
CASE sex
WHEN ' 1 ' THEN ' 男 '
WHEN ' 2 ' THEN ' 女 '
ELSE ' 其他 ' END
-- Case搜索函数
CASE
WHEN sex = ' 1 ' THEN ' 男 '
WHEN sex = ' 2 ' THEN ' 女 '
ELSE ' 其他 ' END
[Grouping(filed),]
[Grouping_id(filed1,filed2,…)]
From tablename
Where condition
[Group by {rollup|cube}(filed,filed2)]
[having condition]
[order by filed1]
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚合函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
使用order by排序时order by子句置于group by 之后 并且 order by 子句的排序标准不能出现在select查询之外的列。
在使用group by 时,有一个规则需要遵守,即出现在select列表中的字段,如果没有在组函数中,那么必须出现在group by 子句中。
Rollup:意思有”卷起,汇总”的意思,他可以在使得在其括号中的字段,按从右到左的顺序分别group后显示,类似我们用多个group by 语句,然后union all起来
select a,b,c,sum(n) total from testgroup group by rollup(a,b,c);
Cube意思是立方,使用该操作符可以对操作符内的字段,进行遍历组合汇总,例如cube(a,b,c),那么就会产生8种组合结果,分别如下”a-b-c”,”a-b”,”a”,”a-c”,” b-c”,”b”,”c”,”空”,
select a,b,c,sum(n) total from testgroup group by cube(a,b,c);
grouping(filed)函数
使用grouping 函数必须先理解rollup 和cube操作符,那么grouping函数有什么用呢?在日常应用中,我们通过rollup或者cube对汇总进行了汇总,汇总后的结果往往要传送到应用程序端,在应用程序端我们必须要有一个依据来判断某行数据是不是按照rollup或cube进行汇总,grouping函数可以用来产生这个依据,他可以接收一个参数,判断该参数是否为null,是则返回1,否则返回0,我样可以据此来判断该是否按某列进行汇总统计的,当然在实验应用中,0和1看起来不那么直观,我们可以使用decode或者case函数进行转议,让查看结果看起来更直观,请看以下例子:select grouping(a) ca,grouping(b) cb,grouping(c) cc, a,b,c,sum(n) from testgroup group by rollup(a,b,c);
使用grouping_id(filed1,file2,…)函数
使用grouping函数有时候感觉不是那么灵活的,他只能接收一个字段,而grouping_id()函数则可以接收多个字段,GROUPING_ID()函数可以接受一列或多列,返回按GROUPING位向量进行计算的十进制值。下面我们通过一个例子来研究grouping_id函数是如何按照grouping函数的位向量进行计算的。
select grouping(a) ca,grouping(b) cb,grouping_id(a,b) caandb, a,b,sum(n) from testgroup group by rollup(a,b);