前言: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

转载于:https://www.cnblogs.com/softidea/p/4822078.html

Oracle常见操作汇总(转)相关推荐

  1. Oracle常见操作和命令

    在 Oracle 中,下面哪个命令可以修改用户的默认密码有效期为无限制?(单选) A. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90: ORACL ...

  2. 路径,文件,目录,I/O常见操作汇总

    摘要:    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案 ...

  3. C#路径/文件/目录/I/O常见操作汇总(一)

    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题, 尽量提供一些解决方案,即使没有你想要的答案,也希望能提 ...

  4. C#文件目录IO常见操作汇总

    http://www.kuaipan.cn/file/id_14185671388311824.html http://www.kuaipan.cn/file/id_14185671388311942 ...

  5. 各种Oracle常见操作

    1.Oracle SQL Developer 使用1 Oracle SQL Developer 是Oracle自带工具:另一个常用Oracle工具是第三方的PL/SQL: 进入SQL Develope ...

  6. 云耀服务器切换系统,【计算】云耀服务器-常见操作汇总指南

    通过上期的介绍,相信大家对于云耀云服务器的基本知识有了一个了解.云耀云服务器是一个具备独立.完整的操作系统和网络功能,可快速搭建简单应用的新一代云服务器.接下来,本期为大家带来关于云耀云服务器使用中的 ...

  7. 各种Oracle常见操作2

    1 dbms_output基本使用 set serveroutput on; 开启控制台显示: dbms_output.put,写入buffer但不输出: dbms_output.put_line,输 ...

  8. oracle 常见操作

    Oracle数据库登录# 乱码的话设置 set nls_lang=AMERICAN_AMERICA.ZHS16GBKsqlplus "/as sysdba"# Oracle表空间创 ...

  9. c语言单链表数据显示,C++_C语言单链表常见操作汇总,C语言的单链表是常用的数据结 - phpStudy...

    #include #include //定义单链表结构体 typedef int ElemType; typedef struct Node { ElemType data; struct Node ...

最新文章

  1. 修改Visual Studio 2010帮助位置
  2. android盒子模拟器,emubox模拟器盒子
  3. android+清除循环动画,android - 如何使用ViewPropertyAnimator生成循环动画?
  4. uva 11093——Just Finish it up
  5. tomcat9-jenkins:insufficient free space available after evicting expired cache entries-consider
  6. 三星 平板手机电脑 Galaxytab2忘记开机密码解决方法
  7. this 关键字 java 1614781517
  8. oracle 慕课课程_我在慕课网学习到的oracle
  9. MVC中的View2(转)
  10. strrev php_PHP使用strrev翻转中文乱码问题的解决方法
  11. Solr5.2.1-Cloud-Zookeeper快速搭建
  12. 3D动画设计软件:Cinema 4D R25 for mac(c4d r25)
  13. 【全套完结】数字电子技术基础——全套实验手册及仿真工艺实习【建议保存】
  14. 下载速度15MB/s,度盘新版本?
  15. bootstrap 表单样式
  16. ArcGIS软件应用(一)——专题图制作
  17. 富士施乐Fuji Xerox DocuPrint M255 z 驱动
  18. 5基于matplotlib的python数据可视化——导入Excel数据制作折线图
  19. 信息与网络安全 Diffie-Hellman密匙交换算法 题目练习
  20. 手写RPC(五) 核心模块网络协议模块编写 ---- 自定义协议

热门文章

  1. ed是什么梗_花泽香菜不笑了什么梗怎么回事?花泽香菜为什么是宅男女神?
  2. Clojure入门教程: Clojure – Functional Programming for the JVM中文版
  3. Mongodb 基础 查询表达式
  4. MyEclipse设置像visual studio一样的智能提示
  5. grailsgroovy的IllegalArgument异常
  6. Delphi2009下编译提示“无法找到“Excel_TLB”
  7. 现在就开始使用AngularJS的三个重要原因
  8. 一、 promise
  9. PHP学习笔记 - 进阶篇(7)
  10. Js计算间隔天数和Date对象