SQL 基础知识梳理(六)-  函数、谓词、CASE 表达式

目录

函数

谓词

CASE 表达式

一、函数

1.函数:输入某一值得到相应输出结果的功能,输入值称为“参数”,输出值称为“返回值”。

2.函数的种类:

(1)算术函数 - 数值计算

(2)字符串函数 - 字符串操作

(3)日期函数 - 日期操作

(4)转换函数 - 转换数据类型

(5)聚合函数 - 数据聚合

3.算术函数(加、减、乘、除):+、-、*、/

【备注】数据类型 NUMBERIC(全体位数,小数位数)可以指定数值的大小。

CREATE TABLESampleMath

(

m NUMERIC(10, 3) ,

nINTEGER,

pINTEGER);BEGIN TRAN;INSERT INTOdbo.SampleMath

( m, n, p )VALUES ( 500, --m - numeric

0, --n - integer

NULL --p - integer

);INSERT INTOdbo.SampleMath

( m, n, p )VALUES ( -180, --m - numeric

0, --n - integer

NULL --p - integer

);INSERT INTOdbo.SampleMath

( m, n, p )VALUES ( NULL, --m - numeric

NULL, --n - integer

NULL --p - integer

);INSERT INTOdbo.SampleMath

( m, n, p )VALUES ( NULL, --m - numeric

7, --n - integer

3 --p - integer

);INSERT INTOdbo.SampleMath

( m, n, p )VALUES ( NULL, --m - numeric

5, --n - integer

2 --p - integer

);INSERT INTOdbo.SampleMath

( m, n, p )VALUES ( NULL, --m - numeric

4, --n - integer

NULL --p - integer

);INSERT INTOdbo.SampleMath

( m, n, p )VALUES ( 8, --m - numeric

NULL, --n - integer

3 --p - integer

);INSERT INTOdbo.SampleMath

( m, n, p )VALUES ( 2.27, --m - numeric

1, --n - integer

NULL --p - integer

);INSERT INTOdbo.SampleMath

( m, n, p )VALUES ( 5.555, --m - numeric

2, --n - integer

NULL --p - integer

);INSERT INTOdbo.SampleMath

( m, n, p )VALUES ( NULL, --m - numeric

1, --n - integer

NULL --p - integer

);INSERT INTOdbo.SampleMath

( m, n, p )VALUES ( 8.76, --m - numeric

NULL, --n - integer

NULL --p - integer

);COMMIT;

初始化数据

(1)ABS - 绝对值:不考虑数值的符号,表示一个数到原点距离的数值。

绝对值的计算方法:0 和正数的绝对值就是其本身,负数的绝对值就是去掉符号后的结果。

--语法: ABS(数值)

图:第 2 行:-180 的绝对值为 180

(2)MOD - 取余、求余

--语法: MOD(被除数,除数)

【备注】Oracle、DB2、PostgreSQL、MySQL 支持该函数,而 SQL Server 不支持该函数,所以这里用“%”代替。

(3)ROUND - 四舍五入

如果指定四舍五入的位数为 1,那么会对小数点第 2 位进行四舍五入;如果指定位数为 2,那么就会对第 3 位进行四舍五入。

4.字符串函数

CREATE TABLESampleStr

(

str1VARCHAR(40),

str2VARCHAR(40),

str3VARCHAR(40)

)BEGIN TRAN;INSERT INTOdbo.SampleStr

( str1, str2, str3 )VALUES ( 'opx', --str1 - varchar(40)

'rt', --str2 - varchar(40)

NULL --str3 - varchar(40)

);INSERT INTOdbo.SampleStr

( str1, str2, str3 )VALUES ( 'abc', --str1 - varchar(40)

'def', --str2 - varchar(40)

NULL --str3 - varchar(40)

);INSERT INTOdbo.SampleStr

( str1, str2, str3 )VALUES ( 'aaa', --str1 - varchar(40)

NULL, --str2 - varchar(40)

NULL --str3 - varchar(40)

);INSERT INTOdbo.SampleStr

( str1, str2, str3 )VALUES ( 'aaa', --str1 - varchar(40)

NULL, --str2 - varchar(40)

NULL --str3 - varchar(40)

);INSERT INTOdbo.SampleStr

( str1, str2, str3 )VALUES ( NULL, --str1 - varchar(40)

'xyz', --str2 - varchar(40)

NULL --str3 - varchar(40)

);INSERT INTOdbo.SampleStr

( str1, str2, str3 )VALUES ( '@!#$%', --str1 - varchar(40)

NULL, --str2 - varchar(40)

NULL --str3 - varchar(40)

);INSERT INTOdbo.SampleStr

( str1, str2, str3 )VALUES ( 'ABC', --str1 - varchar(40)

NULL, --str2 - varchar(40)

NULL --str3 - varchar(40)

);INSERT INTOdbo.SampleStr

