Oracle复习(复习精简版v1.0)
自己没记不住的,超基础Oracle知识,新手可以看一下。
大多数例子是用scott用户中的emp表完成
排序:order by 列名 desc是降序,默认是升序;
update 表名 set 列名=‘’;
insert into 表名(列名[列名写全或者不写全]) values(要与列名对应);
模糊查询:like“%S%” 含有S ,like“s%”是以S开头的,like“S_”以S开头只有两字母的;
alter table 表名 add constraint 键名(列名)
若是外键 键名(列名)reference 表名(列);
alter table 表名 drop column 列名;
序列,常用于插入操作,可以自己增长,在mysql以及sqlserver中可以设置自增长,在Oracle中常用序列
create sequence 序列名
start with 1 从1开始
increment by 1 每次增长1
minvalue 1 最小值是1
nomaxvalue 没有最大值
cache 10(这里的cahe是指缓存10个数);
涉及到日期转换
select to_char(sysdate,“yyyy-mm-dd hh24:mi:ss”)from dual;
查询部门20中在1981年1月1日之后入职的员工:
select ename from emp where deptno=20 and hiredate > to_date(‘19810101’,‘yyyymmdd’);
分组
select avg(sal) from emp表名 grop by deptno列名
选出各个部门,各个职位的平均工资
select deptno,job avg(sal)
from emp
group by deptno,job
order by deptno;
group by/having/order by以及where的使用顺序为
where》group by》having》order by
多表连接查询
查询和部门10中工作相同的雇员的名字
先查询部门10中的工作 select distinct【这个用于去重】 job from emp where deptno=10;
则完整句子是 select ename,job from emp where job in【这里指在后面的范围之内】( select distinct【这个用于去重】 job from emp where deptno=10)and deptno<>10;
into关键字
select ename,job,into sname,sjob from emp where empno=7396;
三种循环:
①loop ②while i<=100 loop ③for i in reverse 1......100 loop
if i>100 then exit; s:=s+i; s:=s+i;
end if; i:=i+1; end loop;
s:= s+i; end loop;
i:=i+1;
end loop;
执行动态sql语句
daclare
strsql varchar2(100);
begin
strsql:=‘create table ttt(a mumber)’;
excute immediate(strsql);
end;
游标
declare
cursor【游标关键字】 c1 is select empno ,ename,job from emp;
begin
open c1;
fetch c1 into emp.empno,emp.ename,emp.job;
while c1%found loop
dbms_output.put_line();
fetch c1 into emp.empno,emp.ename,emp.job;
end loop;
close c1;
end;
触发器
表级触发器不管一次插入几行都只执行一次,行级触发器是插入一行就执行一次
create or replace trigger tri1
before update
on emp
for each row 这句话如果存在就是行级触发器,如果不存在就是表级触发器
begin
dbms_output.put_line(‘’);
若想让其终止运作,在这里抛出异常 raised ——————————————-;
end;
关于old:new
insert:没有old,有new
update:有old,有new
delete:没有old,没有new
结束!。。。。