文章目录
第一节 基础语法
1.1.字段类型
在oracle数据库中经常使用的数据类型有以下四种:
- VARCHAR2(size):变长字符型数据。size为该列最多可容纳的
字符
个数,必须定义,其默认值和最小值均为1,最大值为4000。 - CHAR(size):定长字符型数据。其中,size为该列最多可容纳的
字符
个数,其默认值和最小值均为1,最大值为2000。 - DATE:日期型数据。其中,日期和时间取值范围是从公元前4712年1月1日到9999年12月31日。
- NUMBER(p,s):数字型数据。其中,p为十进制数的总长度(位数),s为十进制数小数点后的位数。p的最小值为1,最大值为38;s的最小值为-84,最大值为124。
1.2.查询语法&查询次序
1.2.1 查询语法
select [TOP|DISTINCT] [选择列表]|[*]
from 数据源
[where 查询条件]
[group by 分组条件]
[having 过滤条件]
[order by 排序条件 asc|desc nulls first|last];
1.2.2 查询次序
(5)select [(5-3)TOP|(5-2)DISTINCT] (5-1)[选择列表]|[*]
(1)from 数据源
(2)[where 查询条件]
(3)[group by 分组条件]
(4)[having 过滤条件]
(6)[order by asc|desc nulls first|last];
1.3 分页查询
1.3.1 ROWNUM
Oracle引入的ROWNUM,是对标准SQL的一种扩展,其目的是为一些特定的数据库操作提供便利。实际上,Oracle在查询结果的每一行上都隐含的加上了ROWNUM列,只不过这一列需要使用特殊的方法来显示而已。
ORACLE中提供了一个伪列:ROWNUM
。ROWNUM字段不存在于任何一张表中,但是每张表都可以查询该字段。该字段的值是结果集中每条记录的行号
。ROWNUM字段的值是伴随查询过程动态
生成的。只要可以查询出一条记录,ROWNUM就会为该条记录生成行号,从1开始每次递增1。
1.3.2 分页查询
- 错误用法
select rownum,empno,ename,sal,job from emp
where rownum between 6 and 10;
由于ROWNUM
是在查询表的过程中进行编号的,在上面的例子中,ROWNUM并不会记录编号,所以上述语句的结果不会查询出任何结果。
select * from
(select rownum,empno,ename,sal,job from emp)
where rownum between 6 and 10;
上述语句也是无结果,WHERE子句中的ROWNUM被视为主查询的ROWNUM,并不是子查询中的ROWNUM,应该给子查询的ROWNUM添加别名:
- 正确用法
select * from
(select rownum rn,empno,ename,sal,job from emp)
where rn between 6 and 10;
1.4 序列
序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。不占用磁盘空间,占用内存
。其主要用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。。
1.4.1 参数介绍
create sequence 序列名称
start with n
increment by n
[maxvalue n] | nomaxvalue
[minvalue n] | nominvalue
[cache n] | nocache
[cyclen] | nocycle ;
start with
定义了所产生的第一个序列号,这里n为整数,如果该子句省略,序列号从1开始。increment by
表示步长,默认为1,负值表示递减。maxvalue
序列产生最大值,默认为NOMAXVALUE。nomaxvalue
升序的序列号的最大值为10的27次方,而降序的序列号的最大值为-1(默认值)。minvalue
序列产生最小值,默认为NOMAXVALUE。nominvalue
序列号的最小值为1,而降序的序列号的最小值为-10的26次方(默认值)。cycle
表循环,NOCYCLE表示不循环;使用循环,当增至最大值时,循环到最小值;对于递减序列,当减至最小值时,循环至最大;若不循环,当到达极限值后,报错。cache
表示使用内存缓存,内存块大小默认为20;NOCACHE表示不使用内存缓冲。对序列进行内存缓冲,可以改善序列的性能。注意:大量语句发生请求,申请序列时,为了避免序列在运用层实现序列而引起的性能瓶颈。Oracle序列允许将序列提前生成 cache x个先存入内存,在发生大量申请序列语句时,可直接到运行最快的内存中去得到序列。但cache个数也不能设置太大,因为在数据库重启时,会清空内存信息,预存在内存中的序列会丢失,当数据库再次启动后,序列从上次内存中最大的序列号+1 开始存入cache x个。会导致序列号不连续。
1.4.2 使用序列号
Oracle引入了两个伪列,不是表中真实存在的列,但是可以像真实的列那样去使用。分别是NEXTVAL
和CURRVAL
:
NEXTVAL
用于返回序列号的下一个可获得的值。CURRVAL
用于获得序列号的当前值。
--在向表中插入数据时调用nextval方法生成主键
insert into 表名 values (序列名.nextval,值1,值2,...);