04常见函数

常见函数

概念:类似于Java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名
好处:1、隐藏了实现细节 2、提高代码的重用性

调用:

SELECT 函数名(实参列表)  FROM 表;

特点:

1、叫什么(函数名)
2、干什么(函数功能)


分类

单行函数

如concat、length、ifnull等

字符函数

一、ength:用于获取参数值的字节个数

SELECT LENGTH('john');
SELECT LENGTH('张三丰hahaha')//15。一个字母一个字节,一个汉字三个字节

二、concat:用于拼接字符串

SELECT CONCAT(last_name,',',first_name)  姓名  FROM employees;

三、upper(变大写)、lower(变小写)

SELECT UPPER('john');//JOHN

四、substr、substring
注意索引从1开始

截取从指定索引处后面所有字符
SELECT SUBSTR('李莫愁爱上了陆展元',7)  out_put;//陆展元

截取从指定索引处**指定字符长度**的字符
SELECT SUBSTR('李莫愁爱上了陆展元',1,3)  out_put;//李莫愁
该例子中3为要截取字符的长度

五、instr

返回子串第一次出现的索引,如果找不到返回0.

SELECT INSTR('杨不悔爱上了殷六侠','殷六侠') AS out_put
FROM employees; 

六、trim

去除前后的所指定的字符

SELECT TRIM('a', FROM 'aaaaa张aaa翠山aaaaaaaaaaaaaaa') AS out_put;//张aaa翠山

七、lpad

用指定的字符实现左填充指定长度

SELECT LPAD('殷素素',10,'*') AS out_put;

八、rpad

用指定的字符是想右填充指定长度

SELECT RPAD ('殷素素',12,'ab') AS out_put;//殷素素ababababa

九、replace 替换

SELECT REPLACE ('周芷若周芷若周芷若张无忌在上周芷若',‘周芷若’,‘赵敏’)AS out_put;//周芷若全改为赵敏

数学函数

~round 四舍五入

SELECT ROUND(1.45);//1SELECT ROUND(1.567,2);//1.57

~ceil 向上取整:返回>=该参数的最小整数

SELECT CEIL(1.32);//2SELECT CEIL(1.00);//1

~floor向下取整:返回<=该参数的最大整数

SELECT FLOOR(-9.99)//-10

~truncate 截断
要小数点后几位

SELECT TRUNCATE(1.659999,1);//1.6

~mod取余

SELECT MOD(10,-3);//1

日期函数

~now 返回当前系统日期+时间
~curdate返回当前系统日期,不包含时间
~curtime返回当前时间,不包含日期
~可以获得指定的部分,年,月,日,小时,分钟,秒
SELECT YEAR(NOW());
SELECT MONTH(NOW());

~str_to_date 将字符通过指定的格式转换成日期
SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d')AS out_put;

~date_format:将日期转换成字符
SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS out_put;


其他函数

SELECT VERSION(); 当前数据库服务器的版本
SELECT DATABASE();当前打开的数据库
SELECT USER();当前用户
password('字符');返回该字符的密码形式
md5('字符');返回该字符的md5加密形式


流程控制函数

一、IFSELECT IF(10<5,'大','小');//小
二、case(类似Java中的switch语句)放值后面不用分号,放语句才需要。
case 要判断的字段或表达式
when 常量一 then 要显示的值1或语句1;
when 常量二 then 要显示的值2或语句2;
···
else 要显示的值n或者语句n;
end //没其他情况可以省略end

Java中
             if(条件一){ 
               语句一
              }else if(条件二){  
               语句二
              }
              ···
              else{
              语句n;
              }
mysql中
case
when 条件一  then 要显示的值1  或语句1;
when 条件二  then 要显示的值2  或语句2;
。。。
else 要显示的值n  或语句n;
end 

案例:查询员工的工资情况
如果工资>20000,显示A级别
如果工资>15000,显示B级别
如果工资>10000,显示C级别
否则,显示D级别

SELECT salary;
CASE
when salary>20000 THEN 'A'
when salary>15000 THEN 'B'
when salary>10000 THEN 'C'
else 'D'   
end AS 工资级别
FROM employees;

分组函数

功能:做统计使用,又称为统计函数、聚合函数、组函数

分类:

sum 求和、avg 平均值、max 最大值、min最小值、count计算非空个数

1、简单的使用
SELECT SUM(salary)         FROM employees;
SELECT AVG(salary)          FROM employees;
SELECT MAX(salary)          FROM employees;
SELECT MIN(salary)           FROM employees;
SELECT COUNT (salary)     FROM employees;

特点:
1、sum、avg一般用于处理数值型
max、min、count可以处理任何类型
2、是否忽略null值
以上分组函数都忽略null值
3、可以和distinct搭配 去重

SELECT SUM(DISTINCT salary)        FROM employees;//去重求和
SELECT COUNT(DISTINCT salary)    FROM employees;//计算工资的种类

分组查询

语法:
 select 分组函数,列(要求出现在group by的后面) 
from 表 
[where 筛选条件] 
group by 分组的列表 
[order by 子句] 
注意 :   查询列表必须特殊,要求是分组函数和group by后出现的字段 

特点    一、分组查询中的筛选条件分为两类   
                 数据源                  位置                 关键字    
分组前筛选  原始表                  group by前        where    
分组后筛选  分组后的结果集      group by后        having      

 1、分组函数的条件肯定是放在having子句中   
2、能用分组前筛选的,就优先考虑使用分组前筛选   
二、group by 子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),表达式或函数   
三、也可以添加排序(排序放在整个分组查询的最后

简单的分组查询
例子:查询每个工种的最高工资

SELECT MAX(salary),job_id
FROM employees
GROUP BY job_id;

例子:查询每个位置上的部门个数

SELECT COUNT(*),location_id
FROM departments
GROUP BY location_id;

添加筛选条件
例子:查询邮件中包含a字符的,每个部门的平均工资

SELECT AVG(salary),department_id
FROM employees
WHERE email like'%a%'
GROUP BY department_id;

例子:查询有奖金的每个领导手下员工的最高工资

SELECT MAX(salary),manager_id
FROM employees
WHERE commission_pct is not null
GROUP  BY manager_id;

添加复杂筛选条件

例子:查询哪个部门的员工个数>2

SELECT COUNT(*),department_id
FROM employees
 GROUP BY department_id
HAVING COUNT(*)>2;

例子:查询每个工种有奖金的员工的最高工资大于12000的工种编号和最高工资

SELECT  MAX(salary),job_id
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY job_id
HAVING MAX(salary)>12000;

例子:查询领导编号>102的每个领导手下的最低工资>5000的领导编号是哪个,以及其最低工资是多少

SELECT min(salary),manager_id
FROM employees
WHERE manager_id>102
ORDER BY manager_id
HAVING min(salary)>5000;

按表达式或函数分组

例子:按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些

SELECT COUNT(*),LENGTH(last_name)
FROM employees
ORDER BY LENGTH(last_name)
HAVING COUNT(*)>5;

按多个字段分组

例子:查询每个部门每个工种的员工平均工资

SELECT AVG(salary),department_id,job_id
FROM employees
ORDER BY department_id,job_id;

添加排序

例子:查询每个部门每个工种的员工平均工资,并且按平均工资的高低显示

SELECT AVG(salary),department_id,job_id
FROM employees
ORDER BY department_id,job_id
ORDER BY AVG(salary) DESC;
posted @ 2021-10-29 18:28  P^Z  阅读(84)  评论(0)    收藏  举报