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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章