搜档网
当前位置:搜档网 › oracle教程笔记

oracle教程笔记

一:Oracle认证,与其它数据库比较,安装

Oracle安装会自动的生成sys用户和system用户:

(1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install

(2)system用户是管理操作员,权限也很大。具有sysoper角色,没有create database的权限,默认的密码是manager

(3)一般讲,对数据库维护,使用system用户登录就可以拉

Scott

也就是说sys和system这两个用户最大的区别是在于有没有create database的权限。

二:Oracle的基本使用--基本命令

sql*plus的常用命令

连接命令

1.conn[ect]

用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]当用特权用户身份连接时,必须带上as sysdba或是as sysoper

conn soctt/tiger;

soctt默认的有表还有用图标

2.

2.disc[onnect]

说明: 该命令用来断开与当前数据库的连接

3.psssw[ord]

说明: 该命令用于修改用户的密码,如果要想修改其它用户的密码,需要用sys/system登录。

4.show user

说明: 显示当前用户名

5.exit

说明: 该命令会断开与数据库的连接,同时会退出sql*plus

文件操作命令

1.start和@

说明: 运行sql脚本

案例: sql>@ d:\a.sql或是sql>start d:\a.sql

2.edit

说明: 该命令可以编辑指定的sql脚本

案例: sql>edit d:\a.sql,这样会把d:\a.sql这个文件打开

3.spool

说明: 该命令可以将sql*plus屏幕上的内容输出到指定文件中去。

案例: sql>spool d:\b.sql 并输入 sql>spool off

交互式命令

1.&

说明:可以替代变量,而该变量在执行时,需要用户输入。

select * from emp where job='&job';

2.edit

说明:该命令可以编辑指定的sql脚本

案例:SQL>edit d:\a.sql

3.spool

说明:该命令可以将sql*plus屏幕上的内容输出到指定文件中去。

spool d:\b.sql 并输入 spool off

显示和设置环境变量

概述:可以用来控制输出的各种格式,set show如果希望永久的保存相关的设置,可以去修改glogin.sql脚本

1.linesize

说明:设置显示行的宽度,默认是80个字符

show linesize

set linesize 90

2.pagesize说明:设置每页显示的行数目,默认是14

用法和linesize一样

至于其它环境参数的使用也是大同小异

三:oracle用户管理

oracle用户的管理

创建用户

概述:在oracle中要创建一个新的用户使用create user语句,一般是具有dba(数据库管理员)的权限才能使用。

create user 用户名identified by 密码; (oracle有个毛病,密码必须以字母开头,如果以字母开头,它不会创建用户)

create user 用户名identified by 密码

给用户修改密码

概述:如果给自己修改密码可以直接使用

password 用户名

如果给别人修改密码则需要具有dba的权限,或是拥有alter user的系统权限

SQL> alter user 用户名identified by 新密码

删除用户

概述:一般以dba的身份去删除某个用户,如果用其它用户去删除用户则需要具有drop user 的权限。

比如drop user 用户名【cascade】

在删除用户时,注意:

如果要删除的用户,已经创建了表,那么就需要在删除的时候带一个参数cascade;

用户管理的综合案例

概述:创建的新用户是没有任何权限的,甚至连登陆的数据库的权限都没有,需要为其指定相应的权限。给一个用户赋权限使用命令grant,回收权限使用命令revoke。

为了给讲清楚用户的管理,这里我给大家举一个案例。

SQL> conn xiaoming/m12;

ERROR:

ORA-01045: user XIAOMING lacks CREATE SESSION privilege; logon denied

警告: 您不再连接到ORACLE。

SQL> show user;

USER 为""

SQL> conn system/p;

已连接。

SQL> grant connect to xiaoming;

授权成功。

SQL> conn xiaoming/m12;

已连接。

SQL>

注意:grant connect to xiaoming;在这里,准确的讲,connect不是权限,而是角色。。看图:

现在说下对象权限,现在要做这么件事情:

* 希望xiaoming用户可以去查询emp表

* 希望xiaoming用户可以去查询scott的emp表

grant select on emp to xiaoming

* 希望xiaoming用户可以去修改scott的emp表

grant update on emp to xiaoming

* 希望xiaoming用户可以去修改/删除,查询,添加scott的emp表

grant all on emp to xiaoming

* scott希望收回xiaoming对emp表的查询权限

revoke select on emp from xiaoming

//对权限的维护。

* 希望xiaoming用户可以去查询scott的emp表/还希望xiaoming可以把这个权限继续给别人。

--如果是对象权限,就加入with grant option

grant select on emp to xiaoming with grant option

我的操作过程:

SQL> conn scott/tiger;

已连接。

SQL> grant select on scott.emp to xiaoming with grant option;

授权成功。

SQL> conn system/p;

已连接。

SQL> create user xiaohong identified by m123;

用户已创建。

SQL> grant connect to xiaohong;

授权成功。

SQL> conn xiaoming/m12;

已连接。

SQL> grant select on scott.emp to xiaohong;

授权成功。

--如果是系统权限。

system给xiaoming权限时:

grant connect to xiaoming with admin option

问题:如果scott把xiaoming对emp表的查询权限回收,那么xiaohong会怎样?

答案:被回收。

下面是我的操作过程:

SQL> conn scott/tiger;

已连接。

SQL> revoke select on emp from xiaoming;

撤销成功。

SQL> conn xiaohong/m123;

已连接。

SQL> select * from scott.emp;

select * from scott.emp

第1 行出现错误:

ORA-00942: 表或视图不存在

结果显示:小红受到诛连了。

使用profile管理用户口令

概述:profile是口令限制,资源限制的命令集合,当建立数据库的,oracle会自动建立名称为default的profile。当建立用户没有指定profile选项,那么oracle就会将default分配给用户。

1.账户锁定

概述:指定该账户(用户)登陆时最多可以输入密码的次数,也可以指定用户锁定的时间(天)一般用dba的身份去执行该命令。

例子:指定scott这个用户最多只能尝试3次登陆,锁定时间为2天,让我们看看怎么实现。创建profile文件

SQL> create profile lock_account limit failed_login_attempts 3 password_lock_time 2;

SQL> alter user scott profile lock_account;

2.给账户(用户)解锁

SQL> alter user tea account unlock;

3.终止口令

为了让用户定期修改密码可以使用终止口令的指令来完成,同样这个命令也需要dba的身份来操作。

例子:给前面创建的用户tea创建一个profile文件,要求该用户每隔10天要修改自己的登陆密码,宽限期为2天。看看怎么做。

SQL> create profile myprofile limit password_life_time 10 password_grace_time 2;

SQL> alter user tea profile myprofile;

口令历史

概述:如果希望用户在修改密码时,不能使用以前使用过的密码,可使用口令历史,这样oracle就会将口令修改的信息存放到数据字典中,这样当用户修改密码时,oracle就会对新旧密码进行比较,当发现新旧密码一样时,就提示用户重新输入密码。

例子:

1)建立profile

SQL>create profile password_history limit password_life_time 10 password_grace_time 2 password_reuse_time 10

password_reuse_time //指定口令可重用时间即10天后就可以重用

2)分配给某个用户

删除profile

概述:当不需要某个profile文件时,可以删除该文件。

SQL> drop profile password_history 【casade】

注意:文件删除后,用这个文件去约束的那些用户通通也都被释放了。

加了casade,就会把级联的相关东西也给删除掉

