Oracle学习笔记(一)

最近需要用的oracle,所以大家好好的学习下基础并整理下资料,希望能帮助到需要的朋友。

一.基本的查询语句,特殊符号||。制定列的别名AS,唯一标示distinct

1.字符连接符“||”与“+”符

oracle:select  列名||'111111111111111' from 表名
sql:select  列名+'111111111111111' from 表名T

2“AS”符号
oracle:select  列名 as 新列名 from 表名 (空格,不能有as)新表名
sql:select  列名 as 新列名 from 表名T as(as可有可无) 新表名


二.数据排序与数据过滤查询与sql相同

in ,like, is null,between ... and ...,and ,or

order by 列名 asc/desc 默认升序

三.单行函数(single-row functions)
 Character字符函数、Number数字函数、Date日期函数、Conversion转换函数、General通用函数

1.字符函数:
Case字符处理函数包括:LOWER、UPPER、INITCAP
lower('SQL')->sql 把大写变小写
upper('sql')->SQL 把小写变大写
initcap('sql course')->Sql Course 首字母大写

Character操作函数

字符拼接
concat('Hello','World')->HelloWorld

字符截取
从左边第一个截取5个字符
substr('HelloWorld',1,5)->Hello

在sql中用left()函数

1、left()
LEFT (<character_expression>, <integer_expression>)
返回character_expression 左起 integer_expression 个字符。

列: left('helloworld',5)—>hello


从右边数第五个截取5个字符
substr('HelloWorld',-5,5)->World

在sql中用right()函数

1、right()
RIGHT(<character_expression>, <integer_expression>)
返回character_expression 左起 integer_expression 个字符。

列: right('helloworld',5)—>world

 

计算长度
length('HelloWorld')->10

查找字符w的位置
instr('HelloWorld','w')->6

在sql中用charindex()函数

2.charindex()
返回字符串中某个指定的子串出现的开始位置。
CHARINDEX (<'substring_expression'>, <expression>)
其中substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。
此函数不能用于TEXT 和IMAGE 数据类型。

取出10个字符不够以字符“*”左边填充
lpad('hello',10,'*')->*****hello

取出10个字符不够以字符“*”右边填充
rpad('hello'10,'*')->hello*****

从字符中删除首个字母
trim('H' from 'HelloWorld')->elloWorld

2.数字函数:round、trunc、mod
round(45.926,2)->45.923

trunc(45.926,2)->45.92

mod(16,3)->1求余数

3.日期函数

获取系统当前时间
sql:select getdate();
oracle: select sysdate from dual;

计算日期差:
months_between(sysdate,to_date('2010-11-29','yyyy-MM-dd'))

加上一个月
add_months(sysdate,1)

下个星期五是几号(plsql中执行)
select next_day(to_date('2011-11-1','yyyy-mm-dd'),'星期五')from dual ->2011-11-04

一月的最后一天:
last_day(to_date('2011-11-1','yyyy-mm-dd'))->2011-11-30


4.转换函数

 varchar2 or char -> number

 varchar2 or char -> date

 number ->varchar2

 date -> varchar2

获取当前星期几
oracle: select to_char(sysdate, 'day')  from dual
sql: select datename(weekday,getdate())

to_char(日期字段,'fmDD Month YYYY')
to_char(number,'format')
to_number(字符字段)
to_date('1-11-2011','dd-MM-yyyy')


sql: 中用CAST 和 CONVERT

将某种数据类型的表达式显式转换为另一种数据类型。CAST 和 CONVERT 提供相似的功能。

使用 CAST:
CAST ( expression AS data_type )

使用 CONVERT:
CONVERT (data_type[(length)], expression [, style])


函数嵌套 select length(substr('helloworld',1,5))

 

5.通用函数
nvl(parm1,parm2) 如果parm1为空 则返回parm2

