6、SQL函数

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 6、SQL函数

今天继续sql函数,预计还有1周多2周完成sql部分的学习。

1. 字符串函数

一、char_length(str)

计算参数str中有多少个字符,str可以是具体的一个字符串,也可以是表中的列

查看字符串“中国人”有几个字

mysql> select char_length(‘中国人’);

学生表中姓名为三个字的学生有哪些?

mysql> select sname,char_length(sname) from stu where char_length(sname)=3;

二、concat(str1,str2,……)

把参数str1和str2拼接成一个字符串

把‘我是’和‘中国人’拼接成一句话

mysql> select concat(‘我是’,‘中国人’);

学生表打印已分班的学生姓名和班级,以xxx是x班 的形式打印结果

mysql> select concat(sname,‘是’,cno,‘班’) from stu where cno is not null;

三、substring(str,pos,len)

把参数str字符串从第pos位起,截取len位

把‘我是中国人’字符串从第3位起截取3位字符

mysql> select substring(‘我是中国人’,3,3);

二班的同学都有什么姓氏?

mysql> select sname,substring(sname,1,1) from stu where cno=2;

2.日期函数

一、year(date1)、month(date1)

year(date1)

获取日期date1的年份

month(date1)

获取日期date1的月份

学生表中哪些同学是1990年出生的?

mysql> select sname,birth,year(birth) from stu where year(birth)=1990;

学生表中哪些同学是8月出生的?

mysql> select sname,birth,year(birth),month(birth) from stu where month(birth)=8;

二、其他日期函数

curdate()

获取当前日期

curtime()

获取当前时间

now()

获取当前的日期和时间

datediff(date1,date2)

返回date1和date2两个日期间隔的天数

计算2018年6月1日和2018年情人节之间间隔的天数

mysql> select datediff(‘2018-6-1’,‘2018-2-14’);

计算学生表中学生的年龄,显示姓名,生日,年龄(保留2位小数),只显示小于20岁的同学

mysql> select sname,birth,round(datediff(curdate(),birth)/365,2) 年龄 from stu where round(datediff(curdate(),birth)/365,2)<20;

3. 条件判断函数

一、if(expr,v1,v2)

如果表达式expr成立,返回v1值;否则,返回v2值

如果学生高考分大于等于520,其为统招生,否则其为委培生,从学生表中查找,显示姓名,考分,类型(统招或委培)

mysql> select sname,score,if(score>=520,‘统招’,‘委培’) 类型 from stu;

4. CASE运算符

一、CASE运算符为SQL语句增加了多重条件判断比if函数更加灵活

case when expr1 then v1 [when expr2  v2 then] …… else vn end

如果考分700以上,优秀,600以上,良好,520以上,中等,否则,较差,按照这个原则列出学生表中的学生,显示姓名,考分,和评判等级

mysql> select sname,score,(case when score>=700 then ‘优秀’ when score>=600 then ‘良好’ when score>=520 then ‘中等’ else ‘较差’ end) 等级 from stu;

5、空值处理函数

一、空值问题:

使用in时,值列表中有null值,不会返回null相关结果

mysql> select * from stu where cno in (2,null);

使用not in列表中有空值时,无查询结果返回

mysql> select * from stu where cno not in (2,null);

有时空值会造成意想不到的问题,需要用空值函数先对空值进行处理

二、常用空值处理函数

ifnull(v1,v2) – 如果v1为空返回v2,否则返回v1

isnull(expr) – 如果表达式为null空值,返回1,表达式非空则返回0

6. 聚合函数

一、聚合函数

max(列名)

统计出列中所有行中的最大值,列的数据类型可以是数值、字符、日期型

min(列名)

统计出列中所有行中的最小值,列的数据类型可以是数值、字符、日期型

sum(列名)

统计出列中所有行中数值的总和,列的数据类型不能是字符型

avg(列名)

统计出列中所有行中数值的平均值,列的数据类型不能是字符型

count(列名)

统计出列中所有行的数量,列中的如果有空值不会被统计计数

二、示例

找出学生中最高的身高、最轻的体重、平均高考分数、学生的总数

mysql> select max(height),min(weight),sum(score)/count(),avg(score),count(),count(sno),count(cno) from stu;

count(cno) =17 因为有3个学生班号是空值,空值不会被统计计数

count(*)统计的是所有行;count(sno)=20因为sno列中无空值

用一个查询语句找出学生中最低的身高、再显示所有人的姓名

mysql> select min(height),sname from stu;

报错语法错误了:min(height)只有1个值1行,sname有20行,1行对接20行是个矛盾的事情,因此不能这么写。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL Oracle 关系型数据库
SQL优化-使用联合索引和函数索引
在一次例行巡检中,发现一条使用 `to_char` 函数将日期转换为字符串的 SQL 语句 CPU 利用率很高。为了优化该语句,首先分析了 where 条件中各列的选择性,并创建了不同类型的索引,包括普通索引、函数索引和虚拟列索引。通过对比不同索引的执行计划,最终确定了使用复合索引(包含函数表达式)能够显著降低查询成本,提高执行效率。
|
2月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
2月前
|
SQL 数据库 索引
SQL中COUNT函数结合条件使用的技巧与方法
在SQL查询中,COUNT函数是一个非常常用的聚合函数,用于计算表中满足特定条件的记录数
|
2月前
|
SQL 关系型数据库 MySQL
SQL日期函数
SQL日期函数
|
4月前
|
SQL 数据库
|
4月前
|
SQL 数据采集 数据处理
如何在 SQL Server 中使用 LEN 函数
【8月更文挑战第9天】
200 1
如何在 SQL Server 中使用 LEN 函数
|
3月前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
4月前
|
SQL 数据处理 数据库
SQL中的函数有哪些类型
【8月更文挑战第20天】SQL中的函数有哪些类型
54 1
|
4月前
|
SQL 监控 索引
如何在 SQL Server 中使用 `PATINDEX` 函数
【8月更文挑战第8天】
484 9
|
4月前
|
SQL 数据处理 数据库