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
?
?
?