主要知识点为case函数,if函数,ifnull函数,elt函数几部分,主要用于mysql语句中的逻辑判断

待操作的表如下:

p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }

+----+-----------+-----+-------+--------+

| id | name      | sex | level | weight |

+----+-----------+-----+-------+--------+

|  1 | xiaohong  | 1   | 1     | 50     |

|  2 | xiaoming  | 0   | 0     | 90     |

|  3 | xiaohuang | 1   | 2     | 80     |

|  4 | xiaoming  | 0   | 3     | NULL   |

+----+-----------+-----+-------+--------+

sex:0-woman,1-man,其中-unknown;level是客户的级别:1-normal,2-vip,3-vvip

1.case函数

语法1:

CASE expression
WHEN value1 THEN returnvalue1
WHEN value2 THEN returnvalue2
WHEN value3 THEN returnvalue3
……
ELSE defaultreturnvalue
END

举栗:

  • select t.name,(case t.sex when 0 then 'woman' when 1 then 'man' else 'unknown' end) sex from test t;
语法2:
CASE
WHEN condition1 THEN returnvalue1
WHEN condition 2 THEN returnvalue2
WHEN condition 3 THEN returnvalue3
……
ELSE defaultreturnvalue
END
举栗:
  • select t.name,(case when t.sex=0 then 'woman' when t.sex=1 then 'man' else 'unknown' end) sex from test t;

输出为:

p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }

+-----------+-------+

| name      | sex   |

+-----------+-------+

| xiaohong  | man   |

| xiaoming  | woman |

| xiaohuang | man   |

| xiaoming  | woman |

+-----------+-------+

2.if函数

IF(expr1,expr2,expr3),如果 expr1 为真(expr1 <> 0 以及 expr1 <> NULL),那么 IF() 返回 expr2,否则返回expr3。

p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }

select name,if(weight>85,'fat','normal') from test;

p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }

+-----------+------------------------------+

| name      | if(weight>85,'fat','normal') |

+-----------+------------------------------+

| xiaohong  | normal                       |

| xiaoming  | fat                          |

| xiaohuang | normal                       |

| xiaoming  | normal                       |

+-----------+------------------------------+

当weight为NULL时,NULL>85的返回值为NULL,所以返回expr3 normal

3.IFNULL()函数

ifnull(value1,value2) 用来替换 NULL 值,若value1为NULL,则替换NULL为value2

p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }

select name,ifnull(weight,0) from test;

+-----------+------------------+

| name      | ifnull(weight,0) |

+-----------+------------------+

| xiaohong  | 50               |

| xiaoming  | 90               |

| xiaohuang | 80               |

| xiaoming  | 0                |

+-----------+------------------+

p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }

select name,ifnull(weight,0)+100 from test;

+-----------+----------------------+

| name      | ifnull(weight,0)+100 |

+-----------+----------------------+

| xiaohong  |                  150 |

| xiaoming  |                  190 |

| xiaohuang |                  180 |

| xiaoming  |                  100 |

+-----------+----------------------+

4.ELT函数

ELT(N,str1,str2,str3,...)

如果 N = 1,返回 str1,如果N = 2,返回 str2,等等。如果 N 小于 1 或大于参数的数量,返回 NULL。

p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }

select name,elt(level,'normal','vip','vvip') from test;

p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }

+-----------+----------------------------------+

| name      | elt(level,'normal','vip','vvip') |

+-----------+----------------------------------+

| xiaohong  | normal                           |

| xiaoming  | NULL                             |

| xiaohuang | vip                              |

| xiaoming  | vvip                             |

+-----------+----------------------------------+

其他:

Mysql的if既可以作为表达式用,也可在存储过程中作为流程控制语句使用,在该文中只讲述了if表达式。

参考:https://blog.csdn.net/rocling/article/details/82147981

