Oracle_基础

第一节 基础语法

1.1.字段类型

在oracle数据库中经常使用的数据类型有以下四种:

  1. VARCHAR2(size):变长字符型数据。size为该列最多可容纳的字符个数,必须定义,其默认值和最小值均为1,最大值为4000。
  2. CHAR(size):定长字符型数据。其中,size为该列最多可容纳的字符个数,其默认值和最小值均为1,最大值为2000。
  3. DATE:日期型数据。其中,日期和时间取值范围是从公元前4712年1月1日到9999年12月31日。
  4. 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 查询次序

5select [5-3TOP|5-2DISTINCT]5-1[选择列表]|[*]1from 数据源
(2[where 查询条件]3[group by 分组条件]4[having 过滤条件]6[order by asc|desc nulls first|last];

1.学习Oracle这一篇就够了

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引入了两个伪列,不是表中真实存在的列,但是可以像真实的列那样去使用。分别是NEXTVALCURRVAL:

  • NEXTVAL用于返回序列号的下一个可获得的值。
  • CURRVAL用于获得序列号的当前值。
--在向表中插入数据时调用nextval方法生成主键
insert into 表名 values (序列名.nextval,值1,值2...;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值