nvl2(parm1,parm2,parm3)不为空,返回parm2,否则parm3

 如果两个表达式不相等,NULLIF 返回第一个 expression1 的值。
 如果两个表达式相等,NULLIF 返回空值NULL。
nullif(expression1,expression2)
coalesce(....)一次判断


4.多表查询,表 别名
sql:
1、内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符)。包括相等联接和自然联接。    
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。  

2、外联接。外联接可以是左向外联接、右向外联接或完整外部联接。    
在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:    

1)LEFT  JOIN或LEFT OUTER JOIN    
左向外联接的结果集包括  LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。      

2)RIGHT  JOIN 或 RIGHT  OUTER  JOIN    
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。      
3)FULL  JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。  

3、交叉联接  
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。   

FROM 子句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,用左或右向外联接指定表或视图时,表或视图的顺序很重要。有关使用左或右向外联接排列表的更多信息,请参见使用外联接。    

例子:  

-------------------------------------------------
  a表     id   name     b表     id   job   parent_id  
              1   张3                   1     23     1  
              2   李四                 2     34     2  
              3   王武                 3     34     4      
  a.id同parent_id   存在关系  

--------------------------------------------------   
 1) 内连接  
  select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id      
  结果是    
  1   张3                   1     23     1  
  2   李四                  2     34     2  

  2)左连接  
  select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id      
  结果是    
  1   张3                   1     23     1  
  2   李四                  2     34     2  
  3   王武                  null   

 3) 右连接  
  select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id      
  结果是    
  1   张3                   1     23     1  
  2   李四                  2     34     2  
  null                       3     34     4  

 4) 完全连接  
  select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id  

  结果是    
  1   张3                  1     23     1  
  2   李四                 2     34     2  
  null                   3     34     4  
  3   王武                 null


oracle学习笔记(二)

一、多行函数又称组合函数(Group Functions)、聚合函数

1、 Types of Group Functions
avg、count、max、min、stddev、sum、variance
avg 求平均数
select avg(nvl(列1,0)) from 表1
count求行数
在where条件中不允许使用聚合函数,但可以使用having avg(列1)>1000
having所起的作用和where一样

二、子查询Subqueries

查询前10行数据
oracle: select * from 表名 where rownum<=10;
sql: select top 10 * from 表名
单行子查询
select * from 表1 where 工资列1>(select avg(工资列1) from 表1)
多行子查询
select * from 表1 where 工资列1 in(select min(工资列1) from 表1 group by 部门列)

三、自定义变量

set verify on/off
show all
help show/set

column lie justify left

四、数据操作语句

1、insert插入语句
向表2里插入数据
oracle:insert into (select 列1,列2 from 表2)values('XXX','XXX');
oracle/sql:insert into(列1,列2)values('XXX','XXX');
从另一个表里复制数据
oracle/sql:insert into 表(列1,列2)select 列1,列2 from 表2

2、update语句
都为: update table set column1='...'[ ,column2='...'] where ...
嵌入子查询的修改
update table set column1=(select column2 form table where columnid=1) where column1='...'

delete删除语句
delete [from] table [where condition]

merge 合并语句
oracle:
merge into 表1 a using 表2 b on (a.id=b.id)
when matched then
update set
a.name=b.name,
a.other=b.other
when not matched then
insert values(b.id,b.name,b.other);
sql:合并insert,update
方法1:
declare @ROWCOUNT int
set @ROWCOUNT=(select count(*) from tb_name where name1='5')
if @ROWCOUNT!=0
update tb_name set name2='55555555' where name1='5'
else
insert into tb_name(name1,name2) values('5','插入')
方法2:
update tb_name set name2='55555555' where name1='6'
if @@ROWCOUNT=0
insert into tb_name(name1,name2) values('6','插入')

五,事务: 隐式、显式的事务

commit提交事务
rollback 回滚事务
locking锁
对并发性系统自动加锁,事务提交后、或回滚后自动解锁。 