( str1, str2, str3 )VALUES ( 'aBC', --str1 - varchar(40)

NULL, --str2 - varchar(40)

NULL --str3 - varchar(40)

);INSERT INTOdbo.SampleStr

( str1, str2, str3 )VALUES ( 'abc太郎', --str1 - varchar(40)

'abc', --str2 - varchar(40)

'ABC' --str3 - varchar(40)

);INSERT INTOdbo.SampleStr

( str1, str2, str3 )VALUES ( 'abcdefabc', --str1 - varchar(40)

'abc', --str2 - varchar(40)

'ABC' --str3 - varchar(40)

);INSERT INTOdbo.SampleStr

( str1, str2, str3 )VALUES ( 'micmic', --str1 - varchar(40)

'i', --str2 - varchar(40)

'T' --str3 - varchar(40)

);COMMIT;

初始化数据

(1)拼接:+

(2)LEN - 字符串长度

--语法: LEN(字符串)

(3)LOWER - 小写转换

--语法:LOWER(字符串)

(4)REPLACE - 字符串的替换

--语法:REPLACE(对象字符串, 替换前的字符串, 替换后的字符串)

(5)SUBSTRING - 字符串的截取

--语法:SUBSTRING(对象字符串,截取的起始位置,截取的字符数)

(6)UPPER - 大写转换

--语法:UPPER(字符串)

5.日期函数

(1)获取当前日期和时间:

(2)DATEPART - 截取日期元素

6.转换函数

(1)CAST - 类型转换

(2)COALESCE - 将 NULL 转换为其他值

作用:返回可变参数中左侧开始的第一个不是 NULL 的值(参数是可变的,即可以个数是无限的)。

--语法:COALESCE(数据1, 数据2, 数据3 ...)

二、谓词

1.谓词:返回值为真值(TRUE/FALSE/UNKNOWN)的函数。

2.LIKE - 字符串的部分一致查询

【备注】= 运算符:字符串完全一致。

CREATE TABLESampleLike

(

strcoolVARCHAR(6) NOT NULL,PRIMARY KEY(strcool)

)BEGIN TRAN;INSERT INTOdbo.SampleLike

( strcool )VALUES ( 'abcddd' --strcool - varchar(6)

);INSERT INTOdbo.SampleLike

( strcool )VALUES ( 'dddabc' --strcool - varchar(6)

);INSERT INTOdbo.SampleLike

( strcool )VALUES ( 'abdddc' --strcool - varchar(6)

);INSERT INTOdbo.SampleLike

( strcool )VALUES ( 'ddabc' --strcool - varchar(6)

)INSERT INTOdbo.SampleLike

( strcool )VALUES ( 'abddc' --strcool - varchar(6)

)COMMIT;

初始化数据

%:0 字符以上的任意字符串。

_:任意 1 个字符。

图:前部分一致

图:中间一致

图:后部分一致

后面 ddd 是 3 个字符,所以“abc__(2个 _)”不满足条件。

3.BETWEEN - 范围查询

BETWEEN 会在结果中包含临界值(100 和 1000)。如果不想包含临界值可以使用 < 和 >。

4.IS NULL、IS NOT NULL - 判断是否为 NULL

为了选取部分值为 NULL 的列的数据,不能使用 =,只能使用 IS NULL。

取反(不为空的数据),请使用 IS NOT NULL。

5.IN - OR 的简便用法

用 IN 替换上述语句:

否定形式 NOT IN:

【备注】IN 和 NOT IN 是无法选取 NULL 数据的。

6.使用子查询作为 IN 谓词的参数

IN 和 NOT IN 谓词具有其它谓词没有的用法,它的参数可以是子查询。

--DDL:创建表

CREATE TABLETenpoShohin

(tenpo_idCHAR(4) NOT NULL,

tenpo_meiVARCHAR(200) NOT NULL,

shohin_idCHAR(4) NOT NULL,

suryoINTEGER NOT NULL,PRIMARY KEY(tenpo_id, shohin_id));--DML:插入数据

INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000A', '东京', '0001', 30);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000A', '东京', '0002', 50);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000A', '东京', '0003', 15);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000B', '名古屋', '0002', 30);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000B', '名古屋', '0003', 120);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000B', '名古屋', '0004', 20);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000B', '名古屋', '0006', 10);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000B', '名古屋', '0007', 40);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000C', '大阪', '0003', 20);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000C', '大阪', '0004', 50);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000C', '大阪', '0006', 90);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000C', '大阪', '0007', 70);INSERT INTO TenpoShohin (tenpo_id, tenpo_mei, shohin_id, suryo) VALUES ('000D', '福冈', '0001', 100);

测试数据

7.EXIST

很多时候基本上可以使用 IN 或 NOT IN 来代替该谓词。

作用:判断是否存在满足某种条件的记录。

NOT EXIST 与 EXIST 相反,不存在:

三、CASE 表达式

1.CASE 表达式:(条件)分歧。

2.语法

