Oracle用法

create  table student

(

sid number(4) primary key,

sname varchar2(200), --与mysql有点不同

salary number(5,2)--有效位数5,小数2位

sdate  date 

)

insert into student values(1,'小明',110.12,to_date('1997-08-30','yyyy-MM-dd')); --to_date 定义时间

--以前的数据不用管,今天新增的数据需要加上检查约束? sname>2    关键字:enable novalidate 

alter table  student  add constraint  ck_student_sname  check(length(sname)>2)  enable  novalidate ;

create table stu

(

mid number(4) primary key,

myclob  clob,

myblob blob

)

create table  grade

(

gid number(4) primary key,

gname varchar2(200)

)

truncate table grade;

truncate:删除整个数据表的记录,但不会删除表结构。

truncate、drop、delete的区别:

1.truncate和delete只删除数据不删除表的结构。drop语句将删除表的结构被依赖的约束(constrain),触发器(tigger),索引(index);

依赖于该表的存储过程/函数将保留,但是变为invalid状态。

2.delete语句是DML,这个操作会放到rollback、segement(段)中,事务提交之后才生效;如果有相应的触发器,该执行的时候会被触发。

truncate、drop是DDL,操作会立即生效,原数据不放到rollback、segement(段)中,不能回滚,操作不触发tigger。

3.速度:drop>truncate>delete

4.安全性:小心使用drop和truncate,尤其是没有备份数据表的时候,使用上,想删除部分数据行用delete,带上where指定语句,回滚要足够大。删除表,用drop。想保留表而将所有数据删除. 如果和事务无关,用truncate即可。

如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据

--主键约束

alter table  stu add constraint  pk_stu_sid primary key(sid);

--检查约束

alter table stu add constraint  ck_stu_sname  check(length(sname>2));

--1-120之间

alter table  stu add  constraint  ck_stu_sage  check(sage  betwwen  1 and 120);

--唯一约束

alter  table  stu  add   constraint  up_stu_scard   unique(scard);

--外键约束

alter table stu add constraint   fk_stu_gid  foreign key(gid)   references   grade(gid);

--删除约束

alter  table   stu drop  constraint  pk_stu_sid;

--删除info数据表 经过回收站(慎用,可以用来写demo)

drop table info;   

--把回收站的数据表进行恢复

flashback  table info  to before drop; 

--分页(需要伪列)

/*

子查询

1.select 后面

2.from 后面

3.where  后面

参数1:(当前页-1)*每页显示条数

参数2:(当前页-1)*每页显示条数加上每页显示条数

*/

select * from (

select  a.*,rownum  rn   from student a  where rownum<=6

)  t  where t.rn>3;

--只要表结构,不需要数据,不需要约束。

create  table student _temp as  select * from  student where  1=2;  --注意:student_temp是不需要提前创建的

--事务

/*

   作用:有些业务是需要回滚的:比如银行转账过程中出现一些故障

   保证数据一致性:前后要一致

*/

insert  into  表名 values(1,'李逍遥');

savepoint   sp_1;--设置一个回滚点

insert into 表名 values(2,'赵灵儿');

rollback  to sp_1; --返回到回滚点

commit;  --提交

--dual:伪表(虚拟表)

select  1+2 from dual;

/*

+ -  *  / 会自动把字符串中的数字转换出来运算

*/

select  '23'+'12.25' from dual;  --35.25

select '12a'+'12.25' from dual; --无效字符a 

--求余数  mod()   求模函数

select    mod(23,2)  as 余数 from dual;

--模糊查询

_代表一个字符

select * from  student  t  where t.sname  like  '小_';

[]oracle识别问题

select *  from  student  t  where t.sname  like '小[名]';

select  * from student  t  where  t.sname like '小%';

--连接符  ||   查询的过程中作用不大,plsql输出作用比较大

select '姓名:' || t.sname  from student  t ;

--系统时间

select  sysdate  系统时间 from dual;

--月份差值   months_between

select  months_between(sysdate,t.sdate) as 月份差值 from student t;

select  months_between (sysdate,to_date('1997-08-30','yyyy-MM-dd'))/12 年 from dual;

--add_months  添加的是月份   比如在车贷、房贷、贷款之类

select add_months(sysdate,30) from dual;

--trunc  对日期不进行四舍五入

select trunc (sysdate)  as 日期 from dual;

--round 对时间四舍五入   过了 早上12.00 就会进1

select round(to_date('2018-07-31 00:00:00','yyyy-MM-dd hh24:mi:ss')) as 日期 from dual;

--extract:提取时间  年, 月,日    可以作运算

select   extract (year from  sysdate) as 年   from  dual;

--字符串函数    lower:转换小写   upper:转换大写

select  upper(lower('ABC')) as 转换 from  dual;

--两种替换方式

--translate:替换只能匹配(前面多少,后面就是替换多少)

--replace:后面替换有多少就替换多少

select  translate ('jack','j','b') from dual;

select replace('back','b','co') from dual;

--查找指定字符的位置(第1次)

select  instr ('admin','m') from dual; 

--如果能找到就返回实际位置(从1开始),如果找不到,返回0

select instr('admin','f') from dual;

--concat()   一次只能放两个字符串

select  concat(concat('a','b'),'v')  from dual;

--四舍五入

select round(23.1267852) from dual;

--不会四舍五入

select trunc(23.1267852) from dual;

--转换字符    转义"年"

select  to_char(sysdate,'yyyy"年"mm"月"dd"日"  hh24:mi:ss  dy')  from  dual;

select to_number('23') as 转换  from dual;

select  to_number('23a')as 转换 from dual; --无效字符a

--语法:  having 是分完组后,进行过滤条件

select 字段  from  表名  where 条件  group   by  字段  having  条件

select  gid,count(*)as 人数  from stu  group  by gid;

select  gid,count(*)as 人数 from stu  group by  gid having  count(*)>2;

猜你喜欢

转载自blog.csdn.net/brid_fly/article/details/81429992
今日推荐