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

SQL中Case的妙用(三)

SQL 
阅读更多

四,根据条件有选择的UPDATE。 

例,有如下更新条件 

1. 工资5000以上的职员,工资减少10% 

2. 工资在2000到4600之间的职员,工资增加15% 

很容易考虑的是选择执行两次UPDATE语句,如下所示 

 

--条件1

 

UPDATE Personnel

 

SET salary = salary * 0.9

 

WHERE salary >= 5000;

 

--条件2

 

UPDATE Personnel

 

SET salary = salary * 1.15

 

WHERE salary >= 2000 AND salary < 4600;

 

 

但是事情没有想象得那么简单,假设有个人工资5000块。首先,按照条件1,工资减少10%,变成工资4500。接下来运行第二个SQL时候,因为这个人的工资是4500在2000到4600的范围之内, 需增加15%,最后这个人的工资结果是5175,不但没有减少,反而增加了。如果要是反过来执行,那么工资4600的人相反会变成减少工资。暂且不管这个规章是多么荒诞,如果想要一个SQL 语句实现这个功能的话,我们需要用到Case函数。代码如下:

 

UPDATE Personnel

 

SET salary = CASE WHEN salary >= 5000

 

             THEN salary * 0.9

 

WHEN salary >= 2000 AND salary < 4600

 

THEN salary * 1.15

 

ELSE salary END;

 

 

 

这里要注意一点,最后一行的ELSE salary是必需的,要是没有这行,不符合这两个条件的人的工资将会被写成NUll,那可就大事不妙了。在Case函数中Else部分的默认值是NULL,这点是需要注意的地方。 
这种方法还可以在很多地方使用,比如说变更主键这种累活。 
一般情况下,要想把两条数据的Primary key,a和b交换,需要经过临时存储,拷贝,读回数据的三个过程,要是使用Case函数的话,一切都变得简单多了。

 

p_key

col_1

col_2

a

1

张三

b

2

李四

c

3

王五

 


假设有如上数据,需要把主键a和b相互交换。用Case函数来实现的话,代码如下 

 

UPDATE SomeTable

 

SET p_key = CASE WHEN p_key = 'a'

 

THEN 'b'

 

WHEN p_key = 'b'

 

THEN 'a'

 

ELSE p_key END

 

WHERE p_key IN ('a''b');

 

 

同样的也可以交换两个Unique key。需要注意的是,如果有需要交换主键的情况发生,多半是当初对这个表的设计进行得不够到位,建议检查表的设计是否妥当。 

五,两个表数据是否一致的检查。 

Case函数不同于DECODE函数。在Case函数中,可以使用BETWEEN,LIKE,IS NULL,IN,EXISTS等等。比如说使用IN,EXISTS,可以进行子查询,从而 实现更多的功能。 
下面具个例子来说明,有两个表,tbl_A,tbl_B,两个表中都有keyCol列。现在我们对两个表进行比较,tbl_A中的keyCol列的数据如果在tbl_B的keyCol列的数据中可以找到, 返回结果'Matched',如果没有找到,返回结果'Unmatched'。 
要实现下面这个功能,可以使用下面两条语句 

 

--使用IN的时候

 

SELECT keyCol,

 

CASE WHEN keyCol IN ( SELECT keyCol FROM tbl_B )

 

THEN 'Matched'

 

ELSE 'Unmatched' END Label

 

FROM tbl_A;

 

--使用EXISTS的时候

 

SELECT keyCol,

 

CASE WHEN EXISTS ( SELECT * FROM tbl_B

 

WHERE tbl_A.keyCol = tbl_B.keyCol )

 

THEN 'Matched'

 

ELSE 'Unmatched' END Label

 

FROM tbl_A;


使用IN和EXISTS的结果是相同的。也可以使用NOT IN和NOT EXISTS,但是这个时候要注意NULL的情况。 

 

分享到:
评论

