当前位置:文档之家› Oracle笔记

Oracle笔记

Oracle笔记
Oracle笔记

1、登录oracle的三种方式:

【1】、oracle的图形界面

【2】、命令行[输入sqlplus]

【3】、浏览器[如图]

【4】、如果自己机器装不上,可以访问其他装好的ip,使用isqlplus也行。

2、登录时候遇到的蛋疼问题【如图】

3、登录时候可以这样写

sqlplus sys/Mm901401 as sysdba

注:在sqlplus / as sysdba执行后,SQL>select name from v$database;可以查看sid查出来ORCL大写

select INSTANCE_NAME from v$instance查出来结果是orcl小写—使用后面的连接字符串正确

4、alter user scott account unlock;//用户解锁

5、oracle加快开机速度,修改三个自动为手动,使用时开启那三个即可

6、sql语言四大类(查询语句dml(数据操作)ddl(数据定义))

【1】******(select)查询语句(记住背过):

7、desc emp(表名)//用来描述emp表中有些什么字段

EMPNO//雇员编号

ENAME//雇员名字

JOB//雇员职位

MGR//雇员经理人

HIREDATE//入职日期

SAL//薪水

COMM//津贴

DEPINO//部门编号

Desc dept//部门

Desc dalgrade//薪水等级

补充:varchar2表示可变字符串

8、select * from salgrade;

9、select * from dual;//算一行数据

10、select sysdate from dual;//系统时间此处如果用emp表之类的,仍然显示14行。

11、s elect ename,sal*12 “anuual_sal” from dual; //把sal*12的字段重命名为anuual_sal,注意,此处如果anuual和sal中间是特殊字符。例如空格的话,必须把anuual和sal俩边加双引号。此处的双引号有俩个作用【1】、特殊字符必须俩边有双引号;【2】、保持字段原来的格式试一下以下俩条命令:select ename,sal*12 “anuual sal” from dual;//显示跟原来一样

select ename,sal*12 anuual_sal from dual;//变成了ANUUAL_SAL,此处的anuual和sal之间的下划线不算特殊字符。可以不需要引号

12、select ename,sal*12+comm. from emp;//任何含有空值的数学表达式最后的值都是空值。

13、字符串连接符select ename || sal from emp;

Select ename || …dsjlfkjaslfjlasjflasjflakjs? from emp;//在oracle中使用单引号括起来的一段字符表示字符串。

14、select ename || …asdfa?ldsjflsj? from emp;//这里的写法是错误的,在需要连接的字符串中如果有单引号,应该使用俩个单引号代替,正确如下

select ename || …asdfa??ldsjflsj? from emp;

15\select distinct deptno from emp;//去掉deptno中重复的数字

16、select distinct deptno,job from emp;//去掉每一行他俩个都重复的

17、select * from emp where deptno = 10;

Select * from emp where ename = …CLARK?; //此处clark必须为大写,否则会出现显示为找不到行

***Select ename,sal,deptno from emp where deptno <> 10;****** //<>在sql语句中表示不等于

Select ename , sal from emp where ename > …CBA?; //此处比较字母的ascii吗

Select ename , sal from emp where sal between 800 and 1500;这个sql语句和下面这个select ename , sal from emp where sal >=800 and sal <=1500; //等价的。

And可以用来连接俩个条件。

18、select ename, sal, comm from emp where comm. is null; // 找空值

19、select ename , sal, comm. from enp where sal in (800, 1500, 2000); // 谁的sal等于800或1500或2000。

select ename , sal, comm. from enp where ename in (CLARK, KING,);//找字符串也行

20、select ename , sal , hiredate from emp where hiredate > ?20-2月-81?;

等价于select ename , sal , hiredate from emp where hiredate > ?20-2月-1981? / /日期的写的形式必须是这样子

注意:不能省略月这个字,不能写成20-2-81

21、连接符and or not

Select ename , sal from emp where sal not in <800,1500>;

select ename , sal from emp where sal > 100 or deptno <1000;

22、select ename from emp where ename like …%ALL%?; //%表示一个或多个字母

Select ename from emp where ename like …_A%?;

23、正则表达式.代表一个字母*代表零个或多个字母?代表零个或者一个字母

+代表一个或者多个字母%代表零个或多个

如果字符串中带有%号,那么使用转义字符,默认是\,也可以自定义成$如图

24、数据排序:select * from dept order by deptno(默认是升序排列);

也可以写成select * from dept order by deptno asc; //生序排列

select * from dept order by deptno desc; //降序排列

select empno,ename from emp where deptno <> 10 order by empno asc;// where和order的混合25、如果有俩个排序,先按照前面的排列,如果前面数据相同,再按照后面的顺序排列

26、sql函数(包括单行函数和多行函数)

单行函数(26-29)

Lower upper substr(截子串)

Select lower(ename)from emp;

Select substr(ename,1,3) from emp; //从第一个开始截取三个

