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
Oracle常见操作汇总(转)的更多相关文章
- JS 数组常见操作汇总,数组去重、降维、排序、多数组合并实现思路整理
壹 ❀ 引 JavaScript开发中数组加工极为常见,其次在面试中被问及的概率也特别高,一直想整理一篇关于数组常见操作的文章,本文也算了却心愿了. 说在前面,文中的实现并非最佳,实现虽然有很多种,但 ...
- C#路径/文件/目录/I/O常见操作汇总
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
- C#路径/文件/目录/I/O常见操作汇总<转载>
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
- 【转】C#路径/文件/目录/I/O常见操作汇总
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
- oracle常见为题汇总,以及一个简单数据连接操作工厂
本人软件环境:win8.1 64位操作系统,vs2013,安装好了与oracle数据库对应的客户端 连接oracle数据库.以及操作数据库 1.使用IIS建立网站,浏览网页时候,提示“ ...
- mysql常见操作汇总
1.Mysql服务突然启不来了,报错: 在分析时发现MySQL Server 5.0\data下面有个名称为用户名,扩展名为.err的文件: 150725 20:01:19 [Note] 自己的安装目 ...
- mysql常见操作汇总 专题
mysql中in多个字段 1. 基本用法 SELECT * FROM USER WHERE , , ); 2. 多个字段同时使用 SELECT * FROM USER WHERE (, ),(, ), ...
- Mysql高手系列 - 第4天:DDL常见操作汇总
这是Mysql系列第4篇. 环境:mysql5.7.25,cmd命令中进行演示. DDL:Data Define Language数据定义语言,主要用来对数据库.表进行一些管理操作. 如:建库.删库. ...
- Vim常见操作汇总
1.跳到文本的最后一行:按“G”,即“shift+g”2.跳到最后一行的最后一个字符 : 先重复1的操作即按“G”,之后按“$”键,即“shift+4”.3.跳到第一行的第一个字符:先按两次“g”,4 ...
随机推荐
- 【深入浅出jQuery】源码浅析--整体架构(转)
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 【互动问答分享】第15期决胜云计算大数据时代Spark亚太研究院公益大讲堂
"决胜云计算大数据时代" Spark亚太研究院100期公益大讲堂 [第15期互动问答分享] Q1:AppClient和worker.master之间的关系是什么? AppClien ...
- Eclipse+Maven创建webapp项目<二> (转)
Eclipse+Maven创建webapp项目<二> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...
- unrecognized selector sent to instance 0x10b34e810
一个错误: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSURLEr ...
- 【原创】leetCodeOj --- Majority Element 解题报告(脍炙人口的找n个元素数组中最少重复n/2次的元素)
题目地址: https://oj.leetcode.com/problems/majority-element/ 题目内容: Given an array of size n, find the ma ...
- Codeforces 9A-Die Roll(意甲冠军)
A. Die Roll time limit per test 1 second memory limit per test 64 megabytes input standard input out ...
- BootstrapQ 包Bootstrap tree,dialog等待
官方网站:http://uikoo9.com/bootstrapQ why 事实上bootstrap已经非常好了,唯一的软肋就是js方面有些薄弱,对照easyui就知道了. 能够非常明显的知道boot ...
- RESTful API Design With NodeJS & Restify
http://code.tutsplus.com/tutorials/restful-api-design-with-nodejs-restify--cms-22637 The RESTful API ...
- oracle物化视图使用+hibernate
使用过程 ----删除 TRUNCATE TABLE mlog$_xxx_lxz_tmp;DROP MATERIALIZED VIEW LOG ON xxx_lxz_tmp; drop materia ...
- Principle使用教程
本次分享主要有以下几点内容: 1.初识界面2.两个关键操作3.案例一:滑动4.案例二:点击跳转 5.案例三:跟随动画(抽屉效果) 1初识界面Principle的界面与Sketch基本一致,如下图: a ...