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

几个数据库函数

阅读更多

前段时间做维护的时候,阅读别人SQL文的时候看到几个函数,今记录如下,以备后用

 

1. COALESCE(expression_1,expression_2,……,expression_n)

这个函数返回参数表达式中的一个不为空的表达式的值,如果所有表达式的值都为空,那么返回空。

 


 对这样一张表做如下SQL查询

SELECT C.TNO,COALESCE(C.CNAME,C.CNO) FROM COURSE C

 得到如下结果



 当C.CNAME为空的时候显示C.CNO。当然如果这是CNO也是空值,那么将返回空值。


2. DECODE()

该函数语法如下

DECODE(expression, if1, value1, if2,value2, if3,value3, . . ., default)

意思是说,如果expression的值等于if1的值,返回value1,如果不等,再和if2比较,相等返回value2,以此类推,如果所有的条件都不满足,返回default默认值。

看下面SQL

SELECT DECODE(1,1,'男',0,'女','未知') FROM DUAL  --1
SELECT DECODE(0,1,'男',0,'女','未知') FROM DUAL  --2
SELECT DECODE(3,1,'男',0,'女','未知') FROM DUAL  --3
SELECT DECODE(3,1,'男',0,'女') FROM DUAL  --4

 第一条结果是"男",第二条结果是"女",第三条结果是"未知",第四条结果为空。

也就是说如果没有默认值,而前面的所有条件又都没有匹配,则返回空。


3. LAG()

这个函数可以取出某个字段前N条记录的值。对如下表



 进行下面的SQL查询

SELECT C.*,LAG(C.CNAME,1) OVER(ORDER BY C.CNO) FROM COURSE C

 所得结果如下



 第一条记录已经无法再取前一条记录,所以LAG()函数返回空。

SQL为意思如下。

    LAG(C.CNAME, 1) 表示取前一条记录的CNAME的值。

    OVER(ORDER BY C.CNO)表示按CNO来排序,然后决定记录之间的前后关系。

在over()里面还可以加入partition by,如下SQL

SELECT C.*,LAG(C.CNAME,1) OVER(PARTITION BY C.TNO ORDER BY C.CNO) FROM COURSE C

 结果如下



 partition by是用来分区的。对TNO进行分区,在不同的TNO下寻找上一条记录的CNAME的值。所以查询结果中t001,t002,t003中分别有一条记录最后的值为空。

 

如果希望在没有前N条记录的时候不返回空,可以使用默认值,SQL如下

SELECT C.*,LAG(C.CNAME,1,'default') OVER(PARTITION BY C.TNO ORDER BY C.CNO) FROM COURSE C

 结果如下

 在原来的空值的地方出现了default,当然这个值根据自己的需要设定想要的值。

 

LEAD()函数与此类似,不过它是查询某字段的后N条记录的值。

 

以上的SQL全部在oracle数据库下执行,其他数据库是否支持这些函数,未知,有待验证。

  • 大小: 4.1 KB
  • 大小: 3.9 KB
  • 大小: 3.5 KB
  • 大小: 5.6 KB
  • 大小: 5.5 KB
  • 大小: 5.8 KB
分享到:
评论

