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

Oracle的union、union all 与函数decode【2010-06-09】

阅读更多
1.Oracle中UNION 与UNION ALL的学习
两者都是对记录集操作,把来自许多SELECT语句的结果组合到一个结果集合中。不过值得注意的一点是,类型的一致性,既要满足,列于每个SELECT语句的对应位置的被选择的列应具有相同的类型。(例如,被第一个语句选择的第一列应和被其它语句选择的第一列具有相同的类型。)
UNION语法结构:
SELECT ...
UNION [ALL]
SELECT ...
[UNION [ALL]
SELECT ...


UNION 与 UNION ALL 的区别:
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。但是,如果表数据量大,就可能导致用磁盘进行排序。
UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。

从效率上说,UNION ALL要比UNION快很多,重要的一点就是不需要排序。在考虑两
者如何使用更适合某一种场景,就要从做UNION的两张表上考虑了,如果不会出现
重复数据,就优先考虑UNION ALL。

2.Oracle中函数DECODE
一个条件判断函数,可以进行多值判断。功能这个真的很黄很暴力。
decode的语法结构如下:
decode (expression, search_1, result_1)
decode (expression, search_1, result_1, search_2, result_2)
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n)
decode (expression, search_1, result_1, default)
decode (expression, search_1, result_1, search_2, result_2, default)
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)


从上面的,可以很直观看出decode函数所需要填充的值,也很容易令人一看就懂decode的使用。
decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。
可以用伪代码描述一下:
IF expression = search_1 THEN
RETURN result_1
IF expression = search_2 THEN
RETURN result_2
ELSE
RETURN default


使用方法:
1、比较大小
select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
例如:
变量1=10,变量2=20
则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。

2、表、视图结构转化
现有一个商品销售表sale,表结构为:
month    char(6)      --月份
sell    number(10,2)   --月销售金额
现有数据为:
200001  1000
200002  1100
200003  1200
200004  1300
200005  1400
200006  1500
200007  1600
200101  1100
200202  1200
200301  1300
想要转化为以下结构的数据:
year   char(4)      --年份
month1  number(10,2)   --1月销售金额
month2  number(10,2)   --2月销售金额
month3  number(10,2)   --3月销售金额
month4  number(10,2)   --4月销售金额
month5  number(10,2)   --5月销售金额
month6  number(10,2)   --6月销售金额
month7  number(10,2)   --7月销售金额
month8  number(10,2)   --8月销售金额
month9  number(10,2)   --9月销售金额
month10  number(10,2)   --10月销售金额
month11  number(10,2)   --11月销售金额
month12  number(10,2)   --12月销售金额
结构转化的SQL语句为:
create or replace view  v_sale(
year,month1,month2,month3,month4,
month5,month6,month7,month8,month9,
month10,month11,month12)
as
select substrb(month,1,4),
sum(decode(substrb(month,5,2),'01',sell,0)),
sum(decode(substrb(month,5,2),'02',sell,0)),
sum(decode(substrb(month,5,2),'03',sell,0)),
sum(decode(substrb(month,5,2),'04',sell,0)),
分享到:
评论

