Oracle常见操作汇总(转)

前言:Oracle学习也有十几天了,但是呢,接下来还要学习许多其他的东西,并不能提步不前,所以在此总结了以下Oracle中常用的命令和语句,没有语法都是实例,以便以后工作的时候随时翻看,毕竟是自己的东西,一看就懂。

   有关的语句和操作基本都是按照实战中的顺序来总结的,比如创建用户,建表,序列初始化,插入数据的顺序呢。

   这篇文章的基表是大家最为熟知的Scott用户下的emp员工表,dept部门表以及salgrade薪水等级表,一切的语句都是围绕它写的。

下面来看一下Oracle中常用的操作都有哪些吧!

一.用户的有关操作。

  • 创建用户

?


1

create user scott identified by 123456;

  • 给用户分配权限

?


1

2

3

grant connect,resource to scott;

grant create view to scott;

grant create synonym to scott;

  • 撤销用户权限

?


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

  • 设置用户是否锁定

?


1

2

alter user scott account lock;

alter user scott account unlock;

  

二.表空间的有关操作。

  • 创建表空间

?


1

2

3

4

create tablespace mysapce

datafile ‘D:a.ora‘ size 10M--绝对路径和大小

extent management local

uniform size 1M;--每个分区的大小

  • 扩展表空间

?


1

2

alter tablespace mysapce

add datafile ‘D:b.ora‘ size 10M;

  • 为ORACLE对象指定表空间

?


1

2

create user space_text identified by 123456 account unlock default tablespace mysapce;

--创建表、索引也可以指定表空间;一旦指定,表空间无法修改。

  • 删除表空间

?


1

drop tablespace mysapce;

  

三.DDL的有关操作。

  • 表table

?


1

2

3

4

5

6

7

8

9

10

11

--创建员工表

  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

--创建部门表

CREATE TABLE DEPT(

DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,

   DNAME VARCHAR2(14) ,

   LOC VARCHAR2(13) --地址

);

  

?


1

2

3

4

5

6

--创建工资等级表

  CREATE TABLE SALGRADE(

  GRADE NUMBER, --等级

    LOSAL NUMBER, --等级中最低的薪水

    HISAL NUMBER  --等级中最高的薪水

  );

  

  • 视图view

?


1

2

3

4

5

6

7

8

--为emp表的empno,ename,sal和dept表的dname和salgrade表的grade创建一个视图

  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;--通过视图查询

  • 序列sequence

?


1

2

3

4

5

6

7

8

9

10

--为员工表的EMPNO创建一个序列

  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);">查询序列的当前值</span>

  select emp_empno_seq.nextval from dual;<span style="color: rgb(0, 128, 0);">查询序列的下一个值</span>

  • 同义词synonym

?


1

2

3

4

5

6

--为视图emp_dept_salgrade创建同义词

  create synonym eds for  emp_dept_salgrade;

  select * from eds;<span style="color: rgb(0, 128, 0);">通过视图的同义词来查询视图中的数据

</span>

  • 触发器trigger

?


1

2

3

4

5

6

7

--为员工表的empno创建一个自动插入的触发器

  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);">--语句级(for each row)触发器里面可以:new.列名来给进行操作。</span>

  end;

  • 存储过程procedure

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

--创建一个可以控制行数的乘法表的过程。

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;

--调用这个乘法过程

set serveroutput on;

execute nine_nine(9);

  • 存储函数function

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

--创建一个求1!+2!+..+20!的值的存储函数

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);">--调用函数</span>

<span style="color: rgb(0, 128, 0);">备注:存储函数的调用可以放在表达式的位置,即表达式在哪里成立,它就可以在哪里调用。</span>

  • 事务rollback、commit、savepoint

四.DML的有关操作。

  • 插入数据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中的多行插入方法,关键字union,select自己想要的数据,与dual伪表组建一个完整的结构。

</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);">--这里使用了触发器emp_empno_tri来自动插入emp表的empno员工编号</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;

  

  • 更新数据update

?


1

update emp set sal=3000 where empno=1004;

  • 删除数据delete

?


1

delete from emp where empno=1004;<span style="color: rgb(0, 128, 0);">--from可以省略</span>

  • 查询数据select

    查询数据是DML语句中最关键的部分,也是最难的部分,在这里有许多围绕scott用户的实例,都是稍微复杂一点的查询,简单的就没必要写了。

    1.最常用。

?


1

2

3

select * from emp;

select * from dept;

select * from salgrade;

    2.内部连接。

      2-1.查询每个员工所在的部门,使用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.左外连接:例如:查询出部门的员工的情况(显示所有部门).

?


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.右外连接:例如:查询出所有的员工的部门情况(显示了所有员工).

?


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.查询出员工及他的上级。

?


1

2

3

select a.ename as 员工,b.ename as 上级 from emp a ,emp b where a.mgr=b.empno; 

select a.ename as 上级,b.ename as 上级 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查询任意满足工资低于最低档工资的员工信息.

?


1

select * from emp where sal<any(select losal from salgrade);

      5-3.查询所有员工所属部门.

?


1

select dname from (select distinct dname from dept);

      5-4.查询满足大于每个部门的最低工资的员工信息.

?


1