select chr (65) from dual; //吧一个数字转换成字母

select ascii(?A?)from dual;// 吧字符转换成ascii吗

select round(23.652)from dual;//四舍五入

select round (23.652,2)from dual; //四舍五入到小数点后俩位

select round(23.652,-1)from dual; //四舍五入到十位数,默认为0是个位****select to_char(sal,?$99,999.9999?) from emp;*********//9代表一位数字,把sal转换为小数点后四位数字,十万位之前没有的形式。

select to_char(sal,?L99,999.9999?) from emp; \\本地货币

select to_char(sal,?$00,000.0000?) from emp; \\跟9一样也是表示数字,但是用0时如果该位没有数字强制变为0。

****select hiredate from emp;

Select to_char (hiredate,?YYYY-MM-DD HH:MI:SS?) from emp;

Select to_char (sysdate,?YYYY-MM-DD HH:MI:SS?) from emp;//系统当前时间

Select to_char (sysdate,?YYYY-MM-DD HH24:MI:SS?) from emp;//24进制

27、select ename , hiredate from emp where hiredate > to_date(…1981-2-20 12:34:56?,?YYYY-MM-DD HH24:MI:SS?); //将字符串转换成日期,第二个参数为了告诉怎

么转换。(这里使用系统默认格式,不转换怎么写即09-6月-81这种形式的??)

28、select sal from emp where sal > to_number(…$1,250.00?,?$9,999.99?);//字符串转换数字

29、select ename , sal*12 + nvl(comm.,0) from emp; //这个函数意思是如果comm为null,用0代替,不为null就是原来的comm的值

*******多行函数(组函数)作用:把多条记录作为输入,

最后产生一个输出。********重点

30、select max(sal) from emp; select min(sal) from emp; select avg(sal) from emp;//取出薪水的最大,最小,平均值

Select to_char(avg(sal),?99999.99?) from emp; //取平均值到小数点后俩位

Select round(avg(sal), 2) from emp; //取平均值四舍五入小数点后俩位

Select sum(sal) from emp; //每个月总共的薪水

Select count(*) form emp;//求出这张表一共多少条记录

Select conut (*) from emp where deptno=10;

Select conut (ename) from emp;

Select count(comm.) from emp; //conut的作用是统计字段中非空数据个数

Select count(distinct deptno) from emp; //去掉deptno字段重复数据后数据的个数

******五个多行函数特别重要min 、max、avg、sum、count 牢牢记住*********

31、(牢牢掌握住)select avg(sal) from emp group by deptno;//按照deptno10 ,30 ,20 的进行分组,算出不同分组sal的平均值。

Select sal, avg(sal) from emp group by deptno;

Select deptno , job , max(sal) from emp group by deptno,job;//按照deptno和job都相同的分为一组。分为了9组

Select ename from emp where sal = (select max(sal) from emp);//这里使用了子查询

注意:这个语句是错误的select ename ,max(sal)from emp;(max是多行函数,与ename 不匹配)

*****************************************************************

出现在select查询列表中的字段,没有出现在组函数里,必须出现在group by函数字段里。

这就是为什么select ename,max(sal) from emp group by deptno;错误

而select deptno,max(sal) from emp group by deptno;正确的原因**********************************************************************

求在所有人中,薪水值最高的这些人的名字以及他的薪水,编号

Select ename , deptno ,sal from emp where sal = (select max(sal) from emp);

******************************************************************************* ***

如何求出,每个部门里面,薪水最高的这些人的名字??

(不严密的方法)可能想到利用19的in来求

Select ename,sal,deptno from emp where sal in (select max(sal) from emp group by deptno);

(表面看正确,但是假如10这个部门再有一个3000,同样会取出来,它只要是等于2850,3000,5000都会取出来视频13讲)

正确的写法:

自己总结的几点:

1、子句中select语句中出现的字段在主句中不能再出现

(错误)

(正确)

2、括号位置不影响语句正确性

3、字据中join里面的max(xx)函数必须起别名(否者出现下面的错误)

(错误)

32 select avg(sal),deptno from emp group by deptno having avg(sal)>2000;//having用来限制group by,where不能限制group by

***************************************************************************

Sql语句的顺序:(记住)

1Select xx from emp

2Where sal > 1000//数据过滤

3Group by deptno //数据分组

4Having //分组过滤

5Order by//对最后结果进行排序

执行时候也是按照这个顺序进行,牢牢记住(having这一讲)***************************************************************************

例题:要求薪水大于一千二的雇员,按照部门编号进行分组,分组之后的平均薪水必须大于一千五,查询分组之内的平均工资,按照工资的倒序进行排列。

33、子查询:那些人的工资位于平均薪水之上

Select ename,sal from emp where sal >= (select avg(sal) from emp);

理解子查询的关键,把他当成一张表(理解:如何求出,每个部门里面,薪水最高的这些人的名字??)

例题:求每个部门平均薪水等级(16讲)

