日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Oracle常见操作汇总(转)

發(fā)布時(shí)間:2024/4/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle常见操作汇总(转) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言: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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。