mysql常见函数语法

字符函数语法

# 字符函数
#length 获取字节个数
SELECT LENGTH('john')
#一个汉字占三个字节
SELECT LENGTH('张三丰john')

#查看字符集
SHOW VARIABLES LIKE '%char%';

#concat 拼接字符串
SELECT CONCAT(last_name,'_',first_name) name FROM employees

#upper,lower 变大写 小写 
SELECT UPPER('abc');

SELECT LOWER('ABVT')

#将姓变大写 名变小写 然后拼接
SELECT CONCAT(UPPER(first_name),'_',LOWER(last_name))  姓名 FROM employees;

#SUBSTR(str FROM pos FOR len),SUBSTRING(str,pos) 截取字符串
# len 指定的长度 
# pos 下标
#索引从1开始 返回下标之后得数据 
SELECT SUBSTR('李莫愁爱上陆展元',6) romantic
SELECT SUBSTRING('李莫愁爱上陆展元',4,2) romantic

#INSTR(str,substr)
#返回 substr 在str的第一次出现的索引 
SELECT INSTR('杨不悔爱上殷六侠','殷六侠') put;

# TRIM([remstr FROM] str) 去除前后空格
SELECT TRIM(' rty ')
# 去掉前后的字母 FROM 
SELECT TRIM('a'FROM 'aaaaaaaaa张翠aaaaaaaaa山aaaaaaa'); 

# LPAD(str,len,padstr) 用于指定字符实现左填充
# len 指的是str长度  
#padstr 填充字符
SELECT LPAD('小龙女',2,'*')  成亲;

# RPAD(str,len,padstr) 用于指定字符实现右填充
# len 指的是str长度  
#padstr 填充字符
SELECT RPAD('小龙女',12,'*')  成亲;

#替换 REPLACE(str,from_str,to_str)
# from_str来自str
# to_str 指定要替换的字符串
SELECT REPLACE('张无忌爱上周芷若','周芷若','张敏') 屠龙

数学函数语法

# 数学函数
# ROUND(X,D) 四舍五入
# D 指的是小数点后保留的位数
SELECT ROUND(1.65) num
SELECT ROUND(1.34888,2) num

# ceil 向上取整 返回>=该参数最小整数
SELECT CEIL(1.3) 
SELECT CEIL(-1.0003)  #-1

# FLOOR( ) 向下取整 返回<=该参数的最大整数
SELECT FLOOR(-1.477) -2 

# TRUNCATE(X,D) 截断
# D 小数点后保留的位数
SELECT TRUNCATE(2.678,2)

# MOD 取余 被除数为正则为正
SELECT MOD(10,4) 取余;

日期函数

# 日期函数
#NOW() 当前日期时间
SELECT NOW();

# CURDATE()  返回当前系统日期 不包含时间 
SELECT CURDATE()

# CURTIME() 返回当前时间 不包含日期
SELECT CURTIME()

#获取指定的部分 年,月 日 小时 分钟 秒
SELECT YEAR(NOW()) 年;

SELECT MONTH(now()) 月;

SELECT MONTHNAME(now()) 月;

SELECT DAY(now()) 日; 

SELECT HOUR(now()) 小时;

SELECT MINUTE(Now()) 分钟;

SELECT SECOND(NOW()) 秒;

# 年
SELECT DISTINCT YEAR(hiredate) FROM employees;

# %Y 四位年份 
# %y 2位的年份 
# %m 月份(01,02,03..11,12) 
# %c 月份(1,2,3..11,12)
# %d 日(01,02)
# %H 小时(24小时制)
# %h 小时(12小时)
# %i 分钟(00,01,...59)
# %s  秒 (00,01,..59)

#STR_TO_DATE(str,format) 将日期格式字符转换为指定的格式日期
# m月份 d 日 Y 年
SELECT STR_TO_DATE('9-13-1999','%m-%d-%Y')
SELECT STR_TO_DATE('1998-2-25','%Y-%c-%d') put

#查询入职日期为1998-03-03的员工信息
# 默认日期格式 1998-03-03
SELECT * FROM  employees WHERE hiredate <=> STR_TO_DATE('1998-03-03','%Y-%m-%d')

# 将日期转换成字符
SELECT DATE_FORMAT('2018/09/08','%Y年%m月%d日')

SELECT DATE_FORMAT(NOW(),'%y年%c月%d日')

#查询有奖金的员工名和入职日期
SELECT last_name ,DATE_FORMAT(hiredate,'%y年%c月%d日') 入职 FROM employees 

其他函数

# 其他函数
#查询版本号
SELECT VERSION();
# 查询数据库
SELECT DATABASE();

# 查询当前用户
SELECT USER();

流程控制函数

五:流程控制函数 
#1.if函数 : IF ...ELSE 的效果 判断 相当于三元运算符 
SELECT IF (10>6,'大','小');

SELECT last_name ,commission_pct,IF(commission_pct is null ,'哈哈哈 没奖金','哈哈哈哈 有奖金') resut FROM employees;