四:oracle表的管理(数据类型,表创建删除,数据CRUD操作

oracle的表的管理

表名和列的命名规则

?必须以字母开头

?长度不能超过30个字符

?不能使用oracle的保留字

?只能使用如下字符 A-Z,a-z,0-9,$,#等

oracle支持的数据类型ν

字符类

char定长最大2000个字符。

例子:char(10) …小韩?前四个字符放…小韩?,后添6个空格补全如…小韩?

varchar2(20)变长最大4000个字符。

例子:varchar2(10)…小韩? oracle分配四个字符。这样可以节省空间。

clob(character large object) 字符型大对象最大4G

char 查询的速度极快浪费空间,查询比较多的数据用。

varchar 节省空间

数字型

number范围 -10的38次方到 10的38次方

可以表示整数,也可以表示小数

number(5,2)

表示一位小数有5位有效数,2位小数

范围:-999.99到999.99

number(5)

表示一个5位整数

范围99999到-99999

日期类型

date 包含年月日和时分秒 oracle默认格式 1-1月-1999

timestamp 这是oracle9i对date数据类型的扩展。可以精确到毫秒。

图片

blob 二进制数据可以存放图片/声音 4G 一般来讲,在真实项目中是不会把图片和声音真的往数据库里存放,一般存放图片、视频的路径,如果安全需要比较高的话,则放入数据库。

怎样创建表

建表

--学生表

create table student ( ---表名

xh number(4), --学号

xm varchar2(20), --姓名

sex char(2), --性别

birthday date, --出生日期

sal number(7,2) --奖学金

);

--班级表

CREATE TABLE class(

classId NUMBER(2),

cName VARCHAR2(40)

);

修改表

添加一个字段

SQL>ALTER TABLE student add (classId NUMBER(2));

修改一个字段的长度

SQL>ALTER TABLE student MODIFY (xm VARCHAR2(30));

修改字段的类型/或是名字(不能有数据)不建议做

SQL>ALTER TABLE student modify (xm CHAR(30));

删除一个字段不建议做(删了之后,顺序就变了。加就没问题,应为是加在后面)

SQL>ALTER TABLE student DROP COLUMN sal;

修改表的名字很少有这种需求ν

SQL>RENAME student TO stu;

删除表ν

SQL>DROP TABLE student;

添加数据

所有字段都插入数据ν

INSERT INTO student VALUES ('A001', '张三', '男', '01-5月-05', 10); oracle中默认的日期格式‘dd-mon-yy’ dd日子(天) mon 月份 yy 2位的年‘09-6月-99’ 1999年6月9日

修改日期的默认格式(临时修改,数据库重启后仍为默认;如要修改需要修改注册表)

ALTER SESSION SET NLS_DATE_FORMAT ='yyyy-mm-dd';

修改后,可以用我们熟悉的格式添加日期类型:

INSERT INTO student VALUES ('A002', 'MIKE', '男', '1905-05-06', 10); 插入部分字段ν

INSERT INTO student(xh, xm, sex) VALUES ('A003', 'JOHN', '女');

插入空值ν

INSERT INTO student(xh, xm, sex, birthday) VALUES ('A004', 'MARTIN', '男', null);

问题来了,如果你要查询student表里birthday为null的记录,怎么写sql 呢?

错误写法:select * from student where birthday = null;

正确写法:select * from student where birthday is null;

如果要查询birthday不为null,则应该这样写:

select * from student where birthday is not null;

修改数据

修改一个字段

UPDATE student SET sex = '女' WHERE xh = 'A001';

修改多个字段

UPDATE student SET sex = '男', birthday = '1984-04-01' WHERE xh = 'A001'; 修改含有null值的数据

不要用 = null 而是用 is null;

SELECT * FROM student WHERE birthday IS null;

删除数据

DELETE FROM student;

删除所有记录,表结构还在,写日志,可以恢复的,速度慢。

Delete 的数据可以恢复。

savepoint a; --创建保存点

DELETE FROM student;

rollback to a; --恢复到保存点

一个有经验的DBA,在确保完成无误的情况下要定期创建还原点。

DROP TABLE student; --删除表的结构和数据;

delete from student WHERE xh = 'A001'; --删除一条记录;

truncate TABLE student; --删除表中的所有记录,表结构还在,不写日志,无法找回删除的记录,速度快。

五:oracle表查询(1)

oracle表基本查询

介绍

在我们讲解的过程中我们利用scott用户存在的几张表(emp,dept)为大家演示如何使用select 语句,select语句在软件编程中非常有用,希望大家好好的掌握。

emp 雇员表

clerk 普员工

salesman 销售

manager 经理

analyst 分析师

president 总裁

mgr 上级的编号

hiredate 入职时间

sal 月工资

comm 奖金

deptno 部门

dept部门表

deptno 部门编号

accounting 财务部

research 研发部

operations 业务部

loc 部门所在地点

salgrade 工资级别

grade 级别

losal 最低工资

hisal 最高工资

简单的查询语句

查看表结构

DESC emp;

查询所有列

SELECT * FROM dept;

切忌动不动就用select *

SET TIMING ON; 打开显示操作时间的开关,在下面显示查询时间。

CREATE TABLE users(userId V ARCHAR2(10), uName V ARCHAR2 (20), uPassw

V ARCHAR2(30));

INSERT INTO users V ALUES('a0001', '啊啊啊啊', 'aaaaaaaaaaaaaaaaaaaaaaa');

--从自己复制,加大数据量大概几万行就可以了可以用来测试sql语句执行效率INSERT INTO users (userId,UNAME,UPASSW) SELECT * FROM users;

SELECT COUNT (*) FROM users;统计行数

查询指定列

SELECT ename, sal, job, deptno FROM emp;

如何取消重复行DISTINCT

SELECT DISTINCT deptno, job FROM emp;

查询SMITH所在部门,工作,薪水

SELECT deptno,job,sal FROM emp WHERE ename = 'SMITH';

注意:oracle对内容的大小写是区分的,所以ename='SMITH'和ename='smith'是不同的

使用算术表达式 nvl null

问题:如何显示每个雇员的年工资?

SELECT sal*13+nvl(comm, 0)*13 "年薪" , ename, comm FROM emp;

使用列的别名

SELECT ename "姓名", sal*12 AS "年收入" FROM emp;

如何处理null值

使用nvl函数来处理

SELECT sal*13+nvl(comm, 0)*13 "年薪" , ename, comm FROM emp;

如何连接字符串(||)

SELECT ename || ' is a ' || job FROM emp;

使用where子句

问题:如何显示工资高于3000的员工?

SELECT * FROM emp WHERE sal > 3000;

问题:如何查找1982.1.1后入职的员工?

SELECT ename,hiredate FROM emp WHERE hiredate >'1-1月-1982';

问题:如何显示工资在2000到3000的员工?

SELECT ename,sal FROM emp WHERE sal >=2000 AND sal <= 3000;

如何使用like操作符

%:表示0到多个字符_:表示任意单个字符

问题:如何显示首字符为S的员工姓名和工资?

SELECT ename,sal FROM emp WHERE ename like 'S%';

如何显示第三个字符为大写O的所有员工的姓名和工资?

SELECT ename,sal FROM emp WHERE ename like '__O%';

在where条件中使用inν

问题:如何显示empno为7844, 7839,123,456 的雇员情况?

SELECT * FROM emp WHERE empno in (7844, 7839,123,456);

使用is null的操作符ν

问题:如何显示没有上级的雇员的情况?

错误写法:select * from emp where mgr = '';

正确写法:SELECT * FROM emp WHERE mgr is null;

六:oracle表查询(2)

使用逻辑操作符号

问题:查询工资高于500或者是岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J?

SELECT * FROM emp WHERE (sal >500 or job = 'MANAGER') and ename LIKE 'J%';

使用order byν字句默认asc

问题:如何按照工资的从低到高的顺序显示雇员的信息?

SELECT * FROM emp ORDER by sal;

问题:按照部门号升序而雇员的工资降序排列

SELECT * FROM emp ORDER by deptno, sal DESC;

使用列的别名排序

问题:按年薪排序

select ename, (sal+nvl(comm,0))*12 "年薪" from emp order by "年薪" asc;

别名需要使用“”号圈中,英文不需要“”号

分页查询ν

等学了子查询再说吧。。。。。。。。

Clear 清屏命令

oracle表复杂查询

说明

在实际应用中经常需要执行复杂的数据统计,经常需要显示多张表的数据,现在我们给大家介绍较为复杂的select语句

数据分组——max,min,avg,sum,count

问题:如何显示所有员工中最高工资和最低工资?

SELECT MAX(sal),min(sal) FROM emp e;

最高工资那个人是谁?

错误写法:select ename, sal from emp where sal=max(sal);

正确写法:select ename, sal from emp where sal=(select max(sal) from emp);

注意:select ename, max(sal) from emp;这语句执行的时候会报错,说ORA-00937:非单组分组函数。因为max是分组函数,而ename不是分组函数.......

但是select min(sal), max(sal) from emp;这句是可以执行的。因为min和max都是分组函数,就是说:如果列里面有一个分组函数,其它的都必须是分组函数,否则就出错。这是语法规定的问题:如何显示所有员工的平均工资和工资总和?

问题:如何计算总共有多少员工问题:如何

扩展要求:

查询最高工资员工的名字,工作岗位

SELECT ename, job, sal FROM emp e where sal = (SELECT MAX(sal) FROM emp);

显示工资高于平均工资的员工信息

SELECT * FROM emp e where sal > (SELECT AVG(sal) FROM emp);

group by 和having子句ν

group by用于对查询的结果分组统计,

having子句用于限制分组显示结果。

问题:如何显示每个部门的平均工资和最高工资?

SELECT A VG(sal), MAX(sal), deptno FROM emp GROUP by deptno;

(注意:这里暗藏了一点,如果你要分组查询的话,分组的字段deptno一定要出现在查询的列表里面,否则会报错。因为分组的字段都不出现的话,就没办法分组了)

问题:显示每个部门的每种岗位的平均工资和最低工资?

SELECT min(sal), A VG(sal), deptno, job FROM emp GROUP by deptno, job;

问题:显示平均工资低于2000的部门号和它的平均工资?

SELECT A VG(sal), MAX(sal), deptno FROM emp GROUP by deptno having A VG(sal) < 2000;

对数据分组的总结ν

1 分组函数只能出现在选择列表、having、order by子句中(不能出现在where中)

2 如果在select语句中同时包含有group by, having, order by 那么它们的顺序是group by, having, order by

3 在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须有一个出现在group

by 子句中,否则就会出错。

如SELECT deptno, A VG(sal), MAX(sal) FROM emp GROUP by deptno HA VING A VG(sal) < 2000;

这里deptno就一定要出现在group by 中

多表查询

说明

多表查询是指基于两个和两个以上的表或是视图的查询。在实际应用中,查询单个表可能不能满足你的需求,(如显示sales部门位置和其员工的姓名),这种情况下需要使用到(dept 表和emp表)

问题:显示雇员名,雇员工资及所在部门的名字【笛卡尔集】?

规定:多表查询的条件是至少不能少于表的个数-1 才能排除笛卡尔集

(如果有N张表联合查询,必须得有N-1个条件,才能避免笛卡尔集合)

SELECT e.ename, e.sal, d.dname FROM emp e, dept d WHERE e.deptno = d.deptno;

问题:显示部门号为10的部门名、员工名和工资?

SELECT d.dname, e.ename, e.sal FROM emp e, dept d WHERE e.deptno = d.deptno and e.deptno = 10;

问题:显示各个员工的姓名,工资及工资的级别?

先看salgrade的表结构和记录

SQL>select * from salgrade;

GRADE LOSAL HISAL

------------- ------------- ------------

1 700 1200

2 1201 1400

3 1401 2000

4 2001 3000

5 3001 9999

SELECT e.ename, e.sal, s.grade FROM emp e, salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal;

扩展要求:

问题:显示雇员名,雇员工资及所在部门的名字,并按部门排序?

SELECT e.ename, e.sal, d.dname FROM emp e, dept d WHERE e.deptno = d.deptno ORDER by e.deptno;

(注意:如果用group by,一定要把e.deptno放到查询列里面)

自连接

自连接是指在同一张表的连接查询

问题:显示某个员工的上级领导的姓名?

比如显示员工…FORD?的上级

SELECT worker.ename, boss.ename FROM emp worker,emp boss WHERE worker.mgr =

boss.empno AND worker.ename = 'FORD';

子查询

什么是子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。

单行子查询

单行子查询是指只返回一行数据的子查询语句

请思考:显示与SMITH同部门的所有员工?

思路:

1 查询出SMITH的部门号

select deptno from emp WHERE ename = 'SMITH';

2 显示

SELECT * FROM emp WHERE deptno = (select deptno from emp WHERE ename = 'SMITH'); 数据库在执行sql 是从左到右扫描的,如果有括号的话,括号里面的先被优先执行。

多行子查询

多行子查询指返回多行数据的子查询

请思考:如何查询和部门10的工作相同的雇员的名字、岗位、工资、部门号

SELECT DISTINCT job FROM emp WHERE deptno = 10;

SELECT * FROM emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno = 10);

