欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL的简单函数(极客时间)

程序员文章站 2022-10-18 10:47:01
SQL的函数 函数就是将我们经常使用的代码封装起来, 需要的时候直接调用, 提高代码效率和可维护性. SQL函数一般是在数据上执行, 可以方便地转换和处理数据. 常用的SQL函数 SQL提供了一些常用的内置函数, 也可以自定义, 内置的函数分为四类: 算数函数 字符串函数 日期函数 转换函数 算数函 ......

sql的函数

函数就是将我们经常使用的代码封装起来, 需要的时候直接调用, 提高代码效率和可维护性.

sql函数一般是在数据上执行, 可以方便地转换和处理数据.

常用的sql函数

sql提供了一些常用的内置函数, 也可以自定义, 内置的函数分为四类:

  • 算数函数
  • 字符串函数
  • 日期函数
  • 转换函数

算数函数

算数函数, 其实就是对数据类型的字段进行算术运算, 常用的如下:
SQL的简单函数(极客时间)

select abs(-2);  // 2
select mod(101, 3); // 2
select round(37.25, 1); // 37.3

字符串函数

常用的字符串函数如下:
SQL的简单函数(极客时间)

select concat('abc', 123); // abc123
select length('你好'); // 6
select char_length('你好'); // 2
select lower('abc'); // abc
select upper('abc'); // abc
select replace('fabcd', 'abc', 123); // f123d
select substring('fabcd', 1,3); // fab

日期函数

常用函数如下:
SQL的简单函数(极客时间)

select current_date;  // 获取当前日期
select current_time;  // 获取当前时间
select current_timestamp;  // 获取当前日期 + 时间(时间戳)
select extract(year from '2019-07-07');  // 获取日期年
select extract(month from '2019-07-07');  // 获取日期月
select extract(day from '2019-07-07');  // 获取日期天
select date('2019-07-07 09:54:00'); // 获取日期
select time('2019-07-07 09:54:00'); // 获取时间
select timestamp('2019-07-07 09:54:00');  // 获取时间戳

以后日期类型的比较实用date()函数来进行. 这点很重要.

转换函数

转换函数的作用是用来转换数据类型的
SQL的简单函数(极客时间)

select cast(123.123 as int);  // 报错, 原数值有小数, 不会四舍五入, 转换出错
select cast(123.123 as decimal(8,2));  // 8表示整数+小数总共8位,2表示小数位数有两位
select coalesce(null, 1, 2);  // 第一个部位null的数是1

聚集函数

聚集函数是对一组数据进行汇总的函数, 输入一组数据, 输出的是单个值. sql中的聚集函数一共包括5个
SQL的简单函数(极客时间)

select count(*) from heros where hp_max > 6000; // 查询最大生命值大于6000的英雄数量
select max(hp_max) from heros where role_main = '射手' or role_assist = '射手'; // 查询主要定位和次要定位都是射手的英雄的最大生命值
select count(*), avg(hp_max), max(mp_max), min(attack_max), sum(defense_max) from heros where role_main = '射手' or role_assist = '射手';  // 一次使用多个聚合函数
select round(avg(distinct hp_max), 2) from heros; // 计算最大生命的平均值,并保留小数点后两位

注意max, min, avg函数会自动忽略值为null的数据行.

数据的分组和统计

对数据进行分组需要使用到group by子句:

select count(*), role_main from heros group by role_main; // 按照英雄的主要定位分组, 并统计每组的英雄数量
select count(*) as num, role_main, role_assist from heros group by role_main, role_assist order by num desc; // 多个字段进行分组, 并按照数量进行降序排序

having过滤分组

使用where 条件可以进行数据的过滤, 但是在分组的时候, 过滤并不能使用where, 而是需要使用having, 简单的说where用于数据行, having用于分组.

select count(*) as num, role_main, role_assist from heros group by role_main, role_assist having num > 5 order by num desc; // 按照主要定位和次要定位进行分组, 查询数量大于5的分组并降序排序
select count(*) as num, role_main, role_assist from heros where hp_max > 6000 group by role_main, role_assist having num > 5 order by num desc; // where和having同时使用, where先排除数据行, 之后分组过滤

select的查询语句中, 关键字的顺序是不能颠倒的:

select.....from......where......group by......having......order by......limit......

SQL的简单函数(极客时间)