34、自连接(自己和自己连接,同一张表,起不同的别名,当成俩张表用)

例题:求一个人和其对应的经理人名字

35、1992,1999

(新的语法规则下,where只负责数据过滤,只写数据过滤条件,而连接条件放在join on 里)

Select ename,dname from emp,dept;1992

Select ename,dname from emp cross join dept;1999 (交叉连接)

Select ename , dname from emp , dept where emp.deptno = dept.deptno;(1992)

Select ename , dname from emp join dept on (emp.deptno = dept.deptno);(1999)

一个简单的写法

Select ename , dname from emp join dept using (deptno); //这句话意思是ename,和dname 中都有一个deptno字段,并且ename的deptno等于dname的deptno。等价于上面的写法,但是不推荐使用。

非等值连接:

Select ename , grade from emp e join salgrade s on (e.sal between s.losal and s.hisal);

Select ename , dname ,grade from emp e join dept d on (e.deptno = d.deptno) join salgrade s on (e.sal between s.losal and s.hisal) where ename not like …_A%?;

经理人例题:

Select e1.ename , e2.ename from emp e1 join emp e2 on (e1.mgr = e2.empno);

想要把king显示出来

Select e1.ename , e2.ename from emp e1 left outer join emp e2 on (e1.mgr = e2.empno);

上面这个句子叫做左外连接,可以把左边这个表中多余的数据显示出来,即不能和右边产生链接的数据显示出来。其中outer可以省略,效果如下:

右连接:(outer可以省略)

全外连接:

Select ename , dname from emp full outer join dept on (emp.deptno = dept.deptno);

--求部门的平均的薪水等级

Ed命令:

--雇员中有哪些人是经理人

select ename from emp where empno in (select distinct mgr from emp);

--不准用组函数,求薪水的最高值(面试题)

自己写的语句如下:

1999年语法,自连接写法:

--求平均薪水最高的部门的部门编号

思路:首先求各个部门的平均薪水

Select deptno , avg(sal) from emp group by deptno;(表)

其次求出来薪水的最高值

Select max(avg_sal) from (select deptno , avg(sal) avg_sal from emp group by deptno);

上面这个表当做值

最后通过第一个表,找到最高值的对应的部门

Select deptno , max_sal from (select deptno , avg(sal) max_sal from emp group by deptno) where max_sal = (select max(avg_sal) from (select deptno , avg (sal) avg_sal from emp group by deptno));效果如下图图:

也可以按照马士兵的格式如下:

组函数函数嵌套写法:

--求平均薪水最高的部门的部门名称

上面求出来薪水最高的部门编号,只要再把上面的结果中deptno当成值,当成下面的一个where条件,从dept表中找即可。

组函数嵌套写法:

--求平均薪水最低的部门的部门名称

四步:类似上面求最大的,结果如下

组函数可以互相嵌套,但是最多嵌套俩层(21讲)实际效果见(1和2)

--求平均薪水等级最低的部门的部门名称

select d.deptno , dname , avg_sal from (select deptno , avg_sal , grade from

(

select deptno , avg(sal) avg_sal from emp group by deptno) t join salgrade s on (t.avg_sal between s.losal and s.hisal)) t1 join dept d on (t1.deptno = d.deptno)

where grade = (select min(grade) from

(

select deptno , avg_sal , grade from

(

select deptno , avg(sal) avg_sal from emp group by deptno

) t

join salgrade s on (t.avg_sal between s.losal and s.hisal)

)

)

简化的写法:

注意:直接使用别名的方法不可以,例如

正确的方法是:

首先可以创建一个视图(就是一个虚表,实际的数据还在原来的表中)提示scott权限不足

提升权限

Conn sys/Mm901401 as sysdba;//进去管理员账户

Grant create table , create view to scott;//赋权限

如图:

重新连接scott

Conn scott/tiger;

创建视图

create view v$_dept_avg_sal_info as

select deptno , avg_sal , grade from

(

select deptno , avg(sal) avg_sal from emp group by deptno

) t

join salgrade s on (t.avg_sal between s.losal and s.hisal)

/

效果如下:

简化的写法:

select d.deptno , dname , avg_sal from v$_dept_avg_sal_info t1

join dept d on (t1.deptno = d.deptno)

where grade = (select min(grade) from (select deptno , avg_sal , grade from

v$_dept_avg_sal_info))

/

视图以v$开头

视图就是一个子查询,或者说就是一张表,这张表示虚表,实际当中数据存在实际的表里面。当成一张表用。

--求部门经理人中平均薪水最低的部门名称(思考题)

--比普通员工最高薪水还要高的经理人名称

求出普通员工最高薪水

经理人名称

--求薪水最高的前5名雇员

自己的解决方法,利用了rownum

第一步、select rownum ,ename ,sal from (select ename , sal from emp order by sal desc);

第二步、利用上表求出来前五的人

select ename , sal from

(

select rownum r,ename ,sal from (select ename , sal from emp order by sal desc)

)

