当前位置: 代码迷 >> SQL >> sql札记
  详细解决方案

sql札记

热度:60   发布时间:2016-05-05 14:26:44.0
sql笔记

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

?

?

?

  相关解决方案