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

 

结束!。。。。

posted @ 2017-10-26 19:52  EasilyAi  阅读(223)  评论(0编辑  收藏  举报