毕业两年了,从毕业到现在一直在使用Sybase数据库,渐渐的把Oracle给淡忘了,对Oracle也越来越陌生了,这两天抽出了几个小时把Oracle复习了一下,感觉到了很多新意,在这里把随学笔记记录下来,自己想看的时候就看看:
alter user scott account unlock;
desc tablename//查看表结构
oracle语句中字符串连接符是 || 比如 select ename||sal from emp;
表示一个字符串都是用一个单引号引起来 ‘’;比如:select ename||'liuyi' from emp;
引号里面有单引号 要用两个单引号才能表示一个单引号
distinct不取重复的值 如果是:select distinct deptno from emp;是去掉重复的deptno的值
如果是:select distinct deptno,job from emp;是去掉了 deptno和job的重复的组合
where语句后面的 >, <, <>,between .. and .. 相当与>=800 and <=1500
where 后面: job is null;job is not null;
oracle 处理日期:select ename,hiredate from emp
where hiredate>’20-2月-81‘不用日期格式的话 必须按照系统的格式
select ename from emp where ename like '%all%';
select ename from emp where ename like '_all%';
如果匹配字段中有%的话 要加转义字符‘/’
select ename from emp where ename like '%/%%'
自定义转义字符
select ename from emp where ename like '%$%%' escape '$'
select ename,sal,deptno from emp order by deptno asc,ename desc;//意思是先按照deptno的升序排列
在deptno排列的基础上如果deptno相同的话再按照ename的降序排列;
函数: lower 全部小写;upper 全部大写化;
substr是单行函数;select substr(ename,2,3) from emp;
chr转化成字符:select chr(65) from emp;
ascii是把字符转化成数字 selct ascii(a) from emp;
round 四舍五入 selct round(23.5456) from emp结果是24;
select round(23.5445,2) from emp 结果是23.54四舍五入到小数点的第二位
select round(23.5456,1) from emp 结果是23.5
select round(23.5456,-1) from emo 结果是20;
to_char select to_char(sal,'$99,999.9999') from emp;9就是代表一位数字 L代表本地货币
select to_char(sal,'L00000.000') from emp
日期格式化:to_date to_char
select to_char(hiredate,'YYYY-MM-DD HH:MI:SS') from emp;
select to_char(hiredate,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
HH24是格式话成24小时制
select empname from emp where hiredate>to_date('1999-9-9 12:34:56','YYYY-MM-DD HH:MI:SS');
to_number转化成数字:
select empname from emp where sal>to_number('$1345.4500','$99,999.9999');
空值判断函数:NVL
select ename,sal*12+NVL(comm,0) from emp;如果不为空值就取comm若为空值就取0;
多行函数:把多条记录产生一条输入
max最大值 min最小值 avg平均值 sum取和 count(*)
select to_char(avg(sal),'9999.99') from emp 取小数点后两位
count(*)是查看这个表有多少条记录 count里面要是挂字段的话 是取不为空值的总数
group by 分组函数 ,有多行函数时,字段要嘛出现在多组函数中,要嘛出现在了group by里面
select avg(sal) from emp group by deptno;
select deptno,job,max(sal) from emp group by deptno;
select deptno,ename from emp where select max(sal) from emo
group by deptno;
select deptno,max(sal) from emp group by deptno;
where是对单条记录进行过滤的,不能对多组组函数进行过滤,这时要用having
having 是对分组进行限制
例如:select avg(sal),deptno from emp group by deptno having avg(sal)
>2000;
子查询的关键是:把子查询看成一张表
例如:select ename,sal from emp join(select max(sal) max_sal,deptno from emp
group by deptno) t on(emp.sal=t.max_sal and emp.deptno=t.deptno);
自连接 即表自关联就是:给同一张表取不同的别名,当成不同的表去关联查询 例如:
select e1.ename,e2.ename from emp e1,emp e2 where e2.empno=e1.mgr;
等值连接
select e1.ename,e2.ename from emp e1 join emp e2 on(e1.mgr=e2.empno);
等值左外连接 select e1.ename,e2.ename from emp e1 left join emp e2 on(e1.mgr=e2.empno);
概念:左外连接是左边表里面有的数据而右面表没有的数据也取出来 同理右外连接 是把右边表里面多余的数据也给拿出来
right join 同样还有全连接既是把左右两边的多余的数据都给拿出来 是full join .. on
conn sys/manager as dba 赋权限 grand create table,create view to scott