--语法--CASEWHEN THEN --WHEN THEN --...--ELSE --END

判断表达式类似“键 = 值”的形式,返回值为真值(TRUE/FALSE/UNKNOW)的表达式。如果结果为真,就会返回 THEN 子句中的表达式;如果不为真,就跳转到下一条 WHEN 子句的判断中;如果到最后的 WHEN 子句都不为真,就执行最后一条 ELSE 的表达式。

下面是简化版的 CASE 表达式:

3.行转列

备注

这里采用 MS SQL Server 进行验证,不保证所有的 DBMS 执行结果正确。

《SQL 基础知识梳理》系列

【博主】反骨仔

【参考】《SQL ゼロからはじめるデータベース操作》

mysql 算子 谓词_[SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式相关推荐

  1. SQL数据库基础知识-巩固篇一

    SQL数据库基础知识-巩固篇<一>... 首先展示两款我个人很喜欢的数据库-专用于平时个人SQL技术的练习<特点:体积小,好安装和好卸载,功能完全够用了> MySQL-57 D ...

  2. SQL数据库基础知识巩固

    SQL数据库基础知识 数据库,又称"电子化的文件柜",是"按照数据结构来组织.存储和管理数据的仓库",是一个长期存储在计算机内的.有组织的.可共享的.统一管理的 ...

  3. SQL注入基础知识总结

    SQL注入-基础知识总结 1.注释符 1.1.Mysql中注释符有三种 1.2.总结 2.information_schema库 2.1.了解information_schema库 2.2.常用注入语 ...

  4. SQL入门基础知识详解

    ////// 导读:科学技术的快速发展正在改变我们的社会,也在不经意间改变着未来人们的职业规划.据媒体预测,数据分析将是未来最重要的工作技能之一.或许不久的将来,一家企业中80%的岗位,都需要数据分析 ...

  5. mysql psm 编程_【SQL】持久性存储模块PSM

    1. 创建PSM函数和过程 创建过程: CREATE PROCEDURE 名字 (参数) 局部声明: 过程体: 创建函数: CREATE FUNCTION 名字 (参数) RETURNS 类型 局部声 ...

  6. 数据分析必备——SQL入门基础知识

    数据说·梦想季 一直很喜欢一句话:山鸟与鱼不同路,从此山水不相逢.意思就是如果你现在不够优秀,即使遇见了,也不配拥有-...努力是唯一的方向! // 导读:科学技术的快速发展正在改变我们的社会,也在不 ...

  7. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  8. SQL Server基础知识概念要点详细讲解

    SQL Server基础知识概念要点详细讲解 目录 基础概念 1.网状模型数据库 2.层次模型数据库 3.关系模型数据库 知识点实例总结 基础概念 SQL语言中,between and表示包括两边参数 ...

  9. python语法基础知识总结-Python基础知识梳理 - 第01部分

    在开始Python基础知识梳理前, 先安装下环境. 以下过程是在Linux操作系统, root用户下进行的, 主要安装了2.7版本的python, 和pip, ipython, virtualenv等 ...

最新文章

  1. Python 在定义函数时 为什么默认参数不能放在必选参数前面
  2. LeetCode 566. Reshape the Matrix
  3. C#LeetCode刷题之#88-合并两个有序数组(Merge Sorted Array)
  4. Office 2007 小技巧
  5. SAP License:WBS结果分析
  6. 详述 Discord Desktop app RCE 挖洞经过,最后得$5000 + $300 (含 PoC 视频)
  7. 【2】测试用例设计方法-场景法
  8. linux之debian自动登录
  9. Web核心技术-服务器端技术
  10. Win10精确式触摸板安装
  11. 将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中
  12. 名侦探柯南之零的执行人
  13. 移动硬盘无法读取,也无法显示?看高手是怎么恢复的
  14. java版怎么安装mod_java – 如何在Mac OS X上安装mod_jk
  15. 自强脱贫•助残共享 2019第二十九个全国助残日在深圳举办
  16. Android-WebView加载网页
  17. C语言入门题库——计算圆面积和周长
  18. 吉大 《职业生涯设计》大作业
  19. 穷爸爸与富爸爸读后感(3)
  20. python模拟生成真实的电话号码 / 姓名

热门文章

  1. PSP 战神 奥林匹斯之链(God of War: Chains of Olympus) 试玩版 下载地址
  2. 登录mysql报错2059_navicat连接mysql8.0+版本报错2059
  3. python中的try......except......
  4. 媒体查询media的3种引入方式
  5. 接口幂等性问题解决方案
  6. mysql 全连接查询合并字段
  7. 使用JavaScript解答2018第九届蓝桥杯C/C++省赛A组试题
  8. ROS-Rtabmap:linux shell运行多个shell(运行多个程序)
  9. Caffe RPN:把RPN网络layer添加到caffe基础结构中
  10. Facebook 开源 Skip,面向对象+函数式编程语言