(注意:不能用job=..,因为等号=是一对一的)

在多行子查询中使用all操作符

问题:如何显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号?SELECT ename, sal, deptno FROM emp WHERE sal > all (SELECT sal FROM emp WHERE deptno = 30);

扩展要求:

大家想想还有没有别的查询方法。

SELECT ename, sal, deptno FROM emp WHERE sal > (SELECT MAX(sal) FROM emp WHERE deptno = 30);

执行效率上,函数高得多

在多行子查询中使用any操作符

问题:如何显示工资比部门30的任意一个员工的工资高的员工姓名、工资和部门号?SELECT ename, sal, deptno FROM emp WHERE sal > ANY (SELECT sal FROM emp WHERE deptno = 30);

扩展要求:

大家想想还有没有别的查询方法。

SELECT ename, sal, deptno FROM emp WHERE sal > (SELECT min(sal) FROM emp WHERE deptno = 30);

多列子查询

单行子查询是指子查询只返回单列、单行数据,多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询是指查询返回多个列数据的子查询语句。

请思考如何查询与SMITH的部门和岗位完全相同的所有雇员。

SELECT deptno, job FROM emp WHERE ename = 'SMITH';

SELECT * FROM emp WHERE (deptno, job) = (SELECT deptno, job FROM emp WHERE ename = 'SMITH');

在from子句中使用子查询

请思考:如何显示高于自己部门平均工资的员工的信息

思路:

1. 查出各个部门的平均工资和部门号

SELECT deptno, A VG(sal) mysal FROM emp GROUP by deptno;

2. 把上面的查询结果看做是一张子表