select * from emp where sal>all(select min(sal) from emp group by deptno);

      5-5.查询出每个部门中,高出本部门平均工资的员工的雇员号和姓名.

?


1

2

select empno as 雇员号,ename as 姓名 from emp outer where sal>

  (select avg(sal) from emp inner where inner.deptno=outer.deptno );

      5-6.查询不在部门10的员工信息:注意子查询中的1,由于只关心子查询是否返回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.删除中部门重复行.

?


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

时间: 2024-10-12 21:18:34

Oracle常见操作汇总(转)的相关文章

【转】C#路径/文件/目录/I/O常见操作汇总

文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供给你一点有益的思路,如果你有好的建议,恳请能够留言,使这些内容更加完善. 主要内容: 一.路径的相关操作, 如判断路径是否合法,路径类型,路径的特定部分,合并路径,系统文件夹路径等内容: 二.相关通用文件对话框,这些对话框可以帮助我们操作文件系统中的文件和目录: 三.文件.目录.驱动器的操作,如获取

JS 数组常见操作汇总,数组去重、降维、排序、多数组合并实现思路整理

壹 ? 引 JavaScript开发中数组加工极为常见,其次在面试中被问及的概率也特别高,一直想整理一篇关于数组常见操作的文章,本文也算了却心愿了. 说在前面,文中的实现并非最佳,实现虽然有很多种,但我觉得大家至少应该掌握一种,这样在面试能解决大部分数组问题.在了解实现思路后,日常开发中结合实际场景优化实现,提升性能也是后期该考虑的. 本文主要围绕数组去重.数组排序.数组降维.数组合并.数组过滤.数组求差集,并集,交集,数组是否包含某项等知识点展开,附带部分知识拓展,在看实现代码前也建议大家先自

C#路径/文件/目录/I/O常见操作汇总

文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供给你一点有益的思路,如果你有好的建议,恳请能够留言,使这些内容更加完善. 主要内容:一.路径的相关操作, 如判断路径是否合法,路径类型,路径的特定部分,合并路径,系统文件夹路径等内容:二.相关通用文件对话框,这些对话框可以帮助我们操作文件系统中的文件和目录:三.文件.目录.驱动器的操作,如获取它们的

mysql常见操作汇总

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password mysql ERROR 1045 (28000): Access denied for user解决方法 问题重现(以下讨论范围仅限Windows环境): C:\AppServ\MySQL> mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 

Vim常见操作汇总

一.字符的替换及撤销(Undo操作) 1.替换和撤销(Undo)命令 替换和Undo命令都是针对普通模式下的操作 命令 说明 r+<待替换字母> 将游标所在字母替换为指定字母 R 连续替换,直到按下Esc cc 替换整行,即删除游标所在行,并进入插入模式 cw 替换一个单词,即删除一个单词,并进入插入模式 C(大写) 替换游标以后至行末 ~ 反转游标所在字母大小写 u{n} 撤销一次或n次操作 U(大写) 撤销当前行的所有修改 Ctrl+r redo,即撤销undo的操作 打开文件进行编辑:

Eclipse常见操作汇总(不断更新)

1 Eclipse将引用了第三方jar包的Java项目打包成jar文件的方法 方法一:使用Eclipse插件Fat Jar Eclipse Plug-In 使用Eclipse打包插件Fat Jar Eclipse Plug-In进行打包, Fat Jar Eclipse Plug-In是一个可以将Eclipse Java Project的所有资源打包进一个可执行jar文件的小工具,可以方便的完成各种打包任务.这也是推荐的方法.先给出官方下载地址: 安装插件 下载插件 Fat Jar Eclips

Oracle 常见的33个等待事件

一. 等待事件的相关知识: 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件. 1). 空闲等待事件指Oracle正等待某种工作,在诊断和优化数据库的时候,不用过多注意这部分事件. 2). 非空闲等待事件专门针对ORACLE的活动,指数据库任务或应用运行过程中发生的等待,这些等待事件是在调整数据库的时候需要关注与研究的. 在Oracle 10g中的等待事件有872个,11g中等待事件1116个. 我们可以通过v$event_name 视图来查看等待

[转]Oracle 常见的33个等待事件

一. 等待事件的相关知识: 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件. 1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不用过多注意这部分事件. 2). 非空闲等待事件专门针对ORACLE的活动,指数据库任务或应用运行过程中发生的等待,这些等待事件是在调整数据库的时候需要关注与研究的. 在Oracle 10g中的等待事件有872个,11g中等待事件1116个. 我们可以通过v$event_name 视图来查看等待

提升效率的Linux终端快捷操作汇总

很多普通 Linux 桌面用户都对使用终端感到排斥和恐惧,其实它没大家想的那么复杂,很多常见操作都可以直接在终端中进行,如:安装软件.升级系统等. 无论你是新手还是 Linux 终端使用的老鸟,系统极客在此为大家总结了提升终端命令执行效率的快捷操作汇总,希望能帮助你学习和提升效率. 移动定位光标 在终端中移动光标和定位似乎非常不便,其实不是你想的那样,有很多种方式可以让键盘成为你的好朋友,只是需要掌握正确的方法而已. 定位单词 在长段的命令中,使用 Ctrl + ← 和 Ctrl + → 可快速