oracle学习笔记(三)

一、创建和管理表
1、创建表语法
create table 表名(column datatype [default expr][,column ...])
default 约束 说明略

2、利用子查询创建表
create table 表名
as
select * from u表

二、修改表
1、添加一个新列
oracle:alter table table_name
add(column datatype [default expr][,column datatype]...);

2、修改现有的列(修改类型,大小,默认值)
oracle:alter table table_name
modify(column datatype [defaullt expr][,column datatype]...)

3、删除列
alter table table_name drop column(关键字) 列1
集中删除列
alter table table_name set unused column 列1
alter table table_name drop unused columns;

三、删除表
drop table 表名;删除表后自动提交,不能rollback回来。
重名表:rename 表名 to 新表名
高效清空一张表,用truncate 删除时不做日志记录也就是不能用rollback回滚回来。
truncate table 表名

用delete删除后,可以后悔,回滚回来。

给一张表做注释
comment on table tb_u_1 is '用户表用来存放用户信息....'

四,添加约束
create table table_name
(id int not null,
lname varchar(20),
fname varchar(20),
constraint un_key_1 unique(lname,fname)
)

alter table 表名 add constraint ch_1 check(column1 like 'k%');
在添加数据时如果column1的数据中没有k则添加失败

添加主键约束
oracle/sql:aleter table 表名1 add constraint pk_1 primary key(column1);
添加外键
oracle/sql:aleter table 表名2 add constraint fk_1 foreign key(column1) references 表名1(column1);


删除主键约束
oracle/sql:alter table tb_name drop constraint p1
alter table 表名2 drop constraint fk_1 cascade;
sql:查询主键是否存在p1
if exists(select * from sysobjects where name='p1')

select * from user_constraint

select constraint_name,column_name from user_cons_columns where table_name=''

五、创建视图Create View

create [or replace] [force|noforce] view view_name
[]
as subquery
[with check option [constraint 11]]
[with read only [constraint 22]]

创建一个视图或重定义一个视图
create or replace view view_name as subquery

如果表table_1不存在,则使用force 创建视图会成功,否则会报表不存在错误。
create force view v_name as select * from table_1

使用视图修改数据
create view view_001
as
select * from table_001 where id<10
修改不在视图范围内的数据同样会成功。
update view_001 set column1='123' where id=10;
修改不在视图范围内的数据则会失败(只能修改id<10),报:“视图 with check option 违反 where 字句”
create view view_001
as
select * from table_001 where id<10
with check option;
update view_001 set column1='123' where id=10;

创建只读视图 Create a read only view
create view view_001
as
select * from table_001 where id<10
with read only;

删除视图 Drop View
drop view view_Name

临时视图 inline views
select * from (select * from table_Name)

六、序列(sequence)、索引、同义词

创建序列(sequence)
create sequence seq_name
[increment by n]
[start with n]
[{maxvalue|nomaxvalue}]
[{minvalue|nominvalue}]
[{cycle|nocycle}]
[{cache|nocache}]
create sequence seq_test1
increment by 1
start with 1
查询序列Select a Sequence
select seq_test1.currval from daul
select seq_test1.nextvall from daul
select * from user_sequences(用户序列视图)

使用序列Using a Sequence
create table tb_1(a int);
insert into tb_1(seq_test1.currval);

修改序列Modifying a Sequence
alter sequence seq_test1
increment by 20
maxvalue 999999
nocache
nocycle;

创建索引Creating an Index
在一列或多列上创建索引Create an index on one or more columns
Create index index_test1
on table(column[,column]...);

索引能提高数据检索的速度,但是降低了UPDATE,DELETE,INSERT数据操作的性能!!!

索引创建原则(摘自csdn)

