一、集合

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

  • 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笔记(十二) 集合、序列的更多相关文章

  1. Oracle笔记 十二、PL/SQL 面向对象oop编程

    ------------------------抽象数据类型----------- --创建地址类型,一定要加as object,还可以在类型中加过程或方法 create or replace typ ...

  2. Java学习笔记十二--集合(三)

    第一节课 返回值 方法名 作用 void add(index,elemnet) 在指定的索引处添加元素 object get(index) 返回指定索引处的元素 int indexOf(object) ...

  3. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  4. DirectX11笔记(十二)--Direct3D渲染8--EFFECTS

    原文:DirectX11笔记(十二)--Direct3D渲染8--EFFECTS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737 ...

  5. 《C++游戏开发》笔记十二 战争迷雾:初步实现

    本系列文章由七十一雾央编写,转载请注明出处.  http://blog.csdn.net/u011371356/article/details/9475979 作者:七十一雾央 新浪微博:http:/ ...

  6. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  7. java jvm学习笔记十二(访问控制器的栈校验机制)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ...

  8. 《深入理解Java虚拟机》读书笔记十二

    第十二章  Java内存模型与线程 1.硬件效率与一致性 由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cac ...

  9. (C/C++学习笔记) 十二. 指针

    十二. 指针 ● 基本概念 位系统下为4字节(8位十六进制数),在64位系统下为8字节(16位十六进制数) 进制表示的, 内存地址不占用内存空间 指针本身是一种数据类型, 它可以指向int, char ...

  10. Oracle学习笔记(十二)

    十三.存储过程和存储函数1.掌握存储过程(相当于建立一个函数或者方法体,然后通过外部对其调用) 指存储在数据库中供所有程序调用的子程序叫做存储过程或存储函数. 相同点: 完成特定功能的程序 区别: 是 ...

随机推荐

  1. 使用 mencoder 制作幻灯片

    首先安装相关依赖: sudo apt-get install mencoder sudo apt-get install imagemagick 编辑 test.sh 脚本如下: #!/bin/bas ...

  2. HOSTS大法解决Github Clone太慢

    经常要clone github中的一些项目,无奈如果不爬梯子的话速度实在是龟速,经常1k/s,于是搜了下解决方法,改HOSTS大法. Windows下在C:/Windows/system32/driv ...

  3. 【AMAD】django-taggit -- 一个简单的,通用的django tagging模块

    简介 个人评分 简介 django-taggit1是一个通用的,易用的标签系统. from django.db import models from taggit.managers import Ta ...

  4. 【转载】Bios报警声

    BB是报警的声音你可以根据报警声音长短,数目来判断问题出在什么地方 AWARD BIOS响铃声的一般含义是: 1短: 系统正常启动.这是我们每天都能听到的,也表明机器没有任何问题. 2短: 常规错误, ...

  5. 51nod1050 循环数组最大子段和

    思路: 分两种情况讨论. 实现: #include <bits/stdc++.h> using namespace std; typedef long long ll; ; ll sum[ ...

  6. Comparable 接口学习:对对象List进行比较和排序(正序和逆序)

    Comparable 接口只有一个 int compareTo(T o) 方法 1.int compareTo(T o) 方法 方法说明: 比较此对象和规定的对象,如果此对象大于,等于,小于规定对象, ...

  7. 关于element中的父子组件的传值问题

    首先讲一下父子组件的传值问题. 这是大家很熟悉的一张图,讲述了父子组件传值的过程.父组件通过prop传值给子组件,子组件通过$emit给父组件发送消息来使父组件的prop发生变化.这都是老生常谈了.下 ...

  8. 《MIT 6.828 Lab 1 Exercise 3》实验报告

    本实验的网站链接:mit 6.828 lab1 Exercise 3. 题目 Exercise 3. Take a look at the lab tools guide, especially th ...

  9. 【转帖】PostgreSQL之 使用扩展Extension

    PostgreSQL之 使用扩展Extension https://www.cnblogs.com/lnlvinso/p/11042677.html 挺好的文章.自己之前没有系统学习过 扩展.. 目前 ...

  10. python学习-9 pycharm的安装

    1.python 开发IDE :  pycharm.eclipse等等 安装: 百度搜索pycharm 就可以了,去官网下载专业版.(百度有各种破解方法)                    #不要 ...