oracle学习笔记

来源:互联网 发布:智能交通 数据挖掘 编辑:程序博客网 时间:2024/04/29 11:38

oracle安装

    在win7及其以上安装oracle的时候,有时候需要用兼容性来安装(右键-->属性-->兼容性:选择windows XP(Service Pack 2))。

    平常所说的 Oracle 或 Oracle 数据库指的是 Oracle数据库管理系统。Oracle 数据库管理系统是管理数据库访问的计算机软件(Oracle database manager system)。它由 Oracle 数据库和 Oracle 实例(instance)构成。

    Oracle 数据库: 一个相关的操作系统文件(即存储在计算机硬盘上的文件)集合,这些文件组织在一起,,成为一个逻辑整体, 即为 Oracle 数据库。

   Oracle 用它来存储和管理相关的信息。Oracle数据库必须要与内存里实例合作,才能对外提供数据管理服务。

    Oracle 实例: 位于物理内存里的数据结构,它由操作系统的多个后台进程和一个共享的内存池所组成,共享的内存池可以被所有进程访问。

   Oracle 用它们来管理数据库访问.用户如果要存取数据库(也就是硬盘上的文件) 里的数据,必须通过Oracle实例才能实现,,不能直接读取硬盘上的文件。

实际上,Oracle 实例就是平常所说的数据库服务(service) 。

    区别:实例可以操作数据库;在任何时刻一个实例只能与一个数据库关联,访问一个数据库;而同一个数据库可由多个实例访问(RAC)

    对于oracle安装创建的5项服务,我们一般只需要用上其中的两项就可以(OracleOraDb10g_home1TNSListener和OracleServiceORCL),其他的服务一般禁用就可以了,这两项推荐设置成手动启动,因为自动随着电脑的启动而启动会耗费大量的系统资源。

显示一个表的结构:

desc table

oracle中SQL语句的注释:

--select * from table;

日期格式的处理:

如果查询的格式是日期格式的:

两种处理方法:

第一种: where date = '24-4月-1998',必须这样写。

第二种:where to_char(date,'yyyy-mm-dd') = '1998-04-24'

这两种写法也都可以参与有大于号和小于号的区间查找。

模糊查询:

where lastName like '_R%':查询第二个字母是“R”的。

使用escape说明是转义字符

where lastName like '%\_%' escape '\':查找中间有“_”的。

单行函数:

LOWER()

UPPER()

INITCAP() 首字母大写转换函数,将所有单词的首字母大写。

字符控制函数:

CONCAT('Hellow','World') 结果:HellowWorld:合并两个字符串,合并的个数最多为两个,如果要合并多个就多次使用这个函数。

SUBSTR('HellowWorld ',1,5) 结果:Hellow :从一个字符串的第一个字符开始,取上五个,注意,SQL的下标是用1开始,而不是从0开始。

LENGTH('HellowWorld') 结果:返回字符串的字符个数。

INSTR('HellowWorld',W) 结果:返回W首次出现的位置。

LPAD(salary,10,*) 结果:*****24000。

RPAD(salary,10,*) 结果:24000*****。

TRIM('H' FROM 'HellowWorld') 结果:ellowWorld:去除字符串两边的“H”。

REPLACE('abcd','b','m') 结果:amcd :将字符串中所有的b替换成m。

数字函数:

ROUND() 四舍五入函数

ROUND(45.926,2) --> 45.93

TRUNC() 截断函数

TRUNC(45.926,2) --> 45.92

MOD() 求余函数

MOD(1600,300) --> 100

日期的数学运算:

在日期上加上或是减去一个数字结果仍为日期

两个日期相减返回日期之间相差的天数,但是注意相加没有意义。

日期函数:

MONTHS_BETWEEN:两个日期之间相差的月数。

ADD_MONTHS:向指定日期中加上若干月数。

NEXT_DAY:指定日期的下一个星期*对应的日期。

LAST_DAY:本月的最后一天。

ROUND:日期四舍五入。

TRUNC:日期截断。

显示数据类型转换:

TO_CHAR():

TO_NUMBER():

TO_DATE():

select to_char(1234567.89,'999,999,999.99')from dual;

通用函数:

NVL(expr1,expr2):当expr1为空的时候显示expr2,当expr1不为空的时候显示expr1。

NVL2(expr1,expr2,expr3):当expr1不为空的时候显示expr2,当expr1为空的时候显示expr3。

NULLIF(expr1,expr2):相等的时候返回NULL,不相等返回expr1。

COALESCE(expr1,expr2,...,exprn):如果第一个表达式为空,则返回第二个表达式,如果第二个表达式为空,则返回第三个表达式,一次类推。

 

事务控制:


条件表达式:

CASE表达式,DECODE表达式

【实例】

查询部门号为10,20,30的员工信息,若部门号为10,则打印其工资的1.1倍,

若部门号为20,则打印其工资的1.2倍,若部门号为30,则打印其工资的1.3倍,

selectemployee_id,last_name,department_id,case department_id when 10 then salary *1.1

                                                                       when 20 then salary * 1.2

                                                                       else salary * 1.3 end new_sal

from emploryees

where employee_id in (10,20,30)

 

selectemployee_id,last_name,department_id,decode(department_id,10,salary * 1.1

                                                                        20,salary* 1.2

                                                                           salary)new_sal

from emploryees

where employee_id in (10,20,30)