一.B-Tree索引:
1. 选项择索引字段的原则:
l 在WHERE子句中最频繁使用的字段
l 联接语句中的联接字段
l 选择高选择性的字段(如果很少的字段拥有相同值,即有很多独特值,则选择性很好)
l ORACLE在UNIQUE和主键字段上自动建立索引
l 在选择性很差的字段上建索引只有在这个字段的值分布非常倾斜的情况下下才有益(在这种情况下,某一,两个字段值比其它字值少出现很多)
l 不要在很少独特值的字段上建B-TREE索引,在这种情况下,你可以考虑在这些字段上建位图索引.在联机事务处理环境下,所由并发性非常高,索引经常被修改,所以不应该建位图索引
l 不要在经常被修改的字段上建索引.当有UPDATE,DELETE,INSETT操作时,ORACLE除了要更新表的数据外,同时也要更新索引,而且就象更新数据一样,或产生还原和重做条目
l 不要在有用到函数的字段上建索引,ORACLE在这种情况,优化器不会用到索引,除非你建立函数索引
l 可以考虑在外键字段上建索引,这些索引允许当在主表上UPDATE,DELETE操作时,不需要共享子表的锁,这非常适用于在父表和子表上有很多并发的INSERT,UPDATE和DELETE操作的情况
l 当建立索引后,请比较一下索引后所获得的查询性能的提高和UPDATE,DELETE,INSERT操作性能上的损失,比较得失后,再最后决定是否需建立这个索引
2. 选择建立复合索引
复合索引的优点:
l 改善选择性:复合索引比单个字段的索引更具选择性
l 减少I/O:如果要查询的字段刚好全部包含在复合索引的字段里,则ORACLE只须访问索引,无须访问表
什么情况下优化器会用到复合索引呢?
(a)当SQL语句的WHERE子句中有用到复合索引的领导字段时,ORACLE优化器会考虑用到复合索引来访问.
(b)当某几个字段在SQL语句的WHERE子句中经常通过AND操作符联合在一些使用作为过滤谓词,并且这几个字段合在一起时选择性比各自单个字段的选择性要更好时,可能考虑用这几个字段来建立复合索引.
(c)当有几个查询语句都是查询同样的几个字段值时,则可以考虑在这几个字段上建立复合索引.
复合索引字段排序的原则:
l 确保在WHERE子句中使用到的字段是复合索引的领导字段
l 如果某个字段在WHERE子句中最频繁使用,则在建立复合索引时,考虑把这个字段排在第一位(在CREATE INDEX语句中)
l 如果所有的字段在WHERE子句中使用频率相同,则将最具选择性的字段排在最前面,将最不具选择性的字段排在最后面
l 如果所有的字段在WHERE子句中使用频率相同,如果数据在物理上是按某一个字段排序的,则考虑将这个字段放在复合索引的第一位
二.位图索引
什么情况下位图索引能够改善查询的性能呢?
l WHERE子句包含多个谓词于中低基数的字段
l 单个的谓词在这些中低基数的字段上选取大量的行
l 已经有位图索引创建于某些或全部的这些中低基数的字段上
l 被查询的表包含很多行
l 可以在单一个表上建立多个位图索引,因此,位图索引能够改善包含冗长WHERE子句的复杂查询的性能,在合计查询和星形模型的联接查询语句中,位图索引也可以提供比较优良的性能
位图索引与B-TREE索引的比较
l 位图索引更节省存储空间
l 位图索引比较适用于数据仓库环境,但不适于联机事务处理环境.在数据仓库环境,数据维护通常上通过批量INSERT和批量UPDATE来完成的,所以索引的维护被延迟直互DML操作结束.举例:当你批量插入1000行数据时,这些插入的行被放置到排序缓存中(SORT BUFFER),然后批处理更新这1000个索引条目,所以,每一个位图段在每一个DML操作中只需更新一次,即使在那个位图段里有多行被更新
l 一个健值的压缩位图是由一个或多个位图段所组成,每一个位图段大约相当于半个BLOCK SIZE那么大,锁的最小粒度是一个位图段,在联机事务处理环境,如果多个事务执行同时的更新(即并发的更新),使用位图索引就会影响UPDATE,INSERT,DELETE性能了
l 一个B-TREE索引的条目只包含一个ROWID,因此,当一个索引条目被锁定,即一行被锁定.但是对于位图索引, 一个索引条目潜在地有可能包含一段ROWID(即某一个范围内的ROWID,有多个ROWID),当一个位图索引条目被锁定时,则这个条目包含的那一段ROWID都被锁定,从而影响并发性.当一个位图段内的ROWID的数量越多时,并发性就越差.虽然如此,对于BULK INSERT,UPDATE和DELETE,位图索引的性能还是比B-TREE索引要好
三,索引和NULL
NULL值在索引中是被看做一个独特值的除非当一个索引的两行或多行的NON-NULL值是相等的情况下.在那种情况下,行被看做是相等的,因此,唯一索引不允许行包含空值以怕被看做是相等的.但是,当所有的行都是空值时,这个规则就不适用.ORACLE并不索引所有健值都为NULL的表的行,除非是位图索引或当簇键字段值是NULL时

