数据库应用软件很多时候将多重的、相关的实体信息保存在同一个表格中。例如,购买的零件和本地生产的零件都是零件,经理和工人都是员工,尽管多重的实体类型在数据存储上略有不同,但是它们有太多的相同之处,因此通常使用一个表格而不是两个。
处理这样的表格通常意味着对每一行进行条件测试来检查哪个实体类型正在被处理,然后返回每种类型的不同结果集。CASE语句可以用来完成这一工作。
从Oracle 9i版开始,COALESCE函数在很多情况下就成为替代CASE语句的一条捷径,COALESCE的格式如下:
COALESCE (expression_1, expression_2, ...,expression_n)
列表中第一个非空的表达式是函数的返回值,如果所有的表达式都是空值,最终将返回一个空值。
使用COALESCE的秘密在于大部分包含空值的表达式最终将返回空值(连接操作符“||”是一个值得注意的例外)。例如,空值加任何值都是空值,空值乘任何值也都是空值,依此类推。
这样您就可以构建一系列表达式,每个表达式的结果是空值或非空,这就像一个CASE语句,表达式按照顺序进行测试,第一个满足条件的值就确定了结果。
列表A展示了名为PARTS的表格的一部分,该表格存储了购买的零件数据和生产的零件数据,如果是购买的零件,那么part_type列的值为‘P’,如果是本地生产或组装的则是‘B’;此外,对于购买的零件,purchase_cost 列会显示购买成本,而本地生产的零件则是空值;而且,本地生产的零件还有material_qty和material_cost两列的信息,对于购买的零件则是空值。
SQL> desc parts
Name Null? Type
PART_ID NOT NULL NUMBER(6)
PART_TYPE NOT NULL CHAR(1)
(other columns)
PURCHASE_COST NUMBER(8,2)
MATERIAL_COST NUMBER(8,2)
MATERIAL_QTY NUMBER(6)
LAST_UPDATED TIMESTAMP(6)
UPDATED_BY VARCHAR2(30)
列表A:
您可以使用一个CASE语句来测试part_type列的值并返回either purchase_cost和material_qty列与material_cost列的乘积;不过COALESCE可以用一行语句解决这个问题:
COALESCE(purchase_cost, material_qty * material_cost)
如果数据行中存储的是一个购买的零件,那么purchase_cost就不是空值,将返回purchase_cost的值;然而,对于本地生产的零件,purchase_cost是空值,COALESCE会忽略它,然后将material_qty和material_cost相乘,并将乘积作为结果返回。
SELECT part_id "Part", part_type "Type",
COALESCE(purchase_cost, material_qty * material_cost) "Cost"
FROM parts;
您可以对任何数量的表达式重复使用这个模式,COALESCE是一个非常便捷的方法对统一表格中的多重实体求值。
最后,还要说一点CASE语句的优点,就是CASE是自动进行文档记录的,这便于理解和解读正在发生的事情。
分享到:
相关推荐
在深入探讨如何使用Oracle的COALESCE函数之前,我们首先需要理解这个函数的基本概念和它在数据处理中的重要性。COALESCE函数是Oracle数据库中一个非常实用且强大的功能,主要用于返回一组表达式中第一个非空(NULL)...
Oracle内置函数是其强大功能的关键组成部分,这些函数极大地丰富了SQL语言的表达能力,使得数据处理和查询更为便捷高效。以下是对Oracle内置函数的详细概述: 1. **数学函数**: - `ABS(x)`:返回x的绝对值。 - `...
Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的内置函数,以支持复杂的查询和数据操作。这份"oracle函数大全(分类显示).zip"压缩包显然是一份详细的Oracle函数参考手册,对于初学者而言,是一个...
最后,**其他函数**包括逻辑判断函数(如`IFNULL`、`NVL`、`COALESCE`)、系统信息函数(如`USER`、`SESSION_USER`)以及各种数学和系统相关的函数,这些在特定场景下都有其独特的用途。 以上就是"oracle函数分类....
总结来说,Oracle的COALESCE函数是一个强大的工具,能有效处理NULL值,简化SQL查询,并在数据处理中提供更大的灵活性。无论是在报表生成、数据分析还是日常的数据操作中,理解并熟练掌握COALESCE的用法都对提升工作...
Oracle 特色函数及复杂更新应用 Oracle 特色函数是 Oracle 数据库中的一些特殊函数,用于实现各种数据处理和操作。在日常操作中,我们可能会用到这些函数,例如转换函数、通用函数、日期函数等。 一、转换函数 ...
Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和丰富的内置函数是其核心竞争力之一。本文将深入探讨“Oracle函数经典”这一主题,主要聚焦在程序员常用的数据操作函数上。 一、字符串处理函数 1....
Oracle数据库是世界上最广泛使用的数据库系统之一,其丰富的内置函数极大地增强了数据处理的灵活性和效率。在Oracle中,函数主要用于处理和转换数据,使得查询和分析变得更加便捷。以下将详细介绍Oracle中的几个主要...
- 特殊函数如**NVL()**、**COALESCE()**可以用来处理NULL值。 ##### 示例 假设有一个名为EMP的表格,包含SALARY和BONUS两列。如果直接对这两列求和,当BONUS列存在NULL值时,结果也将是NULL。解决这个问题的方法是...
而`COALESCE()`函数能处理NULL值,避免因NULL引发的错误。 总的来说,Oracle函数速查手册是数据库管理员、开发人员和数据分析者的得力助手,通过学习和查阅,可以快速解决在处理Oracle数据库时遇到的问题。无论是...
Oracle数据库系统提供了丰富的内置函数,方便用户在处理数据时进行各种操作。在SQL语句中,函数主要分为单行函数和多行函数。单行函数主要用于处理单行数据,而多行函数则处理多行数据集。在本篇文章中,我们将重点...
3. COALESCE函数:返回参数列表中第一个非NULL的表达式。 4. NULLIF函数:返回两个表达式相等时的NULL,否则返回第一个表达式。 5. GREATEST函数:返回一组表达式中的最大值。 6. LEAST函数:返回一组表达式中的...
Oracle数据库是世界上最广泛使用的数据库系统之一,其丰富的函数集使得数据处理变得更为高效。本压缩包文件"oracle常用函数.rar"包含了一些关于Oracle数据库的重要知识点,主要包括“connect by”用法、SQL优化以及...
"Oracle函数大全(分类显示)"这个资源显然是为了帮助开发者更好地理解和使用Oracle中的各种函数。下面,我们将详细介绍Oracle数据库中的一些主要函数类别及其应用场景。 1. **数值函数**: - `ROUND`:对数字进行四...
Oracle数据库系统中包含了大量的内置函数,这些函数在处理数据时起着至关重要的作用。本篇文章主要探讨Oracle常用函数,特别是涉及字符串处理、日期处理以及数据处理的函数。 1. **字符串处理函数**: - `SUBSTR...
6. **条件判断函数**:如NVL(如果为空则替换)、COALESCE(返回第一个非空值)、CASE(条件表达式)等,用于处理NULL值和条件逻辑。 二、RowID与数据库锁机制 RowID是Oracle数据库中每个行的唯一标识符,它是一个...
在Oracle数据库中,特殊函数是SQL查询和数据库管理的关键组成部分,它们极大地增强了数据处理和分析的能力。本篇文章将深入探讨一些非常实用的Oracle特殊函数,这些函数在日常的数据库操作中有着广泛的应用。 1. **...
Oracle中没有直接对应的函数,但可以用`NVL()`或`COALESCE()`实现相同效果,例如`SELECT F1, NVL(F2, 10) value FROM Tbl`。 总的来说,SQL Server和Oracle在数学函数上有许多相似之处,但也存在一些语法和功能上的...
### Oracle 常用函数及简单示例 Oracle 数据库提供了丰富的内置函数,这些函数能够帮助用户高效地处理数据、格式化输出等。本文将基于提供的部分内容介绍一些常用的 Oracle 函数及其应用示例。 #### 日期时间转换...
* COALESCE 函数:用于返回表达式列表中第一个不为空的表达式。 日期函数 日期函数是 Oracle 中的一些用于操作日期的函数。 * MONTHS_BETWEEN 函数:用于计算两个日期之间的月份差。 * ADD_MONTHS 函数:用于将...