mysql中的条件语句case when/if函数的更多相关文章

  1. Mysql中的条件语句if、case

    Mysql中的条件语句在我们对数据进行转换的时候比较有用,这样就不需要创建中转表. IF 函数 IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 <> ...

  2. MySQL中的条件语句

    判断学生表中成绩是否小于60,将小于60的学生成绩列为不及格 学生表(student) 字段:姓名(name),学号(主键)(num),性别(sex),成绩(score) select *,if(sc ...

  3. sql 语句中使用条件判断case then else end

    sql 语句中使用条件判断case then else end范例: SELECT les.[nLessonNo] FROM BS_Lesson AS les WHERE les.[sClassCod ...

  4. js中的条件语句

    //js中的条件语句 ; //example1 单分支语句 ){ console.log("你已经不年轻了!"); }else{ console.log("你依然很有活力 ...

  5. 浅谈MySQL中优化sql语句查询常用的30种方法 - 转载

    浅谈MySQL中优化sql语句查询常用的30种方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使 ...

  6. 重新认识MySQL中的COUNT语句

    在数据库的增删改查操作中,使用最频繁的就是查询操作. 而在所有查询操作中,统计数量操作更是经常被用到. 关于数据库中行数统计,无论是MySQL还是Oracle亦或者是SqlServer,都有一个函数可 ...

  7. mysql中常用的语句整理

    mysql中常用的语句: 1:创建带自增长的主键的表 DROP TABLE IF EXISTS user_login ; CREATE TABLE user_login (   user_id INT ...

  8. MySQL中执行sql语句错误 Error Code: 1093. You can't specify target table 'car' for update in FROM clause

    MySQL中执行sql语句错误 Error Code: 1093. You can't specify target table 'car' for update in FROM clause 201 ...

  9. mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法

    mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法: 语法: TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2) 说明: 返回日 ...

随机推荐

  1. centos7网卡配置文件详解与固定服务器ip

    环境:Centos7.3(最小安装方式安装) 查看自动获取的IP地址 ip addr 更改网卡配置,配置静态IP 网卡配置文件位置:/etc/sysconfig/network-scripts/ifc ...

  2. svg 飞线,源码

    <html> <head> <meta charset="utf-8" /> <meta name="viewport" ...

  3. CSS的起步

    初学CSS CSS语法规范 选择器{样式} 给谁改样式{改什么样式} 写在style标签里 健值对形式,分号结尾 color:red; <style> p { color:red; fon ...

  4. Python爬虫-Scrapy框架的工作原理

    Scrapy框架工作原理 Scrapy框架架构图 Scrapy框架主要由六大组件组成,分别为: ​ 调度器(Scheduler),下载器(Downler),爬虫(Spiders),中间件(Middwa ...

  5. 使用vue-cli 来创建vue项目

    前置条件 需要安装node环境 安装vue\cli工具 vue\cli官网 传送门 vue-cli 安装node.js nodejs中文网 点击之后会发现这个界面 可以点击下载或者选择其他版本的包,尽 ...

  6. Docker基本原理概述

    Docker基本原理概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,可以以与管理应用程序相同的方式来管 ...

  7. Nvidia TensorRT开源软件

    TensorRT开源软件 此存储库包含NVIDIA TensorRT的开源软件(OSS)组件.其中包括TensorRT插件和解析器(Caffe和ONNX)的源代码,以及演示TensorRT平台使用和功 ...

  8. 深入理解ES8的新特性SharedArrayBuffer

    简介 ES8引入了SharedArrayBuffer和Atomics,通过共享内存来提升workers之间或者worker和主线程之间的消息传递速度. 本文将会详细的讲解SharedArrayBuff ...

  9. Appium_Android自动化测试Genymotion之模拟器联网设置

    目的: 使用Genymotion做Android项目,需要考虑到联网,以下是设置操作 操作步骤: 打开VM VirtualBox,设置->网络-> 启动模拟器,设置  备注: 模拟器的手机 ...

  10. Django(58)viewsets视图集详解

    前言 ViewSet 只是一种基于类的视图,它不提供任何方法处理程序(如 .get()或.post()),而是提供诸如.list()和 .create() 之类的操作. ViewSet 的方法处理程序 ...