where r <= 5

马士兵

--求薪水最高的第6到第10名雇员(重点掌握)

--练习:求最后入职的5民员工

--面试题:比较效率

Select * from emp where deptno = 10 and ename like …%A%?;

Select * from emp where ename like …%A%? and deptno = 10;

理论上第一个效率高,即数字在前的效率高一点,实际情况可能数据库本身会有优化,可能本身会将查询的数字提前之类,不一定!

36、create new user

创建、删除表、赋权限等操作必须以超级管理员登录

第一步、backup scott (备份scott相关的表数据等,为了备份到新用户)

exp (输出执行了oracle中的export.exe文件)

首先进入新建的目录,执行exp,进入scott 把scott的东西都导出来,(一路回车)

第二步、create user

Create user tangtang(用户名)identified(认证、标示) by tangtang(用户名密码都是tangtang)default tablespace users(默认表空间)quota(配额)10M on users(给users分配10m的空间)

给用户分配权限

Grant create session(登录的权限) , create table , create view to tangtang;

第三步、import the data

Imp

注意:后面这个用户名需要填写scott,因为这里只是导入scott用户的数据,可能里面还建立了其他用户的数据

37、insert

Desc dept;

Insert into dept values(50,?gay?,?ningwu?);

为了不弄乱数据,我们可以备份

Rollback命令(回退)

Create table emp2 as select * from emp;

Cerete table dept2 as select * from dept;

(insert 的三种形式)

Insert into dept2 values(50,?gay?,?ningwu?);//不写字段名,按照字段顺序

Insert into dept2(deptno,dname) values(60,?lala?);//选择某些字段,不写的默认为空值

Insert into dept2 select * from dept;//使用子查询,子查询结构必须与表结构完全一致

37、rownum只能和<或者<=号一起使用(oracle比较坑)

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数据库管理)玩转实战教程学习笔记最全版

(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.如何限定特定IP访问数据库 可以利用登录触发器、cmgw或者是在$OREACLE_HOME/network/admin下新增一个protocol.ora文件(有些os可能是. protocol.ora),9i可以直接修改sqlnet.ora: 增加如下内容: tcp.validnode_checking=yes #允许访问的ip tcp.inited_nodes=(ip1,ip2,...) #不允许访问的ip tcp.excluded_nodes=(ip1,ip2,...) 2.如何穿过防火墙连接数据库 这个问题只会在WIN平台出现,UNIX平台会自动解决。 解决方法: 在服务器端的SQLNET.ORA应类似 SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME) TRACE_LEVEL_CLIENT = 16 注册表的HOME0加[HKEY_LOCAL_MACHINE] USE_SHARED_SOCKET=TRUE 3.如何利用hostname方式连接数据库 host name方式只支持tcp/ip协议的小局域网 修改listener.ora中的如下信息 (SID_DESC = (GLOBAL_DBNAME = ur_hostname) --你的机器名 (ORACLE_HOME = E:\oracle\ora92) --oracle home (SID_NAME = orcl) --sid name ) 然后在客户端 的sqlnet.ora中,确保有 NAMES.DIRECTORY_PATH= (HOSTNAME) 你就可以利用数据库服务器的名称访问数据库了 4.dbms_repcat_admin能带来什么安全隐患 如果一个用户能执行dbms_repcat_admin包,将获得极大的系统权限。 以下情况可能获得该包的执行权限: 1、在sys下grant execute on dbms_repcat_admin to public[|user_name] 2、用户拥有execute any procedure特权(仅限于9i以下,9i必须显示授权) 如果用户通过执行如下语句: exec sys.dbms_repcat_admin.grant_admin_any_schema('user_name'); 该用户将获得极大的系统特权 可以从user_sys_privs中获得详细信息

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) “入职天

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)

学习oracle数据库的总结(图文整理)

1、在开发环境中连接到数据库,进行基本的select查询操作; 2、熟悉plsql的使用; 3、熟悉sqlplus相关命令(登录、查询、导入导出等) 登录sqlplus: 第一:使用dos窗口登录sqlplus Sqlplus 用户名/密码@数据库实例名 Sqlplus system/密码@数据库实例名as sysdba 第二:使用oracle自带的一个sqlplus登录,提供界面,显得更简单一些。 显示当前用户名:show user; 创建一个用户:create user 用户名identified by 密码; 给用户赋予登录的权限:grant connect to 用户名;(此时才可以使用这个用户来登录这个数据库。)给其赋予dba的权限。 修改用户的密码:alter user 用户名identified by 新密码; 查询: Select * from t_user; Select id from t_user; Select name from t_user; Select birthday from t_user; Select id,name from t_user; 导入导出: 导出表: (注意,导出表的exp命令不是在sqlplus下使用的,是在dos窗口下使用的命令。) exp userid=test/sa@test tables=(qx) file=d:\e1223.dmp exp userid=test/sa@test tables=(t_user,qx) file=f:\test.dmp 导出方案: Exp userid=test/sa@test owner=test file=f:\test2.dmp 导出数据库: Exp userid=test/sa@test full=y inctype=complete file=f:\all.dmp 导入表: 下面以一个例子来说明: 看下面的图,我的用户名test,密码sa,数据库实例名test,所有的表都在这里 现在我执行导出表JD的操作:exp userid=test/sa@test tables=(jd) file=f:\jd.dmp 在我的f盘下就出现了这么一个.dmp文件

