当前位置: 首页 > news >正文

case when then else_第6章 函数、谓词、CASE表达式及练习题

93bf3c0a4a119c169f5bc0a18180ee34.png
6-1 各种各样的函数

一、函数的种类

所谓函数,就是输入某一值得到相应输出结果的功能,输入值称为参数(parameter),输出值称为返回值。

● 算术函数(用来进行数值计算的函数)

●字符串函数(用来进行字符串操作的函数)

●日期函数(用来进行日期操作的函数)

●转换函数(用来转换数据类型和值的函数)

●聚合函数(用来进行数据聚合的函数)

二、算术函数

+(加法)/-(减法)/*(乘法)//(除法)

ABS绝对值函数:ABS(列名);

MOD函数:MOD(被除数,除数);SQLServer中不支持MOD函数,用%来进行求余,被除数%除数即可。

ROUND函数:ROUND(对象数值,保留小数的位数);保留小数的位数也可以用某一列的数值来代替。

三、字符串函数

拼接函数:SQLServer中使用的是+,str1+str2;有的用的是||。

字符串长度函数:SQLServer中使用的是len,len(字符串);有的用的是length。

LOWER小写转换函数,lower(字符串)。

UPPER大写转换函数,upper(字符串)。

REPLACE字符串替换函数:REPLACE(对象字符串,替换前的字符串,替换后的字符串),

例:str1:abcdefabc str2:abc str3:ABC。replace(str1,str2,str3)=ABCdefABC。

SQLServer中SUBSTRING字符串截取函数: SUBSTRING(对象字符串,截取的起始位置,截取的字符数)。

四、日期时间函数(SQLServer中)

CURRENT_STAMP函数,返回的是当前的年月日及时间。

利用CAST函数可以将其转换为日期类型或者时间类型:

select cast(current_timestamp as date)as cur_date;

select cast(current_timestamp as time)as cur_time;

截取时间日期元素DATEPART:

SELECT CURRENT_TIMESTAMP,

DATEPART(YEAR , CURRENT_TIMESTAMP) AS year,

DATEPART(MONTH , CURRENT_TIMESTAMP) AS month,

DATEPART(DAY , CURRENT_TIMESTAMP) AS day,

DATEPART(HOUR , CURRENT_TIMESTAMP) AS hour,

DATEPART(MINUTE , CURRENT_TIMESTAMP) AS minute,

DATEPART(SECOND , CURRENT_TIMESTAMP) AS second;

四、转换函数

一是数据类型的转换,一是值的转换。

CAST类型转换函数:CAST(转换前的值 AS 想要转换的数据类型) 例:select cast('0001' as integer) as int_col;得到的结果是1。以及上面的日期转换。

COALESCE将NULL转换为其他值:COALESCE(数据1,数据2,数据3……)。 COALESCE 是 SQL 特有的函数。该函数会返回可变参数 A 中左侧开始第 1个不是 NULL 的值。参数个数是可变的,因此可以根据需要无限增加。

6-2 谓词

一、什么是谓词

谓词的返回值全都是真值(TRUE/FALSE/UNKNOWN)。

● LIKE

● BETWEEN

● IS NULL、 IS NOT NULL

● IN

● EXISTS

二、LIKE谓词——字符串的部分一致查询

模糊查询

例:select * from product

where product_id like'%1%';

查询结果:%1%:0001的结果;%1:0001的结果;1%:没有记录。

三、BETWEEN谓词——范围查询

between包含两个临界值,between .....and ....

四、IS NULL、 IS NOT NULL——判断是否为NULL

判断的是否为空,不能用=,用IS NULL(IS NOT NULL)来进行判断。

五、IN谓词——OR的简便用法

in (值,值,。。。。);not in (值,值,。。。)

在使用IN 和 NOT IN 时是无法选取出NULL 数据的。

六、使用子查询作为IN谓词的参数

①IN和子查询

例:select product_name,sale_price

from product

where product_id In(

select product_id from shopproduct

where shopid='000C');

②NOT IN和子查询

例:select product_name,sale_price

from product

where product_id NOT In(

select product_id from shopproduct

where shopid='000A');

七、EXIST谓词的使用方法

①通常指定关联子查询作为EXIST的参数。

②作为EXIST参数的子查询中经常会使用SELECT *。

例:select product_name,sale_price

from product as p

where exists (select * from shopproduct as sp

where sp.shopid='000A'

and p.product_id=sp.product_id);

③使用NOT EXIST替换NOT IN

6-3 CASE表达式

一、什么是CASE表达式

CASE 表达式是在区分情况时使用的,这种情况的区分在编程中通常称为(条件)分支 。

二、CASE表达式的语法

CASE表达式的语法分为简单CASE表达式和搜索CASE表达式两种。

搜索CASE表达式:

CASE WHEN <求值表达式> THEN <表达式>

WHEN <求值表达式> THEN <表达式>

WHEN <求值表达式> THEN <表达式>

.............

ELSE <表达式>

END

三、CASE表达式的使用方法

例:select product_name,

case when Product_type='衣服' then 'A:'+product_type

when product_type='办公用品' then 'B:'+product_type

when product_type='厨房用具' then 'C:'+product_type

else NUll

end as abc_product_name

from product;

①虽然CASE表达式中的ELSE子句可以省略,但还是希望大家不要省略。省略时相当于else null。

②CASE表达式中的END不能省略。

③CASE表达式的书写位置,任何位置都可以,可以实现行列转换。

例:select sum(case when product_type='衣服' then sale_price else 0 end )as sum_pirce_clothes,

sum(case when product_type='办公用品' then sale_price else 0 end)as sum_price_office,

sum(case when product_type='厨房用具' then sale_price else 0 end)as sum_price_kitchen

from product;

练习题:

6.1

in和not in 不能返回Null值,使用的时候也不能加入NULL。

①返回除500,2800.5000以外的值;②返回的值为空。

6.2

select count(case when sale_price<=1000 then product_name else null end) as low_price,

count(case when sale_price>1001 and sale_price<=3000 then product_name else null end)as mid_price,

count(case when sale_price>3001 then product_name else null end) as high_price

from product;

相关文章:

  • git add 撤销_Git中的各种后悔药
  • python 爬取实时数据django显示_django+echart数据动态显示的例子
  • python获取安卓手机的屏幕_[Python]从安卓手机获取屏幕截图
  • rust编程之道 pdf_哪种编程语言又快又省电?有人对比了27种语言
  • python判断一个元素是否在列表中_python判断元素在列表中是否存在
  • python中的可视化工具_Python中常用的可视化工具 Matplotlib 简单入门
  • it项目经理带一个项目的完整_项目经理,一个完整的项目管理流程你做对了吗?...
  • dll 调用exe_盘点RUNDLL32.EXE的多种滥用方式及检测特征
  • python安装launcher要选吗_python的launcher用法知识点总结
  • 怎么用geany配置python_Geany中怎么配置python?
  • python判断按键是否按下_python怎样判断字典中的键是否存在
  • elasticsearch_Spring Boot 整合 Elasticsearch
  • java switch支持的数据类型_Java十四天零基础入门-Java关键字
  • flask框架_开发中Django和Flask框架的区别是什么?
  • 无法从命令行或调试器启动服务.必须首先_Emacs 调试秘籍之 GUD 调试器
  • ----------
  • python3.6+scrapy+mysql 爬虫实战
  • 「译」Node.js Streams 基础
  • Angular 响应式表单之下拉框
  • Javascript弹出层-初探
  • js学习笔记
  • Redis 中的布隆过滤器
  • Travix是如何部署应用程序到Kubernetes上的
  • 番外篇1:在Windows环境下安装JDK
  • 后端_ThinkPHP5
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 前端性能优化--懒加载和预加载
  • 入门到放弃node系列之Hello Word篇
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 说说动画卡顿的解决方案
  • 推荐一个React的管理后台框架
  • 网络应用优化——时延与带宽
  • 我这样减少了26.5M Java内存!
  • 消息队列系列二(IOT中消息队列的应用)
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 自制字幕遮挡器
  • 昨天1024程序员节,我故意写了个死循环~
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)丶RabbitMQ的六大核心
  • (轉)JSON.stringify 语法实例讲解
  • .gitignore文件—git忽略文件
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET开发不可不知、不可不用的辅助类(一)
  • []Telit UC864E 拨号上网
  • [C++基础]-入门知识
  • [codevs 1515]跳 【解题报告】
  • [Docker]三.Docker 部署nginx,以及映射端口,挂载数据卷
  • [flask]http请求//获取请求头信息+客户端信息
  • [HJ73 计算日期到天数转换]