SELECT e.ename, e.deptno, e.sal, ds.mysal FROM emp e, (SELECT deptno, A VG(sal) mysal FROM emp GROUP by deptno) ds WHERE e.deptno = ds.deptno AND e.sal > ds.mysal;

如何衡量一个程序员的水平?

网络处理能力,数据库,程序代码的优化程序的效率要很高

小总结:

在这里需要说明的当在from子句中使用子查询时,该子查询会被作为一个视图来对待,因此叫做内嵌视图,当在from子句中使用子查询时,必须给子查询指定别名。

注意:别名不能用as,如:SELECT e.ename, e.deptno, e.sal, ds.mysal FROM emp e, (SELECT deptno, A VG(sal) mysal FROM emp GROUP by deptno) as ds WHERE e.deptno = ds.deptno AND e.sal > ds.mysal;

在ds前不能加as,否则会报错(给表取别名的时候,不能加as;但是给列取别名,是可以加as的)

分页查询

按雇员的id号升序取出

oracle的分页一共有三种方式

1.根据rowid来分

select * from t_xiaoxi where rowid in (select rid from (select rownum rn, rid from(select rowid rid, cid from t_xiaoxi order by cid desc) where rownum<10000) where rn>9980) order by cid desc; 执行时间0.03秒

2.按分析函数来分

select * from (select t.*, row_number() over(order by cid desc) rk from t_xiaoxi t) where

rk<10000 and rk>9980;

执行时间1.01秒

3.按rownum来分

select * from (select t.*,rownum rn from(select * from t_xiaoxi order by cid desc)t where rownum<10000) where rn>9980;

执行时间0.1秒

其中t_xiaoxi为表名称,cid为表的关键字段,取按cid降序排序后的第9981-9999条记录,t_xiaoxi表有70000多条记录。

个人感觉1的效率最好,3次之,2最差。

//测试通过的分页查询okokok

select * from (select a1.*, rownum rn from(select ename,job from emp) a1 where

rownum<=10)where rn>=5;

下面最主要介绍第三种:按rownum来分

1. rownum 分页

SELECT * FROM emp;

2. 显示rownum[oracle分配的]

SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e;

rn相当于Oracle分配的行的ID号

3.挑选出6—10条记录

先查出1-10条记录

SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM <= 10;

如果后面加上rownum>=6是不行的,

4. 然后查出6-10条记录

SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM <= 10) WHERE rn >= 6;

5. 几个查询变化

a. 指定查询列,只需要修改最里层的子查询

只查询雇员的编号和工资

SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT ename, sal FROM emp) e WHERE ROWNUM <= 10) WHERE rn >= 6;

b. 排序查询,只需要修改最里层的子查询

工资排序后查询6-10条数据

SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT ename, sal FROM emp ORDER by sal) e WHERE ROWNUM <= 10) WHERE rn >= 6;

用查询结果创建新表

这个命令是一种快捷的建表方式

CREATE TABLE mytable (id, name, sal, job, deptno) as SELECT empno, ename, sal, job, deptno FROM emp;

创建好之后,desc mytable;和select * from mytable;看看结果如何?

合并查询

合并查询

有时在实际应用中,为了合并多个select语句的结果,可以使用集合操作符号union,union

all,intersect,minus

多用于数据量比较大的数据局库,运行速度快。

1). union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中重复行。SELECT ename, sal, job FROM emp WHERE sal >2500

UNION

SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';

2).union all

该操作符与union相似,但是它不会取消重复行,而且不会排序。

SELECT ename, sal, job FROM emp WHERE sal >2500

UNION ALL

SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中重复行。

3). intersect

使用该操作符用于取得两个结果集的交集。

SELECT ename, sal, job FROM emp WHERE sal >2500

INTERSECT

SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';

4). minus

使用改操作符用于取得两个结果集的差集,他只会显示存在第一个集合中,而不存在第二个集合中的数据。

SELECT ename, sal, job FROM emp WHERE sal >2500

MINUS

SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';

(MINUS就是减法的意思)

创建数据库有两种方法:

1). 通过oracle提供的向导工具。√

database Configuration Assistant 【数据库配置助手】

2).我们可以用手工步骤直接创建。

七:java操作oracle

java连接oracle

介绍:前面我们一直在plsql中操作oracle,那么如何在java 程序中操作数据库呢?下面我们举例说明,写一个java,分页显示emp表的用户信息。

Java代码

1.package com.sp;

2.

3.import java.sql.Connection;

4.import java.sql.DriverManager;

5.import java.sql.ResultSet;

6.import java.sql.Statement;

7.

8.//演示如何使用 jdbc_odbc桥连接方式