相关推荐

    一个数据库信息管理系统的实现

    我没有提供详尽的注释,所以一开始看或许有点没头绪,但我的程序没有使用任何高级技巧,只要关注几个特定的类,几个特定的函数,一定会有收获。这个程序供大家学习研究使用,相信对于大家的大作业这些任务也会有帮助...

    Discuz 5.0 中读取纯真IP数据库函数分析

    该函数的实现过程可以分为以下几个步骤: 1. IP地址验证:convertip()函数首先对用户输入的IP地址进行验证,以确保其格式正确。如果IP地址格式不正确,则返回错误信息。 2. IP数据文件读取:convertip()函数然后...

    Gbase 8s内置函数之日期函数

    Gbase 8s内置函数之日期函数

    oracle 用户 表空间 以及几个工作中用到的特殊函数

    主要是oracle数据库用户表空间的增删改,还有几个工作中遇到的函数

    管理程序数据库设计文档.doc

    管理程序数据库设计文档中的数据库设计部分涵盖了数据库建库说明、数据库设计理念、数据库实现方法等几个方面: * 数据库建库说明:我们将介绍数据库的建库过程,包括数据库设计、数据库实现等。 * 数据库设计理念...

    Deiphi源码:函数工厂,函数生成器.rar

    东西很杂,带一个数据库,能搜索一些以前搜集的资料。不过当时和朋友合作的时候,是打算写成IDE插件那样,方便自己使用的,不过后来也没修改了(都忘记为什么没继续做的原因了。。。。。。汗一下)。前几天朋友在QQ上...

    达梦数据库_SQL语言手册

    达梦数据库_SQL语言手册.pdf 数据库快照定义语句 数据库快照删除语句 第章数据查询语句和全文检索语句 单表查询 简单查询 带条件查询 集函数 情况表达式 连接查询 子查询 标量子查询 表子查询 派生表子...

    python制作一个简单的gui 数据库查询界面

    1、安装mysql3.7,创建一个test数据库,创建student表,创建列:(列名看代码),创建几条数据 (以上工作直接用navicat for mysql工具完成) 二、代码: import sys import tkinter as tk import mysql.connector ...

    数据库规范化习题及详解

    将其中的部分函数依赖分解为一个独立的关系,则产生如下所示的两个 2NF 关系模式: 习题 2:判断给定的数据集是否可直接作为关系数据库中的关系,若不行,则改造成为尽可能好的并能作为关系数据库中关系的形式,并...

    python新手算法函数思想入门项目,包含几个小项目,没有程序基础可以根据这个开拓思维,会发现算法也挺好玩的,标有注解,一看就懂

    python新手入门算法函数,每条语句标有注解,开头有提示方法,根据步骤学习python。人生苦短,我用python。

    数据库系统导论(第七版)

    10.3 平凡的函数依赖和非平凡的函数 依赖 241 10.4 依赖集的闭包 241 10.5 属性集的闭包 242 10.6 最小函数依赖集 244 10.7 小结 245 练习 246 参考文献和简介 247 部分练习答案 249 第11章 进一步规范化Ⅰ:1NF、2...

    数据库设计说明书(模板)

    部分内容提供了一个详细的目录,包括目录、摘要、引言、总体设计、功能设计描述、ER 模型、后台过程、函数、触发器功能说明等几个部分。下面我们将对这些部分进行详细的分析和解释。 目录 目录是文档的索引,提供...

    BLSQL数据库系统 v2.4.rar

    BLSQL - 即BlackLight SQL 数据库系统,BLSQL具有自动索引,使用... lasterror():获取最后的一个数据库运行错误。  echoerror():直接ECHO最后一个运行错误。  修复几个小BUG.  更新编码,全新高压。速度更快!

    Oracle数据库、SQL

    1.12一台机器可跑几个数据库,主要受内存大小影响 2 1.13源表和结果集 2 1.14几个简单命令 2 1.15 tarena给jsd1304授权 2 1.16课程中使用的5个表 3 二、 select from语句 5 2.1 select语句功能 5 2.2 select语句基本...

    Oracle数据库学习指南

    45.使用Database Configuration Assistant安装第二个数据库 46.Oracle 数据库向 MS SQL Server 7.0 的迁移 Oracle1: 1. Decode()函数使用技巧(NT+IIS+ASP+ORACLE) 2. Dual伪列 3. EXP、IMP 命令详解 4. ...

    数据库编程

    关于数据库函数的几个编程实现以及对特定问题的解决。

    MySQL/PHP数据库应用开发指南

    其后,给出了几个复杂的网站应用实例,包括目录管理系统、讨论板、购物车等。最后,本书的附录提供了安装配置软件包和具体编程时需要参考的文档。 本书适合网站开发人员作为参考工具书,也适合对网站开发感兴趣的...

    EXCEL函数功能整理版

    31 CONCATENATE 将几个文本字符串合并为一个文本字符串。 32 CONVERT 将数字从一个度量系统转换到另一个度量系统中 33 COUNT 返回包含数字以及包含参数列表中的数字的单元格的个数。利用函数 COUNT ...

    数据库学习基础之名词解释

    Sybase提供了一套应用程序编程接口和库,可以与非Sybase数据源及服务器集成,允许在多个数据库之间复制数据,适于创建多层应用。系统具有完备的触发器、存储过程、规则以及完整性定义,支持优化查询,具有较好的...

Global site tag (gtag.js) - Google Analytics