相关推荐

    union all与order by用法

    UNION ALL 与 ORDER BY 用法详解 UNION ALL 和 ORDER BY 是 SQL 语言中的两个基本操作符,分别用于合并查询结果和排序数据。在 Oracle PL/SQL 中, UNION ALL 和 ORDER BY 的使用需要遵循一定的规则和限制。本文将...

    Oracle内建函数大全

    - UNION/UNION ALL:合并来自多个SELECT语句的结果集。 9. **游标和递归函数** - CURSOR:定义和操作游标,用于处理多行结果集。 - CONNECT_BY_ROOT/CONNECT_BY_ISLEAF:在层次查询中使用,标识根节点或叶子节点...

    oracle常用函数 CHM

    以上只是Oracle众多函数中的一部分,实际应用中还有更多如正则表达式处理的`REGEXP_LIKE()`,时间间隔处理的`INTERVAL`,以及用于集合操作的`UNION`、`INTERSECT`和`MINUS`等。学习并熟练掌握这些函数,能极大地提升...

    Oracle的110个自带函数总结归纳

    - UNION, UNION ALL, INTERSECT, MINUS:合并或比较多个查询的结果。 9. 过滤和条件函数: - DECODE():根据条件返回不同的值。 - CASE WHEN THEN END:更复杂的条件判断。 10. 其他特殊函数: - USER:返回...

    oracle函数大全自己用

    - `UNION`, `UNION ALL`, `INTERSECT` 和 `MINUS`:用于合并或对比多个查询的结果。 9. **游标和递归函数** - 游标允许逐行处理查询结果。 - `CONNECT BY` 用于创建层次查询,常用于树状结构的数据。 10. **...

    Oracle高级操作函数学习笔记

    DECODE函数是Oracle中的一个条件分支函数,它的功能类似于编程语言中的if-else if-else语句。DECODE函数的格式为: ``` DECODE(字段或表达式, 值1, 结果1, 值2, 结果2, ... , 默认结果) ``` 如果字段或表达式的值...

    oracle中decode函数的使用方法

    Oracle中的`DECODE`函数是一种非常实用的工具,它允许你在SQL查询中执行简单的条件判断,类似于编程语言中的三元运算符或者IF-THEN-ELSE结构。`DECODE`函数的基本语法是: ```sql DECODE(条件, 值1, 返回值1, 值2, ...

    Oracle常用关键词和函数

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的功能和语法,包括各种关键词和函数,用于高效的数据处理和查询。在本文中,我们将深入探讨一些Oracle中常用的关键词和函数。 首先,我们来看NVL()...

    oracle 110个常用函数.zip

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的内置函数,以帮助用户进行数据查询、处理和分析。在"Oracle 110个常用函数"这个资料中,我们很可能会找到一系列关于Oracle SQL函数的详细解释。这些...

    Oracle数据库常用sql语句的分类和常用函数.docx

    根据提供的文档信息,本文将详细解析Oracle数据库中的关键SQL语句分类、常用SQL语句以及Oracle函数的应用场景。此外,还将简要介绍Oracle数据库的一些基本管理命令,如启动与关闭服务、用户管理等。 ### 一、Oracle...

    Oracle 多行记录合并_连接_聚合字符串的几种方法_oracle_脚本之家1

    通过使用`DECODE`函数,我们可以为每个可能的值设置条件,然后使用`MAX`函数来消除重复。例如,在上述描述中,对于`COUNTRY`和`CITY`字段,可以编写如下SQL: ```sql SELECT t.country, MAX(DECODE(t.city, '台北'...

    oracle.10G函数大全.chm

    Oracle 10G函数大全是数据库管理员和开发人员的重要参考资料,它涵盖了Oracle 10g版本中的各种内置函数,这些函数在SQL查询、PL/SQL编程以及数据库管理中发挥着关键作用。Oracle数据库是一个功能丰富的关系型数据库...

    ORACLE函数大全

    - `UNION / UNION ALL`: 合并两个或多个查询的结果集。 - `INTERSECT`: 找出多个查询结果集的交集。 - `MINUS`: 找出第一个查询结果集中不在第二个查询结果集中的行。 9. **游标和循环控制函数**: - `FETCH ...

    Oracle函数与查询.pptx

    Oracle数据库系统中,函数与查询是数据库操作的重要组成部分,它们帮助用户处理和分析数据。以下是对这些知识点的详细说明: 1. **单行函数**: 单行函数作用于一行数据并返回单个结果。它们可以应用于SELECT、...

    oracle函数大全

    "Oracle函数大全"这个资料包很可能包含了Oracle数据库中常用的函数及其用法,这对于数据库管理员(DBA)和开发人员来说是一份宝贵的资源。 1. **内置函数**: - **数学函数**:如`ABS()`返回绝对值,`SQRT()`求...

    Oracle高级sql学习与练习

    Oracle高级SQL学习与练习涵盖了数据库编程中的一系列高级主题,旨在帮助数据库开发者和管理员提高解决复杂问题的能力。在Oracle数据库系统中,高级SQL技能是进行高效数据管理、查询优化和复杂数据处理的基础。 1. ...

    Sql Server与Oracle的区别

    3. **函数替换**:Oracle的函数如TO_DATE或DECODE等,需要替换为Sql Server的对应函数,例如CONVERT或CASE语句。 4. **比较运算符**:检查所有比较运算符,例如Oracle中的`= ANY`或`= ALL`在Sql Server中可能是`= ...

    oracle转DB2 对照

    - **Oracle** 支持 `DECODE` 函数,用于多条件选择。 - Oracle示例: ```sql SELECT DECODE(column, 'value1', result1, 'value2', result2, default_result) FROM table; ``` - 注意点: DB2中没有直接对应的...

    ORACLE9I函数帮助(英文)

    Oracle 9i是一款历史悠久但依然具有重要参考价值的数据库管理系统,尤其对于理解Oracle数据库系统的基础功能和函数操作具有重要意义。本资源"ORACLE9I函数帮助(英文)"提供了全面的Oracle 9i函数列表及使用示例,是...

    Oracle经典练习

    ### Oracle经典练习知识点详解 #### 一、查询部门30中的所有员工信息 - **SQL语句**: `select * from scott.emp where deptno = '30'` - **知识点**: - 使用`SELECT *`: 选取表中的所有列。 - `WHERE`子句: 过滤...

Global site tag (gtag.js) - Google Analytics