Oracle数据库中几种非常有用的函数(with……as等)
2016-12-14 13:34
183 查看
没事儿唠唠IT 2016-12-05 00:30
在实际项目开发中,灵活应用数据库中已有的函数,往往可在很大程度上减少程序代码层面的控制逻辑,降低项目复杂度,且提高运行效率。本篇介绍的主要函数有:with..as、exists/in及not exists/not in、union(all)、decode等
上述姓名纯属虚构,如有雷同敬请谅解!
(注:with关键字构造的虚拟数据集临时存放于用户的临时表空间中)
exists/in及not exists/not in
仅从语法上来讲,在大多数情况下exists与in及not exists与not in可相互转换使用,但其各自的适用场景略有不同,执行效率也有差异。当子查询数据量较小时应使用in或not in,反之则使用exists或not exist比较合适,因为使用in时,Oracle查询是执行顺序是由内而外的,但如果使用exist的话Oracle则会“先外后内”,查询开销相对较大,现举例如下:
查询所有绑定了部门ID的用户(适合用in的场景)
适合用in的场景
查询未被账户绑定的部门(适合用not exists的场景)
适合用not exists的场景
(说明:以上仅作示例演示,并未考虑实际设计的合理性。)
union,查询结果去重
union all,查询返回多表未重的结果集:
union all并集查询,不去重
行专列
在实际项目开发中,灵活应用数据库中已有的函数,往往可在很大程度上减少程序代码层面的控制逻辑,降低项目复杂度,且提高运行效率。本篇介绍的主要函数有:with..as、exists/in及not exists/not in、union(all)、decode等
with ... as
当在sql查询时需要对有规律的一批数据进行分析处理而又不想将这批数据存入实体表时,我们可以使用with关键字临时构建一个虚拟的数据集,以便对其进行与实体表相似的sql操作,如:上述姓名纯属虚构,如有雷同敬请谅解!
(注:with关键字构造的虚拟数据集临时存放于用户的临时表空间中)
exists/in及not exists/not in
仅从语法上来讲,在大多数情况下exists与in及not exists与not in可相互转换使用,但其各自的适用场景略有不同,执行效率也有差异。当子查询数据量较小时应使用in或not in,反之则使用exists或not exist比较合适,因为使用in时,Oracle查询是执行顺序是由内而外的,但如果使用exist的话Oracle则会“先外后内”,查询开销相对较大,现举例如下:
查询所有绑定了部门ID的用户(适合用in的场景)
适合用in的场景
查询未被账户绑定的部门(适合用not exists的场景)
适合用not exists的场景
(说明:以上仅作示例演示,并未考虑实际设计的合理性。)
union与union all
union,查询返回多表去重后的结果集:union,查询结果去重
union all,查询返回多表未重的结果集:
union all并集查询,不去重
行互列
行转列最常用的方法是用decode或case,两者使用方法类似,现以decode举例如下:行专列
相关文章推荐
- PHP里10个鲜为人知但却非常有用的函数
- 你所必须知道的PHP 9种非常有用的函数和特征!
- 几个非常有用SQL Server的函数(SQL Server的函数的使用)
- 非常有用的Java日期时间操作函数代码一览
- [转] MATLAB图像处理相关函数 非常有用
- PHP里10个鲜为人知但却非常有用的函数
- php 非常有用的高级函数PATH_SEPARATOR常量和set_include_path 3ff8
- PHP里10个鲜为人知但却非常有用的函数
- PHP里10个鲜为人知但却非常有用的函数
- PHP里10个鲜为人知但却非常有用的函数
- 一个非常有用的函数——COALESCE
- PHP里10个鲜为人知但却非常有用的函数
- 一个非常有用的函数——COALESCE
- 51单片机中怎么将函数或者变量定位到指定地址,非常有用
- PHP里10个鲜为人知但却非常有用的函数
- PHP中非常有用的函数
- PHP里10个鲜为人知但却非常有用的函数
- MYSQL的存储过程、变量、函数及部分简单优化(非常有用,有存储过程+光标实例)
- 一个非常有用的函数——COALESCE
- PHP里10个鲜为人知但却非常有用的函数