创建同义词Create a Synongms
create [public] synonym sy_name for object
创建一个别名为table_001
create synonym tb1 for table_001
删除同义词Drop a synonym
Drop synonym tb1
Oracle同义词创建及其作用(摘自http://www.jb51.net/database/201109/106257.html)

Oracle的同义词(synonyms)从字面上理解就是别名的意思,和试图的功能类似,就是一种映射关系。本文介绍如何创建同义词语句,删除同义词以及查看同义词语句。
  oracle的同义词总结:
  从字面上理解就是别名的意思,和试图的功能类似。就是一种映射关系。
  1.创建同义词语句:
  create public synonym table_name for user.table_name;
  其中第一个user_table和第二个user_table可以不一样。
  此外如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个Database Link(数据库连接)来扩展访问,然后在使用如下语句创建数据库同义词:create synonym table_name for table_name@DB_Link;
  当然,你可能需要在user用户中给当前用户(user2)授权: grant select/delete/update on user2
  2.删除同义词:
  drop public synonym table_name;
  3.查看所有同义词:
  select * from dba_synonyms
  同义词拥有如下好处:节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;同义词可以创建在不同一个数据库服务器上,通过网络实现连接。
Oracle数据库中提供了同义词管理的功能。Oracle同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。

AD:

在Oracle中对用户的管理是使用权限的方式来管理的,也就是说,如果我们想使用数据库,我们就必须得有权限,但是如果是别人将权限授予了我们,我们也是能对数据库进行操作的,但是我们必须要已授权的表的名称前键入该表所有者的名称,所以这就是比较麻烦的,遇到这种情况,我们该怎么办呢?创建个Oracle同义词吧!这样我们就可以直接使用同义词来使用表了。
1.同义词的概念
Oracle数据库中提供了同义词管理的功能。同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,Oracle数据库将它翻译成对应方案对象的名字。与视图类似,同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。在Oracle数据库中的大部分数据库对象,如表、视图、同义词、序列、存储过程、包等等,数据库管理员都可以根据实际情况为他们定义同义词。
2.Oracle同义词的分类
Oracle同义词有两种类型,分别是公用Oracle同义词与私有Oracle同义词。
1)公用Oracle同义词:由一个特殊的用户组Public所拥有。顾名思义,数据库中所有的用户都可以使用公用同义词。公用同义词往往用来标示一些比较普通的数据库对象,这些对象往往大家都需要引用。
2)私有Oracle同义词:它是跟公用同义词所对应,他是由创建他的用户所有。当然,这个同义词的创建者,可以通过授权控制其他用户是否有权使用属于自己的私有同义词。
3.Oracle同义词创建及删除
创建公有Oracle同义词的语法:Create [public] synonym 同义词名称 for [username.]objectName;
Drop [public] synonym 同义词名称
4.Oracle同义词的作用
1) 多用户协同开发中,可以屏蔽对象的名字及其持有者。如果没有同义词,当操作其他用户的表时,必须通过user名.object名的形式,采用了Oracle同义词之后就可以隐蔽掉user名,当然这里要注意的是:public同义词只是为数据库对象定义了一个公共的别名,其他用户能否通过这个别名访问这个数据库对象,还要看是否已经为这个用户授权。
2) 为用户简化sql语句。上面的一条其实就是一种简化sql的体现,同时如果自己建的表的名字很长,可以为这个表创建一个Oracle同义词来简化sql开发。
3)为分布式数据库的远程对象提供位置透明性。
5.Oracle同义词在数据库链中的作用
数据库链是一个命名的对象,说明一个数据库到另一个数据库的路径,通过其可以实现不同数据库之间的通信。
Create database link 数据库链名 connect to user名 identified by 口令 using ‘Oracle连接串'; 访问对象要通过 object名@数据库链名。同义词在数据库链中的作用就是提供位置透明性。 


