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培训18天老师笔记"这样的资料将覆盖这些主题,帮助你逐步掌握Oracle的精髓。在实践中不断巩固和提升,才能真正成为Oracle数据库的熟练使用者。
Oracle数据库学习笔记,包括课程PPT(数据库基础,简单查询,单行多行函数,多表连接,子查询,高级子查询,集合运算,层次查询,DML与事务控制,数据库的网络连接,创建维护表,约束,视图,序列索引和同义词,用户...
- **序列**:自动生成连续整数值的对象,常用于自增主键。 - **视图**:基于一个或多个表(或视图)的虚拟表,可以简化复杂查询。 - **同义词**:为表、视图或其他对象创建的别名,提高代码的可读性和可维护性。 - *...
- **事务**:一组操作的集合,确保数据的一致性和完整性,支持ACID属性。 - **伪列**:ROWID和ROWNUM,用于标识行的位置和编号,但并不实际存储在表中。 ### 序列、视图与索引 - **序列(SEQUENCE)**:自动产生...
- **RESOURCE** 角色:提供额外权限,如创建表、序列等。 - **DBA** 角色:拥有所有系统权限,包括授予其他用户权限的能力。 #### 六、Oracle 权限管理 - **授权**:使用 `GRANT` 命令授予用户权限。例如: ```...
本篇笔记主要涵盖了Oracle的基础知识,包括实例、表空间、用户以及表之间的关系,还会涉及到SQLPlus常用语句、数据类型、权限管理、约束、注释、序列,以及数据操纵语言(DML)、数据查询语言(DQL)、数据定义语言...
### Oracle 最全学习笔记知识点梳理 #### 一、存储过程 - **定义**:存储过程是一种在数据库中存储复杂程序以便外部程序调用的一种数据库对象。 - **应用场景**:主要用于执行大量的更新或插入操作,以提高数据库...
在学习Oracle 11g的过程中,了解和掌握集合操作以及序列的使用是非常关键的知识点。 集合操作在数据库查询中扮演着重要的角色。Oracle 11g支持四种基本的集合操作:UNION、UNION ALL、INTERSECT和MINUS。这些操作...
根据提供的文件信息,我们可以归纳出一系列重要的Oracle SQL知识点,这些知识点涵盖了从基本的SQL概念到高级的数据库管理技术。下面是对这些知识点的详细说明: ### 1. SQL介绍 #### 结构化查询语言 (Structured ...
根据提供的Oracle复习笔记内容,我们可以总结出以下详细的Oracle知识点: ### 1. 使用 DISTINCT 进行去重查询 - **语法**: `SELECT DISTINCT column_name FROM table_name;` - **示例**: `SELECT DISTINCT xx FROM...
这一章节讲解了Oracle SQL中日期和时间的格式化、转换和操作方法,使数据分析师能够有效地处理时间序列数据。 ### 第7章:集合运算 集合运算是指对多个查询结果集进行并集、交集和差集操作。这部分内容对于理解...
oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...
### Oracle学习笔记知识点详解 #### 第一章:Oracle入门 **1. Oracle的物理结构** - **Oracle的主要组件** - **Oracle服务器**:由Oracle数据库和Oracle实例组成。 - **Oracle实例**:指后台进程和内存结构的...
以思维导图的形式(xmind),呈现oracle数据库知识点.包括(集合操作,处理语句,约束,链接,运算符。函数,表达式,聚合函数,子查询,分组查询,分页查询,视图,序列等)以及数据库的整体框架,以便你更好的学习...
- **序列(Sequence)**:自动生成一系列唯一数值,常用于主键的自动递增。 - **索引(Index)**:加速数据检索的数据库结构。 - **同义词(Synonym)**:为数据库对象提供别名,简化引用。 - **存储过程(Procedure)**:预...