Oracle EBSGL学习笔记

12.8 1、冲销日记账 1) 原始 借:租金10,000 本位币美元 贷:现金10,000 本位币美元 冲销 借:现金10,000 本位币美元 贷:租金10,000 本位币美元 2)可以创建冲销日记账分录来冲销应计、估计、临时调整和重新分类,或更正错误。 3)方法: 转换借贷项:通过转换借项和贷项金额来冲销日记账分录。 红字冲销:通过将原始日记账金额从正值改为负值来冲销日记账分录。 4)日记账> 输入> 复核日记账(B)其他活动 日记账> 生成> 冲销 2、自动冲销日记账 1)可以自动冲销上一个月的应计日记账分录,并自动将其过账(如果需要)。 2)自动冲销日记账的前提条件: --日记账余额类型为“实际” --日记账类型已启用“自动冲销”选项 --日记账已过帐,但尚未冲销 --日记账冲销期间为“打开”或“将来可输入” 3) 设置> 日记账> 自动冲销(AutoReverse) 3、日记账分录报表提供:会计结算日期、类别、日记账名称、参考、日记账批 4、与Oracle General Ledger 集成 --在Excel中创建日记账 --通过Web ADI 加载到GL_INTERFACE 表 --从接口表中提交“日记账导入” -从Web ADI中与加载流程同时提交 -从Web ADI 中作为独立的提交流程提交 -从Oracle General Ledger中使用“导入日记账”窗口提交 5、Web ADI 的核心功能 1)布局功能 --从布局中删除或向布局中添加字段 --指定字段在布局中的位置 --为布局中的字段分配默认值 --保存布局,可以由具有适当责任的某个人来定义,然后由整个站点使用 2) 文本导入功能 --将文本文件数据导入到桌面文档中

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

oracle学习心得体会

oracle学习心得 一、sqlserver的理解 sqlserver服务器就像一栋大楼,大楼里的机房就像服务器的数据库,机房里的电脑如同数据库里的表 1、登录用户可以登录服务器——可以进大楼 2、登录用户成为数据库用户才能进指定的数据库——进入大楼的人给了某个机房的钥匙 才能进入机房 3、登录用户有权限使用表——进入机房的人有电脑的密码才能使用电脑 二、oracle的理解 oracle服务器(全局数据库)就像一个商场,商场的每一家公司是表空间,公司的业务是表 1、数据库由多个表空间组成——商场里有多家公司组成 2、表空间由段组成——公司要有自己的经营业务,可以只有一个业务,就是一个表空 间中只有一个段,可以有多个业务,就是一个表空间有多个段 3、段由区组成——单个业务的细分类别。例如有家公司经营三个业务,卖书,卖家电,

卖衣服,则每个业务就是一个段。而每个业务又有细分,比如卖书的话要进行分类了。计算机区,人文区,小说区等,每一区都要放上书架存放书籍,则书架就是oracle块,存放数据的 三、数据库,表空间,用户(指定默认表空间),表统统由管理员管理 四、在oem中管理数据库的步骤 1、创建 1)存储——表空间——创建表空间(tomspace)(类似于在sql中创建数据库, 通常可以省略,使用默认表空间为users,,临时表空间为temp) 2)首先展开安全性——创建新用户(tom,指定表空间)(类似于在sql中指定 数据库用户) 3)创建表——指定方案(用户)和表空间(列名不要带<>) 4)设置约束 5)输入信息:方案——用户名——表——右击——查看/编辑目录… 2、修改 1)方案——用户名——表 2)修改表结构,添加约束

oraclesql优化笔记

基本的Sql 编写注意事项 尽量少用IN 操作符,基本上所有的IN 操作符都可以用EXISTS 代替。 不用NOT IN操作符,可以用NOT EXISTS或者外连接+替代。 Oracle 在执行IN 子查询时,首先执行子查询,将查询结果放入临时表再执行主查询。而EXIST则是首先检查主查询,然后运行子查询直到找到第一个匹配项。NOT EXISTS:匕NOT IN效率稍高。但具体在选择IN或EXIST操作时,要根据主子表数据量大小来具体考虑。 不用“<>”或者“ !=”操作符。对不等于操作符的处理会造成全表扫描,可以用“ <” or “>”代替。 Where子句中出现IS NULL或者IS NOT NULL时,Oracle会停止使用索引而执行全表扫描。可以考虑在设计表时,对索引列设置为NOT NULL这样就可以用其他操作来取代判断NULL的操作。 当通配符“ %”或者“ _”作为查询字符串的第一个字符时,索引不会被使用。 对于有连接的列“ || ”,最后一个连接列索引会无效。尽量避 免连接,可以分开连接或者使用不作用在列上的函数替代。 如果索引不是基于函数的,那么当在Where子句中对索引列使用函数时,索引不再起作用。 Where子句中避免在索引列上使用计算,否则将导致索引失效而进行全表扫描。 对数据类型不同的列进行比较时,会使索引失效。