Oracle学习笔记(四)

一、控制用户存取
1、创建修改用户Creating Users
Create/alter user new_user identified by password;
例:create user user_1 indentified by pwd_1
alter user user_1 identified by pwd_2
2、给用户授予权限
grant privilege[,privilege] to user [,user|role,public...]
一些系统权限:
create session/table/sequence/view/procedure

alter/delete/execute/index/insert/references/select/update
grant object_priv [(columns)]
on object
to {user|role|public}
[with grant option]
例如:
给用户user_1授予查询tt1表的权限
grant select on tt1表 to user_1
给用户user_1授予修改“表1”中(列1,列2)的权限
grant update(列1,列2) on 表1 to user_1;
给用户user_1 授予查询权限并可以把该权限授予其他用户的权限
grant select
on tt1表
to user_1
with grant option
把权限授予所有用户
grant select
on 表1
to public;

给用户user_1授权
grant create session to user_1;

二、创建角色并给角色授权
1、创建角色
create role mangager;
例如:create role test_role1;
2、给角色授权
grant create table,create view to manager;
例如:grant create table to test_role1;

3、把角色授予用户
grant manager to user_1,user_2...
grant test_user1 to user_1;

三、取消用户权限
revoke {privilege [,privilege...]|all}
on object
from {user[,user...]|role|public}
[cascade constraints];

revoke select on 表1 from user_1;

四、Database Links
create public database link hq.acme.com using 'sales';
select * from emp@hq.acme.com;

五、 oracle取并集、交集、差集
所取的列的数据类型必须兼容
1、取并集
union :会对数据排序,重复记录压缩,union all不会
select employee_id,job_id from employess
union
select employee_id,job_id from job_history;
取所有并集不去除重复数据
select employee_id,job_id from employess
union all
select employee_id,job_id from job_history;

2、取交集
select employee_id,job_id from employess
intersect
select employee_id,job_id from job_history;

3、差集
表employess去掉共同拥有的数据
select employee_id,job_id from employess
minus
select employee_id,job_id from job_history;

六、日期时间函数
求时差
select tz_offset('US/Eastern') from dual;

alter session set time_zone='-8:0';
select sessiontimezone,current_date from dual;
alter session set time_zone='-8:0';
select sessiontimezone,current_timestamp from dual;

alter session set time_zone='-8:0';
select current_timestamp,localtimestamp from dual;

select dbtimezone,sessiontimezone from dual;
select from_tz(timestamp'2000-03-23 08:00:00','3:00') from dual;

select to_timestamp('2000-02-01 11:00:00','YYYY-MM-DD HH:MI:SS')from dual;

select to_timestamp_tz('2000-02-01 11:00:00','YYYY-MM-DD HH:MI:SS TZH:TZM')from dual;
to_ymininterval() 


Oracle学习笔记(五)

