DQL---常用函数

DQL—常用函数

  1. 常用函数
  • 调用方法: select 函数名(实参列表) [from 表名];

  • 特点:注意函数名与函数功能,与普通语言无太大区别

  • 分类:

    1. 单行函数:
      字符函数: length,concat,upper\lower,substr\instr,trim,lpad\rpad,replace
      数学函数: round,ceil,floor,truncate,mod
      日期函数: now,curtime,curdate,str_to_date,date_format
      其他函数: version,database,user
      流程控制函数: if,case(两种)

    2. 分组函数:用来统计一组值的结果,又称聚合函数/统计函数/组函数
      求和函数sum,平均值函数avg, 最大最小值max/min, 计算个数函数count
      特点:

      • sum,avg 函数参数为数值型。max,min,count函数参数为数值型和字符型

      • 以上函数再计算时忽略null值

      • 都可以与distinct搭配使用

      • count()/count(1)可以用来统计表格行数,一般使用count()

      • 和分组函数一同查询的字段有限制,一般为group-by的语句

------------------------------------单行函数----------------------------------------
## 字符函数
# length 获取参数值字节数
SELECT LENGTH('john');
SELECT LENGTH('杰兰特geraint');#utf8下汉字3个字节,字母一个字节;
# concat 拼接字符串
SELECT CONCAT(last_name,'_',first_name) AS 姓名 FROM employees;
# upper\lower 大小写转换
SELECT UPPER('john');
SELECT CONCAT(UPPER(first_name),'_',LOWER(last_name)) AS 姓名 FROM employees;
# substr=substring 截取字符串
###字符索引从1开始
SELECT SUBSTR('geraint',7) AS out_put;
SELECT SUBSTR('geraint',1,3) AS out_put;
SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) AS 姓名 FROM employees;
# instr 返回字串第一次出现的索引
SELECT INSTR('geraint','ain') AS out_put;
# trim 去除前后空格
SELECT LENGTH(TRIM('    geraint       ')) AS out_put;
SELECT TRIM('a' FROM 'aaaaageraintaaaaa') AS out_put;
# lpad、rpad 左、右填充指定长度
SELECT LPAD('geraint',10,'*') AS out_put;
SELECT RPAD('geraint',10,'*') AS out_put;
# replace 替换
SELECT REPLACE ('gergergeraint','ger','xin');

## 数学函数
# round四舍五入
SELECT ROUND(-1.55);
SELECT ROUND(1.5657,2);
# ceil 向上取整
SELECT CEIL(1.002);
# floor 向下取整
SELECT FLOOR(9.87);
# truncate 截断
SELECT TRUNCATE(1.6997,2);
# mod 取余
/*
mod(a,b): a-a/b*b
*/
SELECT MOD(10,3);

## 日期函数
# now 返回当前系统日期时间
SELECT NOW();
# curdate 返回当前日期
SELECT CURDATE();
# curtime 返回当前时间
SELECT CURTIME();
# 获取指定部分(year,mouth,day,hour,minute,second)
SELECT MONTH(NOW()) AS 月份;
SELECT MONTHNAME(NOW()) AS 月份;
# str_to_date 将字符转换为日期
SELECT STR_TO_DATE('1997-3-8','%Y-%c-%d') AS out_put;
SELECT * FROM employees WHERE hiredate = STR_TO_DATE('4-3 1992','%c-%d %Y');
# date_format 将日期转换为字符
SELECT DATE_FORMAT(NOW(),'%Y 年 %m 月 %d 日') AS out_put;

## 其他函数
SELECT VERSION();
SELECT DATABASE();
SELECT USER();

## 流程控制函数
# if 函数
SELECT IF(10<5,'小','大') AS out_put;
SELECT last_name,commission_pct,IF(commission_pct IS NULL, '没奖金','有奖金') AS 备注 FROM employees;
# case函数一:switch case效果
/*
case 要判断的字段或者表达式
when 常量1 then  要显示的值1或者语句1;
when 常量2 then  要显示的值2或者语句2;
...
else 要显示的值n或者语句n;
end
*/
SELECT salary 原始工资,department_id, 
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END
AS 新工资
FROM employees;

# case 函数使用二: 类似于多种if 
/*
case 
when 条件1 then 要显示的值1
when 条件2 then 要显示的值2
when 条件3 then 要显示的值3
...
else 要显示的值n
end
*/
SELECT salary,
CASE
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
ELSE 'D'
END
AS 工资级别
FROM employees;
------------------------------------分组函数----------------------------------------
# 简单使用
SELECT SUM(salary) FROM employees;
SELECT SUM(salary),AVG(salary),MAX(salary),MIN(salary),COUNT(salary) FROM employees;
SELECT ROUND(AVG(salary),2) FROM employees;

# 参数支持类型
SELECT SUM(last_name),AVG(last_name) FROM employees;
SELECT MAX(last_name),COUNT(last_name) FROM employees;

# 是否忽略null
SELECT SUM(commission_pct),AVG(commission_pct) FROM employees;#忽略null
SELECT MAX(commission_pct),MIN(commission_pct) FROM employees;
SELECT COUNT(commission_pct) FROM employees;

# 与distinct搭配
SELECT SUM(DISTINCT salary),SUM(salary) FROM employees;
SELECT COUNT(DISTINCT salary),COUNT(salary) FROM employees;

# count函数详细介绍
SELECT COUNT(salary) FROM employees;
SELECT COUNT(*) FROM employees; #统计行数.效率最高
SELECT COUNT(1) FROM employees; 

# 和分组函数一同查询的字段有限制,一般为group-by的语句
SELECT AVG(salary),job_id FROM employees;# 无意义
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值