相关推荐

    SQL中Case语句用法讨论_BJ

    ### SQL中的Case语句深入解析 在SQL查询语言中,`Case`语句是一个非常强大的功能,用于在查询中执行条件判断,它可以根据不同的条件返回不同的结果,这使得SQL能够处理更加复杂的数据筛选和转换需求。`Case`语句有...

    sql中的case用法

    SQL 中 Case 用法 Case 语句是 SQL 中一种强大的语句,用于根据不同的条件执行不同的操作。它可以用来实现复杂的逻辑操作,并且可以与其他 SQL 语句结合使用以实现更加复杂的查询。 SQL 中 Case 语句有两种格式:...

    SQL中case的使用

    SQL中Case的使用方法 Case具有两种格式。简单Case函数和Case搜索函数。

    SQL Server中Case 的不同用法

    当你想基于CASE表达式的返回值进行排序时,可以在ORDER BY子句中使用CASE。这使得你可以根据逻辑条件而非原始数据字段进行排序。在以下示例中,首先按价格范围排序,然后按书名排序。 ```sql SELECT CASE WHEN...

    case语句 sql server

    case语句 sql server case语句

    sql数据库 转 Access SQL语句改写之 Case When Then When Then Else End

    在进行SQL到Access SQL的转换过程中,一个重要的知识点是了解如何将SQL中的`CASE WHEN THEN`结构转换为Access中的等效表达式。在SQL中,`CASE WHEN THEN`是一种常用的条件表达式,用于根据不同的条件返回不同的值。...

    CASE的用法 (Transact-SQL)

    CASE 表达式可以应用于 SQL Server 和 Windows Azure SQL Database 中的多种上下文,包括但不限于: - **SELECT 语句**: 在 SELECT 语句中使用 CASE 表达式可以根据不同的条件动态生成列值。 - **UPDATE 语句**: 在...

    sql妙用(绝妙的sql语句)

    在SQL Server中,可以使用`EXEC`或`sp_executesql`存储过程执行动态SQL。例如,当字段名、表名或数据库名作为变量时,需要使用动态SQL。需要注意的是,字符串前加上`N`表示该字符串是Unicode,如`N'select * from ...

    sql语法的各种妙用

    ### SQL语法的各种妙用 #### 一、动态执行SQL语句 在SQL中,我们可以使用动态执行SQL语句的方式来进行一些灵活的操作。这种方式通常适用于那些需要在运行时确定查询细节的情况。 **示例代码:** ```sql DECLARE ...

    SQL__case_when_then_的用法

    SQL__case_when_then_的用法

    SQL case_when用法

    本文档介绍了SQL中case...when的用法。

    sql语句妙用指导 sql的使用

    ### SQL语句妙用指导——SQL的便捷及巧妙用法详解 #### 一、动态SQL语句基础 在SQL编程中,动态SQL是指在运行时根据条件构建的SQL语句。这种方式非常灵活,尤其适用于需要根据不同的输入动态生成查询的情况。 **1...

    sql case when exists not exists in not in

    在SQL查询中,`CASE WHEN`、`EXISTS`、`NOT EXISTS`以及`IN`和`NOT IN`是常用的操作符,它们用于处理复杂的条件判断和数据筛选。这些概念对于理解和编写高效的SQL语句至关重要,尤其是在数据分析和数据库管理中。 `...

    PB脚本中SQL语句写法与SQL中语句写法对照

    在SQL语言中,可以使用Update表名Set字段名=case字段名when值1then值2else值三endFrom表名Where条件语句来实现条件语句的写法。 四、取余函数Mod() 在PB脚本中,可以使用Mod(要取余数的值,取余值)函数来实现取余数...

    Delphi中sql语句的使用总结

    ### Delphi中SQL语句的使用总结 在Delphi中使用SQL语句是与数据库进行交互的重要手段之一。本文将详细介绍如何在Delphi环境中构造和执行SQL查询,并给出具体的示例来帮助理解。 #### 一、基本SQL查询的构建 在...

    SQL CASE及结构转换问题

    这个"SQL CASE及结构转换问题"的主题涉及到两个主要方面:`CASE`语句的使用以及如何处理SQL中的数据结构转换。 首先,让我们深入了解一下`CASE`语句。在SQL中,`CASE`可以被看作是编程语言中的if-else逻辑,用于...

    sql语句妙用,各种sql语句的详细用法与讲解

    本篇文章将深入探讨SQL语句的一些妙用和详细用法,包括动态SQL、输出参数、Identity列的管理以及通用的SQL查询技巧。 1. 动态SQL: 动态SQL允许我们在运行时构建和执行SQL语句,这在处理动态生成的查询或变量作为...

    论SQL Server数据库中Case函数的作用.pdf

    在UPDATE语句中使用Case函数可以用来动态更新表中的数据: ```sql UPDATE Products SET Price = CASE WHEN Category = '电子' THEN Price * 0.9 WHEN Category = '书籍' THEN Price * 0.8 ELSE Price END WHERE ...

Global site tag (gtag.js) - Google Analytics