组合集总计:
group by with rollup/cube
grouping sets
子查询按执行方式分:标准子查询、关联子查询
标准子查询:嵌套子查询
标量值查询
case with then
使用exits查询
select user_id,user_name from tb_001 tb
where [not] exists (select 'x'
from tb_001
where manager_id=tb.user_id )
关联更新
update table1 alias1
set column=(select expression
from table2 alias2
where alias1.column=alias2.column);
关联删除
delete from table1 alias11
where column operator
(select expression
from table2 alias2
where alias1.column=alias2.column);
分层结构
分层检索
select [level],column,expr...
from table
[where with condition(s)]
[connect by prior condition(s)]
connect by prior column1=column2
top down:
colum1=parentkey
column2=childkey
bottom up:
column1=childkey
column2=parentkey

插入语句insert statement
insert into table[(column[,column...])]
values(value[,value...])
修改语句update statement
update table
set column=value[,column=value,...]
[where condition];

多表插入语句(Multitable Insert Statements)

insert [all] [conditional_insert_clause]
[insert_into_cause values_clause](subquery)
conditional_insert_clause
[all][first]
[when condition then][insert_into_clause values_clause]
[else][insert_into+clause values_clause]
列:
intsert all
into tb_user values(id,uid,upwd)
into tb_user_info values(id,name,sex,age)
select id,uid,upwd,name,sex,age
from tb_u_10
where id>10000;
待条件的多行插入
insert all
when id>11000 then
into tb_user values(id,uid,upwd)
when age>40 then
into tb_user_info values(id,name,sex,age)
select id,uid,upwd,name,sex,age
from tb_u_10
where id>10000;
insert first
when conditional then
into ...
when conditional then
into ...
else
into...
select...
创建索引
cretate table t_10
(id number(6) not null primary key using index (create index index1 on t_10(id)),
name varchar2(50));
查询索引
select * from user_indexes; 


Oracle学习笔记(六)

一、oracle
oracle服务器有Oracle instace 和Oracle database
instance有memory structure 和 background process 组成。
memory structure包括shared pool、 SGA(System Global Area).

SGA包括:Database buffer cache 和 Redo log buffer cache.
show sga;
show parameter shared;
show parameter db_cache;
show parameter log;
alter system set shared_pool_size=65M;

Process 包括User process、Server process、Background process;
databasey有data file 和 log file 和 control file组成。


database逻辑结构:表空间(tablespaces)、段(segments)、分区(extents)、块(blocks)

ODCA(Oracle Database Configuration Assistant)
:创建数据库
:配置数据库选项
:删除数据库
:管理数据库模板

二、管理数据库实例
1、创建和管理初始参数文件initialization parameter files
系统参数文件system parameter file——spfilesid,spfile
初始参数文件init parameter file——initsid.ora
放置位置在oracle安装目录下database文件下
参数分:显示参数explicit、隐式参数implicit、动态、静态
2、configure omf
v$system_parameter动态性能表
创建spfile
create spfile from pfile
create spfile='d:\spfile.ora' from pfile;

创建表空间
create tablespace test1 datafile='d:\12.dbf' size 3M;

3、开启和关闭数据库
开启数据库Starting Up a Database
shutdown、nomount、mount、open
nomount——startup instance
used to create db,create controlfile
mount——open controlfile
used to change log mode,rename file,db recovery...
startup [nomount|mount|open]
pfile=
restrict
recovery
force

修改数据库指令( alter database command)
1、改变数据库从nomount状态为mount;
alter database db_01 mount;
2、打开一个只读的数据库
alter database db_01 open read only;

关闭数据库Shutting Down the Database
shutdown mode:normal、transactional、immediate、abort
4、监视和使用diagnostic files
alter log file——alertsid.log
background tace file、use trace files

三、创建一个Oracle数据库
1、使用ODCA(oracle database configuration assistant)创建数据库 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值