重点练习:

1、打印出“2009年10月1日 9:25:40”格式的当前系统日期和时间。

select to_char(sysdate,'YYYY"年"MM"月"DD"日"HH:mi:SS')

from dual

注意:使用双引号向日期中添加字符

2、格式化数字:1234567.89为1,234,567.89

select to_char(1234567.89,'999,999,999.99')

from dual

3、字符串转换为数字时

  (1)若字符串中没有特殊字符,可以进行隐式转换:

    select '1234567.89'+100

    from dual

  (2)若字符串中有特殊字符,例如'1,234,567.89',则无法进行隐式转换,需要使用to_number()来完成

    select to_number('1,234,567.89','999,999,999.99')+100

    from dual

4、对于日期作为查询条件的条件查询,一般使用to_date()把一个字符串转为日期,这样可以不必关注日期的格式

   select last_name,hrie_date

   from employees

   where hrie_date = to_date('1998-5-23','yyyy-mm-dd')

或  wherero_char(hire_date,'yyyy-mm-dd') = '1998-5-23'

5、查询每个月倒数第二天入职的员工信息。

   select last_name,hire_date

   from employees

   where hire_date = last_day(hire_date) - 1

6、计算公司员工的年薪

   --错误写法:因为空值计算的结果仍然是空值

   select last_name,salary*12*(1+commission_pct) year_sal

   from employees

   --正确写法

   select last_name,salary*12*(1+nvl(commission_pct,0)) year_sal

   from employees

7、显示所有员工的姓名,部门号和部门名称。(左右查询)

   select last_name,e.department_id,department_name

   from employees e,departments d

   where e.department_id = d.department_id(+)

 

truncate table:清空表,这个是不可回滚的清空。对于增(insert)删(delete)改(update)对表的操作是可以回滚的。

在SQL语句中使用&变量指定列值。

&变量放在values字句中。

insert into departments

           (department_id,department_name,location_id)

values     (&department_id,&department_name,&location_id)

约束关键词:

NOT NULL

UNIQUE

PRIMARY KEY

FOREIGN KEY

CHECK

【实例】

create table t_test(

--列级约束

id number(10),

name varchar2(20) constraint test_name_nnnot null,

email varchar2(20),

salary number(10,2) check(salary > 1500and salary < 30000)

department_id number(10),

--表级约束

constraint test_email_uk unique(email),

constraint test_id_uk primary key(id)

)

视图:

创建视图:

视图的数据和基表中的数据是同步的,这也是视图存在的目的。

创建视图:

select view viewTest

as

select...

在创建语句后面加上 with read only表示创建的视图是不可更改的。

简单视图是允许修改的,但是复杂视图是不可修改的。

Top-N分析:

Top-N分析查询一个列中最大或最小的n个值,最大和最小的值得集合是Top-N分析所关心的。

ROWNUM是整个伪列,对ROWNUM只能使用<或<=,而用=,>,>=都将不能返回任何数据。

ROWNUM的数值是根据

select * from table

出来的,后面加上where语句后它的数值就变化了。

具体的分页查询参照cadn日志。

序列:

可供多个用户用来产生唯一数值的数据库对象。

自动提供唯一的数值。

共享对象

主要用于提供主键值。

将序列值装入内存可以提高访问效率。

语句:

create sequence seq

[increment by n] -- 每次增长的数值

[start with n] -- 从哪个值开始

[{maxvalue n | nomaxvalue}]

[{minvalue n | nominvalue}]

[{cycle n | nocycle}] -- 是否需要循环

[{cache n | nocache}] -- 是否缓存登录

序列在使用的时候就像使用对象一样:

seq.nextcal 和 seq.currval

【实例】

insert into emp01

values(emseq.nextval,'cc',3500)

 

alert sequence seq

increment by 1

nocycle

注意:

将序列装入内存中可以提高访问效率

序列在下列情况下出现裂缝:

回滚

系统异常

多个表同时使用同一序列

 

索引

一种独立于表的模式对象,可以存储在与表不同的磁盘或表空间中。

索引被删除或是损坏,不会对表产生影响,其影响的只是查询的速度。

索引一旦建立,oracle管理系统会对其进行自动维护,而且由oralce管理系统决定何时使用索引。用户不用再查询语句中指定使用哪个索引。

再删除一个表时,所有基于该表的索引会自动删除。

通过指针加速oracle服务器的查询速度。

通过快速定位数据的方法,减少磁盘I/O。

 

创建索引:

自动创建:在定义primary key或unique约束后系统自动在相应的列上创建唯一性索引。

手动创建:用户可以在其他列上创建非唯一性的索引,以加快查询。

 

create index inx

on table(colum[,colum]...)

什么时候创建索引

列中数据值分布范围很广

列经常where子句或链接条件中出现

表经常被访问而且数据量很大,访问的数据大概占数据总量的2%到4%。

 

同义词-synonym(了解)

使用同义词访问相同的对象:

方便访问其他用户的对象

缩短对象名字的长度

create [public] synonym syn

for object;

 

SET操作符:

将多个查询结果用set操作符链接组成一个新的查询。

union/union all

intersect

minus

 

在select列表中的列名和表达式在数量和数据类型上要相对应。

【实例】

select employ_idemp_id,department_id,to_char(null)

from employees01

union

select to_number(null),department_id,department_name

from departments


0 0
原创粉丝点击