用“ >=”替代“ >”。 UNION操作符会对结果进行筛选,消除重复,数据量大的情况 下可能会引起磁盘排序。如果不需要删除重复记录,应该使用UNION ALL。 Oracle从下到上处理Where子句中多个查询条件,所以表连接语句应写在其他Where条件前,可以过滤掉最大数量记录的条件必须写在Where子句的末尾。 Oracle从右到左处理From子句中的表名,所以在From子句中包含多个表的情况下,将记录最少的表放在最后。(只在采用RBO 优化时有效,下文详述) Order By 语句中的非索引列会降低性能,可以通过添加索引的方式处理。严格控制在Order By 语句中使用表达式。 不同区域出现的相同的Sql 语句,要保证查询字符完全相同, 以利用SGA共享池,防止相同的Sql语句被多次分析。多利用内部函数提高Sql 效率。 当在Sql 语句中连接多个表时,使用表的别名,并将之作为每列的前缀。这样可以减少解析时间。 需要注意的是,随着Oracle 的升级,查询优化器会自动对Sql 语句进行优化,某些限制可能在新版本的Oracle 下不再是问题。尤其是采用CBO (Cost-Based Optimization ,基于代价的优化方式)时。 我们可以总结一下可能引起全表扫描的操作:

oracle数据库学习笔记心得

select* |字段表名 from 表名 where 布尔表达式【条件】 externalcandidate 职员相关信息 contractrecruiter 猎头公司 查看表里所有字段 describe[描述] contractrecruiter select cname,nperecentagecharge from contractrecruiter 不显示原来名字,显示现在名字【用AS】 select cname as "Recruiter Name",nperecentagecharge as "Hire Fees" from contractrecruiter 不显示原来名字,显示现在名字【可不用AS】 select cname "Recruiter Name",nperecentagecharge "Hire Fees" from contractrecruiter 【双引号是否写】 双引号是为了区分大小写 职位表 position select *from position 缺额运算:[想减] select VDESCRIPTION , nbudgetedstrength, NBUDGETEDSTRENGTH -NCURRENTSTRENGTH , NYEAR from position

select VDESCRIPTION "Potion", nbudgetedstrength "Budgeted Strength" , NBUDGETEDSTRENGTH -NCURRENTSTRENGTH "Vacancies", NYEAR "Year" from position 显示非重复运行 查询来源地的人数 describe externalcandidate 查看职员城市名字 select ccity from externalcandidate 查看职员城市名字【名字不重复,插入一个关键字:distinct】select distinct ccity,cstate from externalcandidate 运算符: 两列 select vfirstname,vlastname from externalcandidate 字段拼接 select vfirstname||vlastname from externalcandidate select vfirstname||' '||vlastname from externalcandidate 学校 describe college 查看所有学校 select *from college 查看只是加利福尼亚的学校 select * from college where cstate='California' 一个条件 select vfirstname,vlastname,dbirthdate,ntestscore from externalcandidate where dbirthdate>='01-1月-70'

Oracle数据库期末复习知识点整理

基础知识 表3.2 Oracle数据类型

表3.3 XSB的表结构

操作表 创建表 CREATE TABLE [schema.] table_name ( column_namedatatype [DEFAULT expression] [column_constraint][,…n] [,…n] ) [PCTFREE integer] [PCTUSED integer] [INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace_name] [STORGE storage_clause] [CLUSTER cluster_name(cluster_column,…n)] [ENABLE | DISABLE ] [AS subquery] 【例】使用CRETE TABLE命令为XSCJ数据库建立表XSB,表结构参照表3.3。 打开SQL*Plus工具,以system方案连接数据库,输入以下语句: CREATE TABLE XSB ( XH char(6) NOT NULL PRIMARY KEY, XM char(8) NOT NULL, XB char(2) DEFAULT '1' NOT NULL, CSSJ date NOT NULL, ZY char(12) NULL, ZXF number(2) NULL, BZ varchar2(200) NULL ); 修改表 ALTER TABLE [schema.] table_name [ ADD(column_namedatatype [DEFAULT expression][column_constraint],…n) ] /*增加新列*/ [ MODIFY([ datatype ] [ DEFAULT expression ] [column_constraint],…n) ] /*修改已有列的属性*/ [ STORAGE storage_clause ] *修改存储特征*/ [ DROP drop_clause ] /*删除列或约束条件*/ 【例】使用ALTER TABLE语句修改XSCJ数据库中的表。