9.public class TestOracle {

10.

11. public static void main(String[] args) {

12. try {

13.

14. // 1.加载驱动

15. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

16.

17. // 2.得到连接

18. Connection ct = DriverManager.getConnection(

19. "jdbc.odbc:testConnectOracle", "scott",

20.

21."tiger");

22.

23. // 从下面开始,和SQL Server一模一样

24. Statement sm = ct.createStatement();

25. ResultSet rs = sm.executeQuery("select * from emp")

;

26. while (rs.next()) {

27. //用户名

28. System.out.println("用户

名: "+rs.getString(2));

29. //默认是从1开始编号的

30. }

31. } catch (Exception e) {

32. e.printStackTrace();

33. }

34. }

35.}

在得到连接那里,要去配置数据源,点击控制面板-->系统和安全-->管理工具-->数据源(ODBC),打开后点添加,如图:

可以看到,有个Oracle in OraDb10g_home1的驱动,它是Oracle安装完后自动加上去的。选中后,点完成,再填如下信息,如图:

这样配好后基本就可以了,但为了安全起见,建议大家测试一下,点击 Test Connection按钮,测试通过后点ok,然后数据源就生成了,如图:

然后把数据源名称写进jdbc.odbc:里。

这里要注意:jdbcodbc能不能远程连接呢?不能远程连接,也就是你这样写的话就意味着java程序和oracle数据库应该是在同一台机器上,因为这里没有指定IP地址,肯定默认就是本地。如果要远程连,就用jdbc,jdbc是可以远程连的。

运行TestOracle.java,控制台输出.......................

(Oracle数据库管理)玩转实战教程学习笔记最全版

(O管理)玩转实战教程(韩顺平)学习笔记

韩顺平—玩转oracle视频教程笔记 一:Oracle认证,与其它数据库比较,安装 oracle的卸载 1.停止所有与ORACLE相关的服务。 2. 使用OUI(Oracle Universal Installer)卸载Oracle软件。 “开始”->“程序”->“Oracle-OraDb110g_home1|Oracle installation product|Universal installer. 3.删除注册表内容。运行regedit命令,删除下面内容:HKEY_LOCAL_MACHINE|SOFTWARE|ORACLE注册表键,删除此键。 HKEY_LOCAL_MACHINE|SYSTEM|CurrentControlSet|Services,删除Services键下所有以oracle为首的键。 HKEY_LOCAL_MACHINE|SYSTEM|CurrentControlSet|Services|Eventlog|Application,删除此键下所有以oracle为首的键。 HKEY_CLASSES_ROOT,删除此键下所有以Ora,Oracle,Orcl,EnumOra 为前缀的键。 HKEY_CURRENT_USER|Software| Microsoft|Windows|CurrentVersion|Explorer|MenuOrder|Start Menu|Programs,删除此键下所有以oracle为首的键。 HKEY_LOCAL_MACHINE|SOFTWARE|ODBC|ODBCINST.INI注册表键,删除了

oracle系统表和视图说明

1.视图的概述 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表。视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器。(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束) 2.视图的存储 与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据。视图只是定义了一个查询,视图中的数据是从基表中获取,这些数据在视图被引用时动态的生成。由于视图基于数据库中的其他对象,因此一个视图只需要占用数据字典中保存其定义的空间,而无需额外的存储空间。 3.视图的作用 用户可以通过视图以不同形式来显示基表中的数据,视图的强大之处在于它能够根据不同用户的需要来对基表中的数据进行整理。视图常见的用途如下: 通过视图可以设定允许用户访问的列和数据行,从而为表提供了额外的安全控制 隐藏数据复杂性 视图中可以使用连接(join),用多个表中相关的列构成一个新的数据集。此视图就对用户隐藏了数据来源于多个表的事实。 简化用户的SQL 语句 用户使用视图就可从多个表中查询信息,而无需了解这些表是如何连接的。 以不同的角度来显示基表中的数据 视图的列名可以被任意改变,而不会影响此视图的基表 使应用程序不会受基表定义改变的影响 在一个视图的定义中查询了一个包含4 个数据列的基表中的3 列。当基表中添加了新的列后,由于视图的定义并没有被影响,因此使用此视图的应用程序也不会被影响。 保存复杂查询 一个查询可能会对表数据进行复杂的计算。用户将这个查询保存为视图之后,每次进行类似计算只需查询此视图即可。

审计数据转换笔记

目录 一、Oracle课堂笔记 (3) 第一章:Oracle 9i数据库概述 (3) 第二章:Oracle 9i数据库的安装与卸载 (4) 第三章:Oracle 9i数据库的启动与关闭 (4) 第四章:创建数据库 (5) 第五章:配臵访问数据库 (6) 第六章:管理数据库表 (6) 第7章 Oracle数据库的导入导出 (7) 第8章 PL/SQL语言 (9) 实例一 (10) 实例二 (10) 二、SQL Server2000课堂笔记 (10) 第一章:关系数据库基础 (11) 第二章:SQL Server 2000 基础 (12) 第三章:数据库的创建与管理 (12) 第四章:T-SQL 语言基础 (12) 第五章:基本表的创建与管理 (14)

第七章:实现数据完整性 (14) 三、SQL Server2000习题库 (16) 第一章:书本例题(第六章) (16) 第二章:课后习题 (22) 第三章:课间练习 (32) 第四章:单科考试题 (33) 四、数据采集转换 (41) 第一章:课堂笔记 (41) 1、用excel自身的功能导入SQL Server数据 (41) 2、将SQL Server里的表导入AO系统 (42) 3、把设有密码的access的密码取消的方法 (42) 4、金蝶.ais文件变成.mdb文件的处理 (42) 5、SQL Server数据采集方法 (43) 6、业务数据的采集与分析 (44) Ⅰ业务数据一(旌县医院) (44) Ⅱ业务数据二(空调费) (46) 第二章:十一套数据 (47) 0标准数据(2003年) (48) 1真实数据(2004年) (49) 2通用数据(2007年) (50)

Oracle创建视图

Oracle创建视图 在本练习中,将在HR模式中练习如何创建视图,查询视图的定义,并对视图进行更新。 (1)创建一个视图EMPLOYEES_IT,该视图是基于HR模式中的EMPLOYEES表,并且该视图只包括那些部门为IT的员工信息。在创建视图时使用WITH CHECK OPTION,防止更新视图时,输入非IT部门的员工信息。 create or replace view employees_it as select * from employees where department_id =( select department_id from departments where departments.department_name='IT') with check option; (2)创建一个联接视图EMP_DEPT,它包含EMPLOYEES表中的列和DEPARTMENTS 表中的DNAME列。 create or replace view emp_dept as select t1.employee_id,t1.first_name,https://www.sodocs.net/doc/0b17950356.html,st_name,t1.email, t1.phone_number,t1.hire_date,t1.job_id,t1.salary,t2.department_name from employees t1,departments t2 where t1.department_id=t2.department_id with check option; (3)Oracle针对创建的视图,只在数据字典中存储其定义。输入并执行如下的语句查看创建的视图定义: select text from user_views where view_name=UPPER('emp_dept'); (4)查看视图各个列是否允许更新。 col owner format a20 col table_name format a20 col column_name format a20 select * from user_updatable_columns where table_name=UPPER('emp_dept');

oracle笔记(3)

1.用insert语句进行行数据的迁移 Insert into 表名(列,列) select 列,列from emp where 条件 2.用update更新数据(使用子查询):希望员工scott的岗位,工资,补助与smith员工一样? update emp set (job,sal,comm)=(select job,sal,comm. From emp where ename=?SMITH?) where ename=?SCOTT?; 3.事务 (1)锁 (2)提交事务 (3)回退事务(一开始就做保存点(savepoint)) (4)事务的几个重要操作 1)设置保存点:savepoint a 2)取消部分事务:rollback to a 3)取消全部事务:rollback (5)只读事务:set transaction read only(当前用户能看到之前的操作,若其他用户进行更 新,该用户之后的操作都不能看到更新) (6)字符函数 (1)lower(char):将字符串转化为小写的格式 (2)upper(char): 将字符串转化为大写的格式 (3)length(char):返回字符串的长度 (4)substr(char,m,n):取字符串的子串,从m开始取,取n个 (5)例:以首字符大写的方式显示所有的员工的姓名: (1)完成首字母大写:select upper(substr(ename,1,1)) from emp; (2)完成后面字母小写:select lower(substr(ename,2,length(ename)-1)) from emp; (3)合并:select upper(substr(ename,1,1)) || lower(substr(ename,2,length(ename)-1)) from emp; (6)replace(char1,search_string,replace_string) (7)instr(char1,char2,[,n[,m]])—取子串在字符串的位置 (8)例:显示所有员工的姓名,用”我是A”替换所有”A”:select replace(ename,?A?,? 我是A?) from emp; (7)数学函数 (1)round(n,[m]):用于四舍五入 (2)trunc(n,[m]):用于截取数字 (3)mod(m,n):取模 (4)floor(n):返回<=n的最大整数 (5)ceil(n):返回>=n的最小整数 (6)例:显示在一个月为30天的情况所有员工的日薪金,忽略余数:select floor(sal/30),ename from emp; (8)日期函数 (1)sysdate (2)add_months(d,n) (3)last_day(d):返回指定日期所在月份的最后一天 例:返回在八个月前雇佣的员工(已经入职8个月多的员工):select * from emp where sysdate>add_months(hiredate,300); 例:对于每个员工,显示其加入公司的天数:select trunk(sysdate-hiredate) “入职天

MLDN魔乐科技Oracle课堂笔记

MLDN魔乐科技_Oracle课堂笔记 1.sqlplusw命令 (窗口形式),sqlplusw不支持编辑,一般在编辑器(记事本)中编辑好了后拷贝进去执行,或用ed命令; 2.desc desc [tablename];查看表结构 3.show user 查看当前用户 4.select table_name from tabs 显示当前用户下的表名; 5.set linesize set linesize [number]; 6.set pagesize set pagesize [number];

