select sal+100 from emp;
oracle null 不占存储空间
null处理:select sal+nvl(comm,0) from emp;
to_char 日期处理
select to_char(hiredate,"YYYY-MM-DD") from emp;
排除重复
select destinct job from emp;
between A and B 闭区间 a《b
转义
where ename like '王?_' escape '?'
函数---oracle自定义---多行函数
---单行函数
---用户自定义函数
localtimestamp
sysdate
日期型数据与数值型数据操作
1=1天
sysdate+1/24/60 -----加一分钟
case表达式
select case deptno when 10 then sal*1.1
when 20 then sal*1.2
when 30 then sal*1.3
else sal*1.5
end raise_sal from emp;
decode用法
select ename ,sal ,decode(deptno,10,sal*1.1,20,sal*1.2,30,sal*1.3,sal*1.5) raise_sal from emp;
自连接
select a.ename worker,b.ename manager from emp a,emp b where a.mgr=b.empno;
boss的mgr为null,自连接查不出来
添加外连接,就可以查出(加在显示少的行)
select a.ename worker,b.ename manager from emp a,emp b where a.mgr=b.empno(+);
avg() 计算平均值不计null
group by 不能跟别名
where 比having更高效,where是查询数据字典,having是分组后过滤,一个在前一个在后。
select deptno,sum(sal) from emp
where deptno !=30
group by deptno
having sum(sal)>1500;select里出现的必须在group by子句中
单行子查询 返回一行 括号必须在右边
多行子查询 返回多行 in,all,any
select ename from emp where empno not in ( select nvl(mgr,0) from emp);
not in 子句返回值含有null时查询结果会出错
cal sal format "$99.999.99" 设定格式
create table emp1 as select * from emp where 1=2;创建表根据emp,不会复制数据,约束
insert into emp1 select * from emp;
rownum---行号
select * from
(select * from emp order by sal desc)
where rownum <=3;得到工资前三的数据
数据库定义语言 ddl
char(60) 不可变,空格补齐
varchar2(4000) 最长4000
number(m,n)默认n等于0,及取整
事物处理
以下情况会自动提交事物:
1.执行ddl语句
2.执行dcl语句
3.退出sql*plus
提交事物 commit
设置保存点 savepoint a
事物回退 rollback to a
全部回退 rollback