Oracle笔记

数据库基本概念: 数据库:Database ,DB (数据) 数据库管理系统:(Database Management System,DBMS)oracle ,DB2,Sql_server 等 数据库系统:(Database System ,DBS) 关系型数据库:(Relationship Database ,RDB) SQL语言:(Structured Query Language,结构化查询语言) 数据建模: 要将现实世界中客观存在的事物以数据的形式存储到计算机中并进行处理,就需要对其进行分析,抽象,进而确定数据的结构以及数据间的内在联系,这一过程称为数据建模。 数据模型应满足三个方面的要求: 1,能够比较真实地模拟现实世界 2,容易为人所理解; 3,便于计算机实现。 数据模型三要素: 数据结构---描述事物的静态特性; 数据操作---描述事物的动态特性; 完整性约束----描述事物内部和事物间的约束性关系。 现实世界-------认识抽象-------->概念世界-------转换--------->机器世界 概念数据模型(Conceptual Database Model,CDM) CDM从用户的观点出发对信息进行建模,并不依赖于具体的计算机系统或某个DBMS系统,主要用于数据库的概念设计。 CDM以实体--关系(E-R)模型为基础,将现实世界中的客观对象抽象为实体和关系。 到机器世界中,CDM将被转化为特定DBMS所支持的物理数据模型(Physical Database Model ,PDM)。 CDM相关术语: 实体(Entity):客观存在并且可以相互区分开来的事物。 实体集(Entity Set):同一类实体的集合。 属性(Attribute):描述实体的特性。 关系(Relationship):实体集之间的对应关系(现实世界事物之间的相互关联)。 E-R图三要素: 实体:用矩形框表示

Oracle知识点总结

Oracle知识点总结 根据阎赫老师讲义整理Zealjiang 1、Oracle数据库的安装和配置 ⑴Oracle Internet级数据库 SQLServer 中小企业级数据库 Access 桌面级数据库 ⑵Oracle的安装 注意:来源和目标的目录不允许有中文或空格 ⑶Oracle数据库启动时必需开启的后台服务 ①OracleOrahome90TNSListener 使第三方的软件或语言访问 ②OracleServiceETC Oracle的实例 CRUD 增删改查 注意:②中的ETC是你起的实例的名字 ⑷Oracle的开发工具 ①DOS界面的开发平台 -> 运行->sqlplus ②Oracle本身基于DOS的平台 ->运行-> sqlplusw ③Oracle Enterprise Manager Console ④PL/SQL Developer7.1.5 ⑸创建一个表的完整流程 ①创建一个数数库 例子:创建一个数据库 ETC , 物理文件放在F:\ ,初始化1m ,自增长开启 create tablespace etc

datafile 'f:\etc.dbf' size 1m autoextend on; 删除表空间 drop tablespace 数据库名称; ②为该数据库创建一个帐号和密码 语法: create user 用户名称 identified by 密码 default tablespace 数据库名称 注意:1、在Oracle中账号和数据库one2one绑定 2、Oracle的密码不允许为纯数字或空 3、需要在system账号完成动作 修改Oracle的账号密码 语法:alter user 用户 identified by 新密码 ③用grant 权限 to 用户为该帐户授权 语法: grant 权限名称 to 用户; 撤销权限 语法:revoke 权限名称 from 用户名; ④在该帐号下创建表

oracle常用笔记总结

1、用dba权限的用户查看数据库都有哪些锁 select https://www.doczj.com/doc/d610405580.html,ername,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2 where t1.session_id=t2.sid order by t2.logon_time; 2、查看有哪些对象被锁了 select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id 3、根据sid查找进程id select pro.spid from v$session ses, v$process pro where ses.sid=129 and ses.paddr=pro.addr; select ses.sid from v$session ses, v$process pro where pro.spid=129 and ses.paddr=pro.addr; 4:根据这个spid对应linux下的进程pid linux命令: ps -ef | gre | 'ora' (找到所有ora开头的进程) kill -9 (pid) 5、解决delete后表的高水位的问题 初步判断应该是之前有大量数据,后来delete了,选成高水位,用shrink 清除高水位: alter table t_mobile_client_tp_prov enable row movement; alter table t_mobile_client_tp_prov shrink space; 重新收集统计信息: begin dbms_stats.gather_table_stats(ownname=>'traffic',tabname=>'T_MOBILE_CLIENT_TP_PR end; 6、ORA-02064 distributed operation not supported

Oracle数据库知识总结