7.ed ed命令用来从sqlplusw中打开编辑器来编辑文件(文本文件); 8.@ 执行sql文件@D:\a.txt;@d:\a;(a文件的扩展名为.sql) 9.conn conn username/pwd@实例名; 10.sql标准,其功能:DML(数据操作语言),DDL(数据定义语言),DCL(数据控制语言) 11.别名 Oracle中指定列别名;(不要指定为中文); 12.distinct 去除重复记录; 13.|| 字符串连接符; select "我的名字是:" || name from t_user; 14.NOT NULL/IS NULL 选择列值不为空的记录where collumname IS NOT NULL;相反IS NULL; 15.BETWEEN…AND… WHERE COLUMENAME BETWEEN...AND...; 等价于>=,<=,如果是在时间之前,则需将时间''起来;

16.大小写 oracle中查询值是大小写区分的,但关键字不区分; 17.In FieldName in (值1,值2,值3,...值n);NOT IN; 18.Like 在使用Like时常用的通配符:%,匹配任意长度内容,_,匹配一个长度内容; 例:select * from emp where ENAME Like '_M%';表示第二个字母为M的名字. 19.>,<,>=,<=,<>,!=用法 20.order by Order by语句,放在SQL语句最后;desc(从大到小)/asc(从小到大)(默认) 21.单行函数 字符/数值/日期/转换/通用函数; (1).字符:UPPER()变大写,LOWER()变小写,INITCAP()将单词第一个字母大写; 字符长度LENGTH(),字符串截取SUBSTR(),字符串替换REPLACE() 其中substr()的第二个参数即起始位置索引为0或1效果都是从第一个字符开始,负数是从右边开始; (2).数值:四舍五入ROUND(),截取TRUNC(),求模MOD(); ROUND(23.45,2),TRUNC(23.45,-1),MOD(10,3); (3).日期:MONTHS_BETWEEN(),两个日期之间的月数;MONTHS_BETWEEN(DATE1,DATE2) ADD_MONTHS(),下月的今天; NEXT_DAY(),下一个的今天日期; LAST_DAY(), 给定日期的最后一天日期; (4).转换:TO_CHAR(),TO_NUMBER(),TO_DA TE();

ORACLE常用SQL语句大全

ORACLE常用SQL语句大全 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:/mssql7backup/MyNwind_1.dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not nul l],..) 根据已有的表创建新表: A:select * into table_new from table_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only<仅适用于Oracle> 5、说明:删除表 drop table tablename

6、说明:增加一个列,删除一个列 A:alter table tabname add column col type B:alter table tabname drop column colname 注:DB2DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、添加主键: Alter table tabname add primary key(col) 删除主键: Alter table tabname drop primary key(col) 8、创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、创建视图:create view viewname as select statement 删除视图:drop view viewname 10、几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、几个高级查询运算词 A:UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B:EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C:INTERSECT 运算符 INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。 12、使用外连接

ORACLE笔记