# case函数的使用一: switch case 的效果
/*
java 中 
  switch(变量或表达式){
				CASE 常量1:语句1;break;
				...
				DEFAULT
	}
	
mysql中
判断等值判断
case 要判断的字段或表达式
when 常量1 then 要显示的值或语句1;
when 常量2 then 要显示的值或语句2;
...
else 要显示的值n或语句n
END
*
*/
/**
案例 查询员工的工资,要求
部门号=30 ,显示的工资为1.1倍
部门号=40 ,显示的工资为1.2倍
部门号=50 ,显示的工资为1.3倍
其他部门,显示的工资为原工资
*/
# 是值的话就不需要放分号了 
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 sdou
FROM
	employees;

# 3.case 函数的使用2 类似于 多重if
/**
java中 if(条件1){
			语句1
}ELSE IF(条件2){
		语句2
}ELSE{
}

mysql中

case 
WHEN 条件1 then 要显示的值1或语句1
WHEN 条件2 then 要显示的值2或语句2
...
ELSE 要显示的值n或语句n
END
*/
#案例 :查询员工的工资情况
#如果工资>20000, 显示A级别
#如果工资>15000, 显示B级别
#如果工资>10000, 显示C级别
#则显示D级别

SELECT salary ,department_id ,
CASE 
	WHEN salary>20000 THEN 'A'
	WHEN salary>15000 THEN 'B'
	WHEN salary>10000 THEN 'C'
	ELSE
		'D'
END as sa
FROM employees;

分组函数

# 分组函数 用于统计 聚合函数 组函数  传入多个值返回一个值
# 分类 sum 求和, avg 平均值, max 最大值, min 最小值, count 计算个数
# 特点:
#1,sum avg 用于处理数值型
#   max, min ,count 可以处理任何类型
#2,是否忽略null值
# 以上分组函数都会忽略null值
#3,和DISTINCT搭配达到去重效果

#4,COUNT() 具体介绍  一般使用count(*)统计行数
#5,和分组函数一同查询的字段要求是group by 后的字段 

#1,SUM 求和工资 
SELECT SUM(salary) salary_sum FROM employees;
#2.平均值
SELECT AVG(salary) salary_avg FROM employees;
#3.max 最大值
SELECT MAX(salary) salary_max FROM employees;
# 4.min 最小值
SELECT MIN(salary) salary_min FROM employees;
# 5.count 统计个数
SELECT COUNT(salary) salary_count FROM employees;

# 组合使用
SELECT SUM(salary) 总工资, AVG(salary) 平均值, MAX(salary) 最高工资, MIN(salary) 最小工资, COUNT(salary) 条 FROM employees;

# 和DISTINCT搭配达到去重效果
# 去掉重复计算
SELECT SUM(DISTINCT salary) ,SUM(salary) salary FROM employees;

SELECT COUNT(DISTINCT salary ),COUNT(salary) sa FROM employees;

# COUNT()具体介绍
# 忽略null值
SELECT COUNT(commission_pct) FROM employees;

#count(*)统计具体的行数 
SELECT COUNT(*) line FROM employees;

# COUNT(1) 相当于加了一列1 统计1的个数
SELECT COUNT(1) line FROM employees;

#效率 
 # MYISAM 存储引擎下,COUNT(*)的效率高
 #INNODB 存储引擎下,COUNT(*)和COUNT(1)的效率差不多,比COUNT(字段)效率高 字段需要去判断是否为null;

# 和分组函数一同查询的字段有限制
SELECT
	( SELECT SUM( salary ) FROM employees ) AS sum,
	employee_id 
FROM
	employees 
GROUP BY
	employee_id;

#查询各job_id 的员工工资的最大值 最小值 平均值 总合 并按job_id升序
SELECT
	MAX( salary ) max,
	MIN( salary ) min,
	AVG( salary ) avg,
	SUM( salary ) sum,
	COUNT( job_id ),
	job_id 
FROM
	employees 
GROUP BY
	job_id 
ORDER BY
	job_id

# 查询员工最高工资和最低工资的差距
SELECT MAX(salary)-MIN(salary) as DIFFERENCE ,MAX(salary) max, MIN(salary) min FROM employees;

#查询各个管理者手下员工的最低工资 其中最低工资不能低于6000 没有管理者的员工不计算在内
SELECT MIN(salary) min, manager_id FROM employees WHERE salary > 6000 and  manager_id is not null  GROUP BY manager_id

# 查询所有部门的编号 员工数量 和工资平均值 并按平均工资降序
SELECT department_id,COUNT(*) num , AVG(salary) avg FROM employees GROUP BY department_id ORDER BY avg desc;

#选择具有各个job_id的员工人数
SELECT job_id,COUNT(*) num FROM employees GROUP BY job_id;

# 查询公司员工工资的最大值 最小值 平均值 总和 
SELECT MAX(salary) max ,MIN(salary) min ,AVG(salary) avg ,SUM(salary) sum FROM employees;

# 查询员工表中的最大入职时间和最小入职时间的相差天数 (DIFFRENCE)
SELECT MAX(hiredate) -MIN(hiredate) as days , MAX(hiredate) max , MIN(hiredate) min FROM employees;

# 查询部门编号为90的员工个数
SELECT COUNT(*) num FROM employees WHERE department_id =90; 
内容有错误 观看请持有怀疑态度
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值