AD1. 执行一个SQL脚本文件 SQL>start file_name SQL>@ file_name 我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。 4. 将显示的内容输出到指定文件 SQL> SPOOL file_name 在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。 5. 关闭spool输出 SQL> SPOOL OFF 只有关闭spool输出,才会在输出文件中看到输出的内容。 7. COL命令: 主要格式化列的显示形式。 1). 改变缺省的列标题 COLUMN column_name HEADING column_heading For example: Sql>select * from dept; DEPTNO DNAME LOC ---------- ---------------------------- --------- 10 ACCOUNTING NEW YORK sql>col LOC heading location sql>select * from dept; DEPTNO DNAME location --------- ---------------------------- ----------- 10 ACCOUNTING NEW YORK 2). 将列名ENAME改为新列名EMPLOYEE NAME并将新列名放在两行上: Sql>select * from emp Department name Salary ---------- ---------- ---------- 10 aaa 11 SQL> COLUMN ENAME HEADING ’Employee|Name’ Sql>select * from emp Employee Department name Salary ---------- ---------- ---------- 10 aaa 11 note: the col heading turn into two lines from one line. 3). 改变列的显示长度: FOR[MAT] format Sql>select empno,ename,job from emp; EMPNO ENAME JOB ---------- ---------- --------- 7369 SMITH CLERK

oracle笔记

Oracle笔记 一、了解oracle 二、Oracle的安装 三、启动oracle: (1)、使用oracle中自带的sql*plus工具进入oracle。 (2)、利用sqlplus和sqlplusw打开oracle。 (3)、使用sql/pl developer进入oracle. (4)、使用oracle企业管理器 四、常用sql*plus命令: (1)、连接数据库: conn (ect) 用户名/密码@网络服务名(数据库名) (as sysdba/sysoper); 例如:conn scott/tiger; (2)、退出:exit; (3)、运行sql脚本: start 脚本地址。 例如:start d:\test.sql; (4)、修改sql脚本: edit 脚本地址。 (5)、截取屏幕代码spool,例如:spool d:\demo.txt…………….spool off; (6)、创建用户(以sysoper以上权限创建):create user 用户名identified by 密码; (7)、删除用户(以sysoper以上权限删除):drop user 用户名; (8)、修改用户密码:passw(ord)或alter user 用户名identified by 密码。 (9)、显示当前用户名:show user; (11)、断开数据库连接:disc(onnect); (12)、行距与每页显示次数:set linesize(pagesize) 数目。 (13)、给予权限: grant connect(连接权限)/resource(在system中创建表权限)/dba(最高权限) to 用户名with admin(系统权限下传)/grant(对象权限下传) option ; (14)、收回权限: revoke conn(连接权限)/resource(在system中创建表权限)/dba(最高权限) from 用户名(15)、使用profile文件管理用户: 限定用户登录次数: Create profile 文件名limit failed_login_attempts 3 password_lock_time 2; Alter user 用户名profile 文件名 用户解锁: Alter user 用户名account unlock;

韩顺平.2011最新版.玩转oracle视频教程(笔记)

韩顺平—玩转ora cle视频教程笔记一:Oracle认证,与其它数据库比较,安装

Oracle安装会自动的生成sys用户和system用户: (1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install (2)system用户是管理操作员,权限也很大。具有sysoper角色,没有create database的权限,默认的密码是manager (3)一般讲,对数据库维护,使用system用户登录就可以拉 也就是说sys和system这两个用户最大的区别是在于有没有create database的权限。 二: Oracle的基本使用--基本命令 sql*plus的常用命令 连接命令 1.conn[ect] 用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]当用特权用户身份连接时,必须带上as sysdba或是as sysoper 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

oracle GoldenGate学习笔记

Oracle GoldenGate测试文档1.Oracle GoldenGate介绍 GoldenGate TDM(交易数据管理)软件是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化,再将这些变化应用到目标数据库,实现源数据库与目标数据库同步、双活。GoldenGate TDM 软件可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制,其复制过程简图如下: 如上图所示,GoldenGate TDM的数据复制过程如下: 利用捕捉进程(Capture Process)在源系统端读取Online Redo Log或Archive Log,然后进行解析,只提取其中数据的变化如增、删、改操作,并将相关信息转换为GoldenGate TDM自定义的中间格式存放在队列文件中。再利用传送进程将队列文件通过TCP/IP传送到目标系统。捕捉进程在每次读完log中的数据变化并在数据传送到目标系统后,会写检查点,记录当前完成捕捉的log位置,检查点的存在可以使捕捉进程在中止并恢复后可从检查点位置继续复制; 目标系统接受数据变化并缓存到GoldenGate TDM队列当中,队列为一系列临时存储数据变化的文件,等待投递进程读取数据; GoldenGate TDM投递进程从队列中读取数据变化并创建对应的SQL语句,通过数据库的本地接口执行,提交到数据库成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成。 由此可见,GoldenGate TDM是一种基于软件的数据复制方式,它从数据库的日志解析数据的变化(数据量只有日志的四分之一左右)。GoldenGate TDM将数据变化转化为自己的格式,直接通过TCP/IP网络传输,无需依赖于数据库自身的传递方式,而且可以通过高达9:1的压缩率对数据进行压缩,可以大大降低带宽需求。在目标端,GoldenGate TDM可以通

相关主题
文本预览
相关文档 最新文档