oracle中的集合操作符

oracle中有一类操作符是对集合进行操作的,我们称之为集合操作符(set operator),我们在前面已经分别介绍了每个集合操作符,这里简单总结一下,oracle中的集合操作符号主要有:

  1. union(all) 是用来将多个select语句的结果集合进行合并处理。其中union会压缩各个结果集中的重复数据,而union all则不会。
  2. intersect 是用来求两个集合的交集
  3. minus是用来从一个结果集中去除另一个集合中包含的部分

对与各个集合操作符, 需要注意的地方的如下:

  1. 除了union all之外的所有集合操作符号都会进行默认排序和去除重复行,这需要占用一定的资源,只有union all回将数据以原始的方式呈现出来。所以在对oracle中进行性能优化时尽量使用union all 而不是 union。
  2. 对于每一个查询中,必须要具有相同的列的数目和列的类型,但没有必要使列名相同。如果类型不一样,可以使用类型转换函数来转换。注意这里oracle不会进行隐式转换,必须进行手动转换,如果列的个数不一样,可以使用替代列的方式来充当。

    例如:
    select ename,sal from emp where sal > 2000
    union all
    select to_char(empno),0 from emp where sal >3500;
    这里我们使用了类型转换函数来to_char将empno转由数值型换为字符型,并给出了一个填充列0,来凑足和前一个查询的相同的列数。
  3. 可以使用order by 来进行手动的排序,但只能出现在最后一个查询的后面。而且order by 使用到的列只能使用第一个查询的列名或者别名,或者使用列的计数器。
时间: 2024-09-22 18:36:31

oracle中的集合操作符的相关文章

oracle 中的集合(联合数组 内嵌表 可变数组)

1.定义一个集合,让它作为一个函数或过程的形式参数,这样就可以传递这个集合类型的参数.    看下面的例子:定义一个过程参数--内嵌表                                          create or replace package personnel   --定义一个包  as      type staff_list is table of emp.empno%type;  -- 定义了一个emp.empno 的内嵌表,表的类型为emp_empno.  

Sql与oracle中null值

  1 null值的介绍 NULL 是数据库中特有的数据类型,当一条记录的某个列为 NULL ,则表示这个列的值是未知的.是不确定的.既然是未知的,就有无数种的可能性.因此, NULL 并不是一个确定的值. 这是 NULL 的由来.也是 NULL 的基础,所有和 NULL 相关的操作的结果都可以从 NULL 的概念推导出来. 2 oracle中的null值介绍 在不知道具体有什么数据的时候,即未知,可以用NULL, 称它为空,ORACLE中,含有空值的表列长度为零.允许任何一种数据类型的字段为空

oracle中的视图详解_oracle

1.视图的概述 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据.视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表.视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器.(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束) 2.视图的存储 与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据.视图只是定义了一个查询,视图中的数据是从基表中获取

Oracle中like效率正则表达式浅析

Oracle 中like常用但是其效率不是高.   特别是使用%a%----->全局扫描,没有利用到任何索引.   情况可以的条件尽量下使用a%------>可以利用正序的索引.                           %a------>可以利用反序的索引(当然得已有反序的索引). 使用instr函数取代like查询,可提高效率,在海量数据中效果尤其明显. 1.%a%方式: select * from pub_yh_bm t where instr(t.chr_bmdm,'2

Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结

Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合. REGEXP_SUBSTR函数格式如下:function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)__srcstr :需要进行正则处理的字符串__pattern :进行匹配的正则表达式,匹配的值将返回,返回策略由__occurrence决定__po

Oracle中对两个数据表交集的查询

oracle|数据 Oracle关系型数据库管理系统是世界上流行的关系数据库,它是一个极其强大.灵活和复杂的系统,据说,在使用oracle时应有这样的思想,那就是在SQL中几乎可以实现任何一种想法. 下面向大家介绍使用SQL查两个Oracle数据表查询的相同数据的方法,笔者感到这两种方法执行效率高.使用方便. 第一种方法:利用操作符intersect intersect操作符用来合并两个查询,返回两个查询中都存在的记录,即返回两个查询结果的交集,前提是两个查询的列的数量和数据类型必须完全相同.

Oracle中如何管理索引组织表

索引组织表(IOT)有一种类B树的存储组织方法.普通的堆组织表是以一种无序的集合存储.而IOT中的数据是按主键有序的存储在B树索引结构中.与一般B树索引不同的的是,在IOT中每个叶结点即有每行的主键列值,又有那些非主键列值. 在IOT所对应的B树结构中,每个索引项包括<主键列值,非主键列值>而不是ROWID,对于普通堆组织表,oracle会有对应的索引与之对应,且分开存储.换句话说,IOT即是索引,又是实际的数据. 索引组织表(IOT)不仅可以存储数据,还可以存储为表建立的索引.索引组织表的数

浅析Oracle中的不等于号

前几天碰到一个关于Oracle不等于的问题,最后搜索了一下,发现下面资料,拿来跟大家分享一下,需要的朋友可以参考下   关于Oracle中的不等于号: 在Oracle中, <> != ~= ^= 都是不等于号的意思.都可以使用. 但是奇怪是的, 我想拿出price不是180000的商品时:(price是Number类型的) SELECT id, name  FROM product where price<> 180000; 执行这个语句时,priceis null  的记录不出来

c++-请问下面这段代码的意思:C++ 中的冒号操作符

问题描述 请问下面这段代码的意思:C++ 中的冒号操作符 PaketRouter类里有一个成员: // Map from ssrc to sending rtp module. std::list rtp_modules_ GUARDED_BY(crit_.get());请问下面的函数里冒号是什么意思? bool PacketRouter::TimeToSendPacket(uint32_t ssrc uint16_t sequence_number int64_t capture_timest