admin 管理员组

文章数量: 1086019


2024年4月27日发(作者:listeneer倾听者资源下载)

sql中函数用法

SQL Server数据库管理系统是数据库管理系统目前最为常用的大型数据库管理系

统之一,可在各种操作系统中运行,具有使用方便、可伸缩性好、相关软件高度集

成化的特点。今天,我们就来简单介绍一下sql中函数的用法。

Transact-SQL是SQL Server数据库的核心组件, T-SQL遵循ANSI制定的SQL-92标

准, 并对其进行了扩展, T-SQL语言包括数据定义语言 (DDL) 、数据操作语言

(DML) 、数据控制语言 (DCL) 和附加语言元素四大部分。函数则是能够完成特

定功能并返回处理结果的一组T-SQL语句。本文研究的Case函数就是SQL Server

数据库提供的函数之一, 是特殊的T-SQL表达式。Case函数允许按列来显示可选

值, 用来计算多个条件并为每个条件返回单个值。Case函数可以出现在SELECT

语句的选择列表中, 也可以出现在其他各个子句中。通常用于将含有多重嵌套的

if…else语句替换为可读性更强的代码。

Case函数的表达式分两种:一种是简单Case, 另一种是搜索Case。

简单的Case表达式通过将条件表达式与每个WHEN子句中的常量表达式进行比

较来进行操作。如果这些表达式是等价的, 则返回THEN子句中的结果表达式。

简单Case的语法如下:

简单Case函数的写法比较简洁, 但是当条件需要作范围判断时, 简单Case函数

的功能难以实现, 这时就需要用到搜索Case函数。

搜索的Case表达式按照指定的顺序评估每个WHEN子句的布尔表达式以确定结

果。搜索Case表达式的语法如下:

简单Case函数与C语言中的switch语句类似:Case给定匹配字段, When给出具

体的值, 如果匹配到就返回Then值。Case函数匹配原则是仅返回第一个匹配到

的结果。简单Case函数书写更简洁, 但是以功能的实现来说搜索Case函数比简

单Case函数更强大。搜索Case函数可以实现简单Case函数的全部功能, 但是简

单Case函数只能实现Case搜索函数的部分功能。

综合以上分析, 如果是标量值进行等量比对, 可以使用简单Case函数, 范围值比

对则选用搜索Case函数。

Case函数通常用于将含有多重嵌套的if…else语句替换为可读性更强的代码,

T-SQL语言在实际使用中善用Case函数, 可以实现非常多的功能, 可以让代码的

可读性变得更强。下面就通过几个实例进行简单的分析。

查询语句SELECT在SQL Server数据库中是使用频率最高的语句, 可以说SQL语言

的灵魂就是SELECT语句, SELECT语句有强大的查询功能, 如果配合Case函数一

起使用, 可以让SELECT语句的功能更强大。在SELECT语句中使用Case函数可以

让返回值根据条件进行分组。在以下的示例中, 0001号学生的成绩按分数返回等

级。

ORDER BY子句在SQL Server数据库中用来指定结果集的排序方式, 在ORDER BY

子句中使用CASE表达式, 可以根据给定的列值确定行的排列顺序。在以下示例

中, 性别为男的学号按降序顺序返回, 性别为女的学号按升序排列返回。

HAVING子句在SQL Server数据库中用来指定组或聚合函数的搜索条件, 在

HAVING子句中使用CASE表达式可以限制SELECT语句返回的行。按课程信息表

的课时返回学生信息表里学生单门课的最大课时数。HAVING条款将课时限制为

基础课的课时高于2或者专业课的课时高于4。

UPDATE语句在SQL Server数据库中用来更新数据表中已存在的记录, 以下示例

在UPDATE语句中使用CASE表达式来确定课程表中数据结构课的课时更改前后

的值, 如果数据结构课时减3以后值小于零, 则课时增加2;否则, 课时增加1。此

处OUTPUT子句用于显示课时修改前后的值。

流程控制语句IF…ELSE用来控制流程走向。其实在T-SQL中, Case函数也有类似

的效果, 而且写法更简洁。

一般来说, 用UNION也可以实现列转换这一功能, 但是会增加数据库的资源消耗

(多个Select部分) , 而且这样写SQL语句会很长。用Case函数来实现十分简单, 只

需要一次Select全表查询就可以解决这个问题, 代码如下 (此处限于篇幅, 仅查

询学号为0001和0002号学生的成绩) :

Case函数可用于允许有效表达式的任何语句或子句中。从上文的示例中, 可以看

到在SELECT语句、UPDATE子句、ORDER BY子句和HAVING子句中灵活使用Case

函数, 可以提升这些子句的功能。其实在T-SQL语言中, 很多语句和子句都可以

与Case函数来配合使用, 比如, DELETE和SET等语句中以及select_list、IN、WHERE

等子句中都可以使用Case函数[5]。灵活合理使用Case函数, 可以减少数据库查

询表的次数, 在实现数据库各种功能的同时, 尽可能少地占用数据库资源, 并提

高数据库的工作效率。


本文标签: 函数 数据库 表达式 语句 子句