1.Oracle 工具:sqlplus Sqlplus / as sysdba Shutdown immediate(关闭数据库) Startup(启动数据库) 注意:数据库开启才可以进行操作 Select username,account_status from dba_users;(查询数据库中所有的用户名称与用户状态) Alter user scott identified by tiger account unlock;(scott用户解锁) Sqlplus scott/tiger(使用SCOTT 密码为tiger登陆ORACLE数据库) Connect scott/tiger (在SQL>中直接使用SCOTT用户连接数据库) Show all;(看所有变量) Set sqlprompt “_user>”(设置sqlplus环境下面的提示符用自身用户显示) 注意:如要变量下次重启生效必须把变量写入 /u01/app/oracle/product/10.2.0/db_1/sqlplus/admin/glogin.sql中 Host(回到系统) Help index(查看所有命令) Help+命令(类似于LINUX中的MAN,查看命令的格式与用法) Disconnect(关闭SQLPLUS工具但是不离开数据库) Describe emp(查看EMP表) Define(定义变量,常用与写脚本用) 如:DEFINE _EDITOR =”vi” (CHAR) (定义VI编辑器用于保存最后一条执行的SQL语句) Save /u01/app/oracle/aa.sql (保存SQL语句) Get /u01/app/oracle/aa.sql (调用保存的SQL语句) 2.select(select 查询语句是ORACLE中最常用的语句) DML语句包括(insert 写入,update改变,delect删除,merge两张表同步) 注意:merge常用在ETL(数据仓库)底下 DDL数据定义语句包括(create创建对象,alter修改,drop删除对象,rename改名,truncate 删除整个表) TCL事务处理语句(commit提交立刻生效,rollback回滚,savepoint保存点,savepoint(保存点) DCL权限语句(grant赋予权限,revoke(收回权限) ORACLE的表称之为堆表(keep table) SELECT (1) writing basic SQL select statemanes 1. selecting all columns SCOTT>select * from dept; SCOTT>select dname,deptno,loc from dept; Basic SELECT Statement SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;

oracle的sqlplus学习笔记

使用SQLPLUS 可以用它运行SQL查询和PL/SQL代码块并接收结果信息 可以发布DBA命令并自动工作 可以启动和关闭数据库 一种创建数据库管理报告的便利方法 设置环境变量 在调用SQLplus前,必须正确设置oracle环境变量, 包括设置ORACLE_SID,ORACLE_HOME和LD_LIBBARY_PATH,有时还须设置NLS_LANG和ORA_NLS11 用CONNECT(conn)命令连接 CONNECT(conn)命令可以以一个不同的用户身份进行连接 例: SQL> conn scott/tiger 已连接。 SQL> connect scott/tiger 已连接。 SQL*Plus登录模式 C:\>sqlplus -h SQL*Plus: Release 10.2.0.1.0 - Production Copyright (c) 1982, 2005, Oracle. All rights reserved. 用法1: sqlplus -H | -V -H 显示SQL*Plus 版本和用法帮助。 -V 显示SQL*Plus 版本。 为: ([/][@] | /) [AS SYSDBA | AS SYSOPER] | /NOLOG 指定数据库帐户用户名, 口令和数据库连接 的连接标识符。如果没有连接 标识符, SQL*Plus 将连接到默认数据库。 AS SYSDBA 和AS SYSOPER 选项是数据库管理 权限。

/NOLOG 选项可启动SQL*Plus 而不连接到 数据库。 为: @|[.] [ ...] 使用将分配给脚本中的替代变量的指定参数 从Web 服务器(URL) 或本地文件系统(filename.ext) 运行指定的SQL*Plus 脚本。 在启动SQL*Plus 并且执行CONNECT 命令后, 将运行站点概要 文件(例如, $ORACLE_HOME/sqlplus/admin/glogin.sql) 和用户概要文件 (例如, 工作目录中的login.sql)。这些文件 可包含SQL*Plus 命令。 SQLPLUS的执行操作 一条SQL语句由一个分号(;)或一个反斜杠(/)结束 一个PL/SQL块由一个反斜杠(/)结束 可以使用连字符(-)作为语句行的继续字符 例: SQL> select 200 - <==此时sqlplus自动将'-'字符解释成继续字符并发布一条错误信息 > 100 from dual; select 200 100 from dual * 第 1 行出现错误: ORA-00923: 未找到要求的FROM 关键字 SQL> select 200 - - > 100 from dual; 200-100 ---------- 100 退出SQLPlus 在SQL*Plus输入exit(quit)命令正常退出会话,则事务立即被提交.如果不打算提交事务,必须在退出前执行rollback命令,就算autocommit设置值为off也是如此.在使用exit/quit时,会出现以下情况 ?所有未决的更改被回滚或提交; ?用户退出oraclesqlplus会话终止 ?控制权返回到操作系统

Oracle课堂笔记4

●Oracle 复杂表查询 ?数据分组:-max,min,avg,sum,count ?如何显示所有员工中最高工资和最低工资? select max(sal) from emp ; (有多个结果也只显示一个) select min(sal) from emp ; select avg(sal) from emp ; (有空值null则不参与运算) select sum(sal)/count(*) from emp ; (count计算行数) ?统计有多少员工? select count(*) from emp ;(字段亦可,空值不参与运算) ?显示工资最高的员工的名字和工作岗位? (我们可以使用子查询来完成1.先查询最大工资是多少2.查找谁的工资是最大工资) select ename , job from emp where sal = (select max(sal) from emp) ; (SQL语句默认从右往左执行) ?显示工资高于平均工资的员工信息? select ename , job from emp where sal > (select avg(sal) from emp) ; ?group by和having子句: group by对结果进行分组统计, having进行限制(过滤)分组显示结果,通常与group by 同时 出现。 ?如何显示每个部门的平均工资和最高工资?

select avg(sal),max(sal),deptno from emp group by deptno ; ?先是每个部门每个岗位的平均工资和最低工资? select avg(sal),max(sal) ,deptno ,job from emp group by deptno,job order by deptno ; ?显示部门平均工资低于2000的部门和平均工资? select avg(sal),deptno from emp group by deptno having avg(sal)<2000 ;(having不支持别名) ●注意事项: ? 1.分组函数(avg)只能出现在选择列表、having、order by 子句中。 ? 2.如果select中同时出现,顺序是:group by、having、 order by,顺序不能出错。 ? 3.在选择列中,如果有列,表达式,分组函数,那么这些 列和表达式必须有一个出现在group by中,否则会出错。 多表查询:在实际开发中不可避免存在对两张或多张表的复杂查询。 1.我们看看多表查询的原理: select * from emp,dept ; 2.如何实现多表查询: select emp.ename,emp.sal,dept.dname from emp,dept

oracle中以dba_、user_、v$_、all_、session_、index_开头的常用表和视图

oracle中以dba_、user_、v$_、all_、session_、index_开头的常用表和视图(https://www.sodocs.net/doc/0b17950356.html,/gzz%5Fgzz/blog/item/1f6ef92a67599392033bf6de.html) 2009年08月10日星期一 17:06 oracle中以dba_、user_、v$_、all_、session_、index_开头的常用表和视图dba_开头 dba_users 数据库用户信息 dba_segments 表段信息 dba_extents 数据区信息 dba_objects 数据库对象信息 dba_tablespaces 数据库表空间信息 dba_data_files 数据文件设置信息 dba_temp_files 临时数据文件信息 dba_rollback_segs 回滚段信息 dba_ts_quotas 用户表空间配额信息 dba_free_space 数据库空闲空间信息 dba_profiles 数据库用户资源限制信息 dba_sys_privs 用户的系统权限信息 dba_tab_privs 用户具有的对象权限信息 dba_col_privs 用户具有的列对象权限信息 dba_role_privs 用户具有的角色信息 dba_audit_trail 审计跟踪记录信息 dba_stmt_audit_opts 审计设置信息 dba_audit_object 对象审计结果信息 dba_audit_session 会话审计结果信息 dba_indexes 用户模式的索引信息 user_开头 user_objects 用户对象信息 user_source 数据库用户的所有资源对象信息 user_segments 用户的表段信息 user_tables 用户的表对象信息 user_tab_columns 用户的表列信息 关于这个还涉及到两个常用的例子如下: 1、oracle中查询某个字段属于哪个表 Sql代码 select table_name,owner from dba_tab_columns t where t.COLUMN_NAME like upper('%username%'); select table_name,owner from dba_tab_columns t where t.COLUMN_NAME like

oracle学习笔记

●PLSQL控制台输出语句 SET serveroutput ON; --打开控制台输出服务 dbms_output.put_line('values2='||var_val); --输出语句 ●PLSQL动态变量 var_str := '&input'; ●创建表空间和用户 --创建表空间 CREATE TABLESPACE "BCPBS" LOGGING DATAFILE 'D:\app\E430\oradata\orcl\BCPBS_01.ora' SIZE 2048M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED, 'D:\app\E430\oradata\orcl\BCPBS_02.ora' SIZE 2048M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ; --建立用户 CREATE USER "BCPBS" PROFILE "DEFAULT" IDENTIFIED BY "bcpbs123" DEFAULT TABLESPACE "BCPBS" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK; GRANT "CONNECT" TO "BCPBS"; GRANT "DBA" TO "BCPBS"; GRANT "RESOURCE" TO "BCPBS"; ●删除表空间和用户 drop user bcpbs cascade ; drop tablespace BCPBS including contents and datafiles cascade constraints ; ●自定义函数 CREATE OR REPLACE FUNCTION fun_level_value(level_value number) RETURN number IS return_value number:=null; BEGIN CASE level_value WHEN 0 THEN return_value:='0'; WHEN 1 THEN return_value:='1'; WHEN 2 THEN return_value:='2'; WHEN 3 THEN return_value:='3'; WHEN 6 THEN return_value:='8'; ELSE

韩顺平2011玩转oracle10g视频教学课堂笔记(完整版)

顺平j2ee系列教程--玩转oracle10g学习笔记 引言: 数据保存问题? 可使用文件保存和数据库保存。 使用文件保存数据存在几个缺点: 1、文本的安全性问题; 2、文件不利于查询和对数据的管理; 3、文件不利于存放海量数据; 4、文件在程序中控制不方便。 为解决数据保存问题,专家们设计出更加利于管理数据的东东--数据库(本质就是一个软件),它能更有效的管理数据。数据库是衡量一个程序员水平的重要指标。 数据库 1、数据库的本质就是一款软件,这个软件专门用于管理和维护数据; 2、数据存放在数据库中。 数据库服务器、数据库和表的关系 所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每个应用创建一个数据库。 为了保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。 数据库服务器、数据库和表的关系如图所示:

为什么选择oracle--性能优越 概述:目前主流数据库包括 微软: sql server和access 瑞典MySql: AB公司mysql ibm公司: db2(处理海量) 美国Sybase公司: Sybase ibm公司: informix 美国oracle公司: oracle 做项目时应当如何选择数据库? 1、标的(项目预算); 2、功能的要求; 3、并发数(多少人用); 4、安全、稳定性。 5、操作系统(unix[solaris,freeBSD,aix,hp unix]/linux/window) oracle数据库的认证 oca(oracle certified associate)初级认证 ocp(oracle certified professional)中级认证 ocm(oracle certified master)高级认证 oracle10g安装步骤: 1、安装文件 2、把10201_database_win32.zip文件copy到没有中文的路径下 3、检查服务选项,确定本机没有安装过oracle数据库,如果有则卸载 4、将压缩包解压后,双击setup.exe文件进行安装。 说明:建议大家自己建立一个文件目录,比如d:/hsporacle/oracle,然后把数据库安装到

Oracle EBS常用表和视图

fnd_user 系统用户表 fnd_application 应用信息表 FND_PROFILE_OPTIONS_VL 系统配置文件 fnd_menus 菜单 fnd_menu_entries_tl FND_NEW_MESSAGES 消息表 FND_FORM 表单表 FND_CONCURRENT_PROGRAMS_VL 并发程序视图 FND_CONCURRENT_PROGRAMS_TL FND_CONCURRENT_PROGRAMS FND_DESCR_FLEX_COL_USAGE_VL FND_DESCR_FLEX_COL_USAGE_TL FND_DESCR_FLEX_COLUMN_USAGES FND_EXECUTABLES_FORM_V 可执行并发程序视图FND_EXECUTABLES_TL FND_EXECUTABLES FND_DESCRIPTIVE_FLEXS FND_CONC_REQ_SUMMARY_V 并发请求视图FND_CONCURRENT_REQUESTS FND_RESPONSIBILITY 职责表

FND_RESPONSIBILITY_VL 职责FND_USER_RESP_GROUPS 用户职责 fnd_flex_value_sets 值集表 FND_FLEX_VALUES FND_IREP_ALL_INTERFACES 接口表 FND_IREP_CLASSES Fnd_Irep_Classes_Tl fnd_territories_vl 国家视图 fnd_log_messages 日志表 fnd_form_functions 功能 FND_DOCUMENT_SEQUENCES 单据序列 FND_DOC_SEQUENCE_ASSIGNMENTS 序列分配 fnd_id_flexs 关键弹性域定义表 FND_ID_FLEX_STRUCTURES 弹性域结构表 FND_ID_FLEX_SEGMENTS 弹性域段表 fnd_descriptive_flexs 描述性弹性域属性表 FND_DESCR_FLEX_CONTEXTS 弹性域列类别表 FND_DESCR_FLEX_COLUMN_USAGES 弹性域列类别属性表FND_FLEX_VALUE_SETS 值集表 FND_FLEX_VALUES 值表 Fnd_Flex_Values_Tl 值描述表

Oracle学习笔记

Oracle的四个主要用户 1.超级管理员sys/change_on_install 2.普通管理员system/manager 3.普通用户scott/tiger 4.大数据用户sh/sh 简单查询 1.查询表结构 DESC 表名 2.简单查询SELECT [DISTINCT] *|[字段 [别名]] [,字段 [别名]] … FROM 表名 [别名] (1)查询时也可以使用四则运算,如:SELECT (字段*x)+y FROM 表名 (2)可以使用“||”连接字段与字符串,如: select '工作与工资:' || job || sal 工作工资 from emp 执行结果: 3.限定查询SELECT [DISTINCT] *|[字段 [别名]] [,字段 [别名]] … FROM 表名 [别名] [WHERE 条件(s)] (1)Where字句后可以增加多个条件,最常见的条件就是最基本关系运算:>、<、>=、<=、!=(<>)、BE TWEEN…AND、LIKE、IN(指定范围)、IS NULL(为空)、AND(且)、OR(或)、NOT(非)。 (2)多个条件可以使用AND与OR连接。 例如:select * from emp where sal>1300 and sal<4000 (3)范围判断BE TWEEN…AND:BETWEEN 最小值 AND 最大值(大于等于最小值,小于等于最大值),BE TWEEN…AND 对数字、日期都可以使用!!! 例如:select * from emp where sal between 1300 and 4000 例如:select * from emp where hiredate between '01-1月-1981' and '31-12月-1981' (4)判断为空IS (NOT) NULL 例如:select * from emp where comm is null 例如:select * from emp where comm is not null 例如:select * from emp where not comm is null (5)指定范围的判断(NOT) IN 例如:select * from emp where empno in(7369,7566,7799)

Oracle10g学习笔记之Scott的所有表结构及字段含义

Oracle10g学习笔记之Scott的所有表结构及字段含义(一)EMP,DEPT ,BONUS,SALGRADE表 雇员表:记录了一个雇员的基本信息 EMP(雇员表) NO 字段类型描述 1 EMPNO NUMBER(4) 雇员编号 2 ENAME V ARCHAR2(10) 表示雇员姓名 3 JOB V ARCHAR2(9) 表示工作职位 4 MGR NUMBER(4) 表示一个雇员的领导编号 5 HIREDA TE DA TE 表示雇佣日期 6 SAL NUMBER(7,2) 表示月薪,工资 7 COMM NUMBER(7,2) 表示奖金或佣金 8 DEPTNO NUMBER(2) 表示部门编号 部门表:表示一个部门的具体信息 DEPT(部门表) NO 字段类型描述 1 DEPTNO NUMBER(2) 部门编号 2 DNAME V ARCHAR2(14) 部门名称 3 LOC V ARCHAR2(13) 部门位置 奖金表:表示一个雇员的工资及奖金。 BONUS(奖金表) NO 字段类型描述 1 ENAME V ARCHAR2(10) 雇员姓名 2 JOB V ARCHAR2(9) 雇员工作 3 SAL NUMBER 雇员工资 4 COMM NUMBER 雇员奖金 一个公司是有等级制度,用此表表示一个工资的等级 SALGRADE(工资等级表) NO 字段类型描述 1 GRADE NUMBER 等级名称 2 LOSAL NUMBER 此等级的最低工资 3 HISAL NUMBER 此等级的最高工资 实验任务: 创建一个表STUDENT(SNO,SNAME,SAGE,SSEX,SDEPT),其中SAGE 为NUMBER类型,其余为V ARCHAR2,定义出主键,并要求SNAME为非空。 2、以SAGE的降序为STUDENT表建立索引,索引名为TEST。 查询雇员的工资在2000到3000之间的员工的姓名和受雇佣时间。 4、查询工资最高的员工的员工号和姓名。 查询部门号为20的雇员的人数。 6、查询各部门的雇员人数。 查询每个员工的间接上司的员工号。----自身连接

Oracle常用数据字典表(系统表或系统视图)及查询SQL

Oracle常用数据字典表(系统表或系统视图)及查询SQL 2014年12月15日?数据库?共4187字?暂无评论?阅读861 次 文章目录 ?数据字典分类 ?dba_开头 ?user_开头 ?v$开头 ?all_开头 ?session_开头 ?index_开头 ?伪表 ?数据字典常用SQL查询 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的。比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息的视图等。 数据字典系统表,保存在system表空间中。查询所有数据字典可用语句“select * from dictionary;”。 数据字典分类 数据字典主要可分为四部分: 1)内部RDBMS表:x$*,用于跟踪内部数据库信息,维持DB的正常运行。是加密命名的,不允许sysdba以外的用户直接访问,显示授权不被允许。

2)数据字典表:*$,如tab$,obj$,ts$等,用来存储表、索引、约束以及其他数据库结构的信息。 3)动态性能视图:gv$*,v$*,记录了DB运行时信息和统计数据,大部分动态性能视图被实时更新以反映DB当前状态。 4)数据字典视图:user_*、all_*、dba_*,在非Sys用户下,我们访问的都是同义词,而不是V$视图或GV视图。 数据库启动时,动态创建x$,在X$基础上创建GV$,在GV$基础上创建V$X$表-->GV$(视图)--->V$(视图)。 数据字典视图可分为静态数据字典视图和动态数据字典视图。 静态数据字典是指在用户访问数据字典时内容不会发生改变。这类数据字典主要是由表和视图组成,应该注意的是,数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。 静态数据字典中的视图分为三类,它们分别由三个前缀够成:user_*(该用户方案对象的信息)、all_*(该用户可以访问的所有对象的信息)、dba_*(全部数据库对象的信息)。 动态数据字典是Oracle包含的一些潜在的由系统管理员如SYS维护的表和视图,由于当数据库运行的时候它们会不断进行更新,所以称它们为动态数据字典。这些视图提供了关于内存和磁盘的运行情况,所以我们只能对其进行只读访问而不能修改它们。Oracle中这些动态性能视图都是以v$开头的视图,比如v$access。 dba_开头 dba_users数据库用户信息

相关主题