Oracle常见操作汇总(转)
前言:Oracle學(xué)習(xí)也有十幾天了,但是呢,接下來(lái)還要學(xué)習(xí)許多其他的東西,并不能提步不前,所以在此總結(jié)了以下Oracle中常用的命令和語(yǔ)句,沒(méi)有語(yǔ)法都是實(shí)例,以便以后工作的時(shí)候隨時(shí)翻看,畢竟是自己的東西,一看就懂。
有關(guān)的語(yǔ)句和操作基本都是按照實(shí)戰(zhàn)中的順序來(lái)總結(jié)的,比如創(chuàng)建用戶,建表,序列初始化,插入數(shù)據(jù)的順序呢。
這篇文章的基表是大家最為熟知的Scott用戶下的emp員工表,dept部門(mén)表以及salgrade薪水等級(jí)表,一切的語(yǔ)句都是圍繞它寫(xiě)的。
下面來(lái)看一下Oracle中常用的操作都有哪些吧!
一.用戶的有關(guān)操作。
- 創(chuàng)建用戶
| 1 | create user scott identified by 123456; |
- 給用戶分配權(quán)限
| 1 2 3 | grant connect,resource to scott; grant create view to scott; grant create synonym to scott; |
- 撤銷用戶權(quán)限
| 1 2 3 | revoke connect,resource from? scott; revoke create view from scott; revoke create synonym from scott; |
- 刪除用戶
| 1 | drop user scott cascade; |
- 修改用戶密碼
| 1 2 3 4 5 6 7 | alter user scott identified by 123456;--命令修改 conn scott/123456 password;--命令可視化修改1 connect scott/123456 password;--命令可視化修改2 |
- 設(shè)置用戶是否鎖定
| 1 2 | alter user scott account lock; alter user scott account unlock; |
二.表空間的有關(guān)操作。
- 創(chuàng)建表空間
| 1 2 3 4 | create tablespace mysapce datafile 'D:a.ora' size 10M--絕對(duì)路徑和大小 extent management local uniform size 1M;--每個(gè)分區(qū)的大小 |
- 擴(kuò)展表空間
| 1 2 | alter tablespace mysapce add datafile 'D:b.ora' size 10M; |
- 為ORACLE對(duì)象指定表空間
| 1 2 | create user space_text identified by 123456 account unlock default tablespace mysapce; --創(chuàng)建表、索引也可以指定表空間;一旦指定,表空間無(wú)法修改。 |
- 刪除表空間
| 1 | drop tablespace mysapce; |
三.DDL的有關(guān)操作。
- 表table
| 1 2 3 4 5 6 7 8 9 10 11 | --創(chuàng)建員工表 ? CREATE TABLE EMP( ? EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY, ??? ENAME VARCHAR2(10), ??? JOB VARCHAR2(9), ??? MGR VARCHAR(10),??? --上司 ??? HIREDATE DATE,??? --入職日期 ??? SAL NUMBER(7,2),? --薪水 ??? COMM NUMBER(7,2), --津貼 ??? DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT ? ); |
?
| 1 2 3 4 5 6 | --創(chuàng)建部門(mén)表 CREATE TABLE DEPT( DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY, ?? DNAME VARCHAR2(14) , ?? LOC VARCHAR2(13) --地址 ); |
?
| 1 2 3 4 5 6 | --創(chuàng)建工資等級(jí)表 ? CREATE TABLE SALGRADE( ? GRADE NUMBER, --等級(jí) ??? LOSAL NUMBER, --等級(jí)中最低的薪水 ??? HISAL NUMBER? --等級(jí)中最高的薪水 ? ); |
- 視圖view
| 1 2 3 4 5 6 7 8 | --為emp表的empno,ename,sal和dept表的dname和salgrade表的grade創(chuàng)建一個(gè)視圖 ? create view emp_dept_salgrade ? as ? select e.empno,e.ename,e.sal,d.dname,s.grade from ? emp e inner join dept d using(deptno) ? inner join salgrade s on e.sal between s.losal and s.hisal; ? ? select * from emp_dept_salgrade;--通過(guò)視圖查詢 |
- 序列sequence
| 1 2 3 4 5 6 7 8 9 10 | --為員工表的EMPNO創(chuàng)建一個(gè)序列 ? create sequence emp_empno_seq ? start with 1001 ? increment by? 1 ? nomaxvalue ? nocycle ? cache 10; ? select emp_empno_seq.currval from dual;<span style="color: rgb(0, 128, 0);">查詢序列的當(dāng)前值</span> ? select emp_empno_seq.nextval from dual;<span style="color: rgb(0, 128, 0);">查詢序列的下一個(gè)值</span> |
- 同義詞synonym
| 1 2 3 4 5 6 | --為視圖emp_dept_salgrade創(chuàng)建同義詞 ? create synonym eds for? emp_dept_salgrade; ? select * from eds;<span style="color: rgb(0, 128, 0);">通過(guò)視圖的同義詞來(lái)查詢視圖中的數(shù)據(jù) </span> |
- 觸發(fā)器trigger
| 1 2 3 4 5 6 7 | --為員工表的empno創(chuàng)建一個(gè)自動(dòng)插入的觸發(fā)器 ? create or replace trigger emp_empno_tri ? before insert on emp ? for each row ? begin ??? :new.empno:=emp_empno_seq.nextval;<span style="color: rgb(0, 128, 0);">--語(yǔ)句級(jí)(for each row)觸發(fā)器里面可以:new.列名來(lái)給進(jìn)行操作。</span> ? end; |
- 存儲(chǔ)過(guò)程procedure
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | --創(chuàng)建一個(gè)可以控制行數(shù)的乘法表的過(guò)程。 create or replace procedure nine_nine(nine_line in number) as begin ? for? i in 1..nine_line loop ??? for j in 1..i loop ????? dbms_output.put(i||'*'||j||'='||i*j||'? '); ??? end loop; ????? dbms_output.put_line(''); ? end loop; end; --調(diào)用這個(gè)乘法過(guò)程 set serveroutput on; execute nine_nine(9); |
- 存儲(chǔ)函數(shù)function
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | --創(chuàng)建一個(gè)求1!+2!+..+20!的值的存儲(chǔ)函數(shù) create or replace function one_tw return number as value_sum number:=0; value_loop number:=1; begin ? for i in 1..20 loop ??? value_loop:=value_loop*i; ??? value_sum:=value_sum+value_loop; ? end loop; ? return value_sum; end; select one_tw() from dual;<span style="color: rgb(0, 128, 0);">--調(diào)用函數(shù)</span> <span style="color: rgb(0, 128, 0);">備注:存儲(chǔ)函數(shù)的調(diào)用可以放在表達(dá)式的位置,即表達(dá)式在哪里成立,它就可以在哪里調(diào)用。</span> |
- 事務(wù)rollback、commit、savepoint
四.DML的有關(guān)操作。
- 插入數(shù)據(jù)insert
| 1 2 3 4 5 6 7 8 9 10 11 | --dept-- INSERT INTO DEPT select 10,'ACCOUNTING','NEW YORK' from dual union select 20,'RESEARCH','DALLAS' from dual union select 30,'SALES','CHICAGO' from dual union select 40,'OPERATIONS','BOSTON' from dual; commit;??????????????????????????????????? <span style="color: rgb(0, 128, 0);">--使用Oracle中的多行插入方法,關(guān)鍵字union,select自己想要的數(shù)據(jù),與dual偽表組建一個(gè)完整的結(jié)構(gòu)。 </span> |
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | --emp-- INSERT INTO EMP(ename,job,mgr,hiredate,sal,comm,deptno) select 'SMITH','CLERK',1009,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20 from dual union select 'ALLEN','SALESMAN',1006,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30 from dual union select 'WARD','SALESMAN',1006,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30 from dual union select 'JONES','MANAGER',1009,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20 from dual union select 'MARTIN','SALESMAN',1006,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30 from dual union select 'BLAKE','MANAGER',1009,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30 from dual union select 'CLARK','MANAGER',1009,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10 from dual union select 'SCOTT','ANALYST',1004,to_date('13-10-87','dd-mm-rr')-85,3000,NULL,20 from dual union select 'KING','PRESIDENT',1007,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10 from dual union select 'TURNER','SALESMAN',1006,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30 from dual union select 'ADAMS','CLERK',1009,to_date('13-10-87', 'dd-mm-rr')-51,1100,NULL,20 from dual union select 'JAMES','CLERK',1009,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30 from dual union select 'FORD','ANALYST',1004,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20 from dual union select 'MILLER','CLERK',1004,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10 from dual; commit;???????????????????????????????? <span style="color: rgb(0, 128, 0);">--這里使用了觸發(fā)器emp_empno_tri來(lái)自動(dòng)插入emp表的empno員工編號(hào)</span> |
?
| 1 2 3 4 5 6 7 | --salgrade-- INSERT INTO SALGRADE VALUES (1,700,1200); INSERT INTO SALGRADE VALUES (2,1200,1400); INSERT INTO SALGRADE VALUES (3,1400,2000); INSERT INTO SALGRADE VALUES (4,2000,3000); INSERT INTO SALGRADE VALUES (5,3000,9999); commit; |
- 更新數(shù)據(jù)update
| 1 | update emp set sal=3000 where empno=1004; |
- 刪除數(shù)據(jù)delete
| 1 | delete from emp where empno=1004;<span style="color: rgb(0, 128, 0);">--from可以省略</span> |
- 查詢數(shù)據(jù)select
查詢數(shù)據(jù)是DML語(yǔ)句中最關(guān)鍵的部分,也是最難的部分,在這里有許多圍繞scott用戶的實(shí)例,都是稍微復(fù)雜一點(diǎn)的查詢,簡(jiǎn)單的就沒(méi)必要寫(xiě)了。
1.最常用。
?| 1 2 3 | select * from emp; select * from dept; select * from salgrade; |
2.內(nèi)部連接。
2-1.查詢每個(gè)員工所在的部門(mén),使用where連接.
?| 1 | select e.empno,e.ename,d.dname from emp e,dept d where e.deptno=d.deptno; |
2-2.inner join on連接.
?| 1 | select e.empno,e.ename,d.dname from emp e inner join dept d on e.deptno=d.deptno; |
2-3.inner join using連接.
?| 1 | select e.empno,e.ename,d.dname from emp e inner join dept d using(deptno); |
3.外部連接。
3-1.左外連接:例如:查詢出部門(mén)的員工的情況(顯示所有部門(mén)).
?| 1 | select e.ename,d.dname from emp e left join dept d using(deptno); |
3-2.右外連接用(+).
?| 1 | select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno(+); |
3-3.右外連接:例如:查詢出所有的員工的部門(mén)情況(顯示了所有員工).
?| 1 | select e.ename,d.dname from emp e right join dept d using(deptno); |
3-4.右外連接用(+).
?| 1 | select e.ename,d.dname from emp e,dept d where e.deptno(+)=d.deptno; |
4.自連接。
4-1.查詢出員工及他的上級(jí)。
?| 1 2 3 | select a.ename as 員工,b.ename as 上級(jí) from emp a ,emp b where a.mgr=b.empno;? select a.ename as 上級(jí),b.ename as 上級(jí) from emp a inner join emp b on a.mgr=b.empno; |
5.子查詢。
5-1.查詢工資高于平均工資的員工信息.
?| 1 | select * from emp where sal>(select avg(sal) from emp); |
5-2.使用ANY查詢?nèi)我鉂M足工資低于最低檔工資的員工信息.
?| 1 | select * from emp where sal<any(select losal from salgrade); |
5-3.查詢所有員工所屬部門(mén).
?| 1 | select dname from (select distinct dname from dept); |
5-4.查詢滿足大于每個(gè)部門(mén)的最低工資的員工信息.
?| 1 | select * from emp where sal>all(select min(sal) from emp group by deptno); |
5-5.查詢出每個(gè)部門(mén)中,高出本部門(mén)平均工資的員工的雇員號(hào)和姓名.
?| 1 2 | select empno as 雇員號(hào),ename as 姓名 from emp outer where sal> ? (select avg(sal) from emp inner where inner.deptno=outer.deptno ); |
5-6.查詢不在部門(mén)10的員工信息:注意子查詢中的1,由于只關(guān)心子查詢是否返回TRUE值,使用1可以提高查詢的效率.
5-6.1.EXISTS子查詢效率高于IN子查詢.
?| 1 | select * from emp a where not exists (select 1 from emp b where a.deptno=10); |
5-6.2.in的效率低,但比較好理解.
?| 1 | select * from emp where deptno not in 10; |
5-7.查詢emp表中可以管理別的員工的員工.
?| 1 | select ename? from emp a? where exists(select ename? from emp b where a.empno=b.mgr); |
5-8.刪除中部門(mén)重復(fù)行.
?| 1 | delete emp where rowid not in (select min(rowid) from emp group by deptno); |
5-9.查找emp表第6-10條記錄.
?| 1 2 | select * from(select rownum m,ename,sal,deptno from emp where rownum<=10) where m>5; |
http://www.cnblogs.com/bzx888/p/4820712.html
轉(zhuǎn)載于:https://www.cnblogs.com/softidea/p/4822078.html
總結(jié)
以上是生活随笔為你收集整理的Oracle常见操作汇总(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Web APi之EntityFramew
- 下一篇: 图片裁剪之圆形头像