`
changhongbao
  • 浏览: 116828 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Oracle笔记(十二) 集合、序列

 
阅读更多

Oracle笔记(十二) 集合、序列

一、集合

在数学的操作之中存在交、差、并、补的概念,而在数据的查询中也存在此概念,有如下几个连接符号:

  • UNION:连接两个查询,相同的部分不显示;
  • UNION ALL:连接两个查询,相同的部分显示;
  • INTERSECT:返回两个查询中的相同部分;
  • MINUS:返回两个查询中的不同部分;

为了验证以上的操作,下面创建一张只包含20部门雇员信息的表:

CREATE TABLE emp20 AS SELECT * FROM emp WHERE deptno=20;

范例:验证UNION

SELECT * FROM emp
  UNION
SELECT * FROM emp20;

范例:验证UNION ALL

SELECT * FROM emp
  UNION ALL
SELECT * FROM emp20;

范例:验证INTERSECT

SELECT * FROM emp
  INTERSECT
SELECT * FROM emp20;

范例:验证MINUS

SELECT * FROM emp
  MINUS
SELECT * FROM emp20;

在之前讲解分组的时候曾经留过一道未完成的题目:所有领取奖金的人求出平均工资,所有不领取奖金的人求出平均工资,当时的实现代码如下:

SELECT comm,AVG(sal)
FROM emp
GROUP BY comm;

这种问题下只能依靠查询的连接操作,准备两个查询:

  • 第一个查询负责查询出所有领取奖金的雇员平均工资;
  • 第二个查询负责查询出所有不领取奖金的雇员平均工资;
SELECT 'UNCOMM',AVG(sal) FROM emp WHERE comm IS NULL
  UNION
SELECT 'COMM',AVG(sal) FROM emp WHERE comm IS NOT NULL;

对于这种连接查询,只需要清楚其概念即可。

二、序列

在许多的数据表之中都存在一种称为自动增长列的操作,但是在Oracle之中,这种自动增长列并不是自动控制的,而是需要用户手工的控制,这样做主要是为了开发方便,创建序列的语法如下:

复制代码
CREATE SEQUENCE sequence

[INCREMENT BY n] [START WITH n]

[{MAXVALUE n|NOMAXVALUE}]

[{MINVALUE n|NOMINVALUE}]

[{CYCLE|NOCYCLE}]

[{CACHE n|NOCACHE}];
复制代码

范例:创建序列

CREATE SEQUENCE myseq;

当一个序列创建完成之后 ,可以通过以下两种方式访问序列:

  • 序列名称.nextval:让序列增长到下一个内容;
  • 序列名称.currval:取得当前序列的内容;

范例:验证序列的操作

SELECT myseq.currval FROM dual;

可是直接执行上面的程序会发出如下的错误提示:“ORA-08002: 序列 MYSEQ.CURRVAL 尚未在此会话中定义”

在Oracle之中如果要想操作currval,则首先必须使用nextval;

SELECT myseq.nextval FROM dual;
SELECT myseq.currval FROM dual;

序列一般都作为主键使用,例如,下面定义一张表:

DROP TABLE mytab PURGE;
CREATE TABLE mytab (
    id NUMBER PRIMARY KEY,
    name VARCHAR2(20) NOT NULL
);

现在向mytab表中增加数据:

INSERT INTO mytab(id,name) VALUES(myseq.nextval,'姓名');

一定要记住,这个过程都是由用户自己手工进行的,不能自动完成。

在默认情况下,序列从0开始,每次增长1,那么现在也可以修改;

范例:创建序列,从10开始,每次增长2

DROP SEQUENCE myseq;
CREATE SEQUENCE myseq INCREMENT BY 2 START WITH 10;

范例:希望定义一个序列,这个序列可以在1、3、5、7、9之间循环出现;

DROP SEQUENCE myseq;
CREATE SEQUENCE myseq INCREMENT BY 2 START WITH 1 MAXVALUE 10 MINVALUE 1 CYCLE NOCACHE;

关于序列中的CACHE解释:

      在Oracle数据库之中,由于序列被经常使用到,所以Oracle为了揽性能,将序列的操作形式做了如下的处理。

      准备了一块空间,这个空间之中,为用户准备好了若干个已经生成好的序列,每次操作的时候都是从这块空间之中取出序列的内容,但是这样有一个问题,如果现在数据库的实例关闭了,那么保存在这块空间中的内容就有可能消失了,但是虽然消失了,可是数据库已经增长好了,这样就会出现跳号的事情,而如果要想取消掉这种问题,则最好的方式是将序列设置为不缓存,使用NOCACHE声明。

分享到:
评论

相关推荐

    Oracle笔记Oracle笔记

    Oracle笔记Oracle笔记Oracle笔记Oracle笔记Oracle笔记Oracle笔记

    Oracle笔记

    这个是我学习网上的视频做的oracle笔记,对于oracle一窍不通的菜鸟可能有用吧,大家有需要可以看看

    韩顺平oracle笔记(免费)

    韩顺平oracle笔记(免费)韩顺平oracle笔记(免费)

    Oracle学习笔记(序列和同义词)

    Oracle学习笔记(序列和同义词),有具体的序列和同义词的代码案例

    Oracle 入门文档2

    Oracle笔记 五、创建表、约束、视图、索引、序列、同义词、表空间 Oracle笔记 六、PL/SQL简单语句块、变量定义 Oracle笔记 七、PL/SQL 异常处理 Oracle笔记 八、PL/SQL跳转/判断/循环语句块 Oracle笔记 九、PL/...

    Oracle学习笔记

    Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记Oracle学习笔记

    Oracle 入门文档

    Oracle笔记 五、创建表、约束、视图、索引、序列、同义词、表空间 Oracle笔记 六、PL/SQL简单语句块、变量定义 Oracle笔记 七、PL/SQL 异常处理 Oracle笔记 八、PL/SQL跳转/判断/循环语句块 Oracle笔记 九、PL/...

    史上最全的oracle笔记

    初学Oracle 最最需要的东东 史上最全的oracle笔记

    达内,tarena,oracle笔记,oraclePPT课件,达内oracle笔记

    达内,tarena,oracle笔记,oraclePPT课件,达内oracle笔记 包含达内数据库脚本

    Oracle学习笔记 PDF

    本文档主要是网易云李兴华老师进行授课时所作笔记,从Oracle11g数据库的安装到复杂查询做了详细的文档记录。

    oracle经典笔记

    oracle经典笔记oracle经典笔记oracle经典笔记oracle经典笔记oracle经典笔记oracle经典笔记

    马士兵oracle笔记

    马士兵oracle笔记,浅显易懂。

    oracle 不用新建序列 重置序列(从1开始增长)

    oracle 中不用新建序列是实现重置序列(从1开始增长)

    oracle笔记其它数据库对象(序列索引同义词)

    oracle笔记其它数据库对象(序列、索引、同义词),有创建序列,创建索引,创建同义词的具体代码案例

    oracle笔记.docx

    oracle学习笔记,包括oracle常用的语法和个人总结。

    oracle adg安装个人笔记

    oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记oracle adg安装个人笔记...

    oracle 创建id主键序列 脚本

    oracle 创建id主键序列的 脚本 及 使用方式 oracle 创建id主键序列的 脚本 及 使用方式

    李兴华Oracle全部笔记

    这是李兴华对Oracle讲解后的全部笔记,都整理好了,pdf文件,有兴趣学习的可以下载看看

    oracle笔记创建和管理表

    oracle笔记创建和管理表,增加列,删除列,修改列,修改列名和数据类型和长度,修改表名等等操作,有代码案例!

Global site tag (gtag.js) - Google Analytics