进阶4:常见函数

概念:类似于Java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名
好处:1.隐藏了实现细节    2.提高代码的重用性
调用:select 函数名(实参列表) [from 表];
特点:1.叫什么(函数名)2.干什么(函数功能)
分类:1.单行函数concat、length、infull等2.分组函数功能:做统计用,又称为统计函数、聚合函数、组函数常见函数:一、单行函数字符函数:length:获取字节长度concat:连接substr:截取子串instr:获取子串第一次出现的索引trim:去前后空格upper:变大写lower:变小写lpad:左填充rpad:右填充replace:替换数学函数:round:四舍五入ceil:向上取整floor:向下取整truncate:截断mod:取模rand:获取随机数,返回0-1之间的小数日期函数:now:返回当前日期 + 时间curdate:返回当前日期curtime:返回当前时间year:返回年month:返回月monthname:以英文形式返回月day:返回日hour:小时minute:分钟second:秒str_to_date:将字符转换成日期date_format:将日期转换成字符其他函数:version:当前数据库服务器的版本database:当前打开的数据库user:当前用户PASSWORD('字符'):返回该字符的密码形式MD5('字符'):返回该字符的MD5加密形式流程控制函数:if(条件表达式,表达式1,表达式2):如果条件表达式成立,返回表达式1,否则返回表达式2case情况1case 变量或表达式或字段when 常量1 then 值1when 常量2 then 值2.....else 值 nendcase情况2case  when 条件1 then 值1when 条件2 then 值2.....else 值 nend

一、单行函数

一、字符函数

1.length
SELECT LENGTH('john');
SELECT LENGTH('张小三hahaha');SHOW VARIABLES LIKE '%char%';
2.concat 拼接字符串
SELECT CONCAT(first_name,'_',last_name) 姓名 FROM employees;
3.upper(字符全变大写)、lower(字符全变小写)
SELECT UPPER('john');
SELECT LOWER('john');

#示例:将姓变大写,名变小写,然后拼接

SELECT CONCAT(LOWER(first_name),'_',UPPER(last_name)) 姓名 FROM employees;
4.substr、substring

/*
sql语言中索引都是从1开始

*/
#两个参数:截取从指定索引处后面的所有字符

SELECT SUBSTR('大熊爱上了静香',6) out_put;

#三个参数:截取从指定索引处指定字符长度的字符

SELECT SUBSTR('章天泽爱上了尕小焱',1,3) out_put;

#案例:姓名中首字符大写,其他字符小写然后用_拼接,显示出来

SELECT CONCAT(UPPER(SUBSTR(first_name,1,1)),'_',LOWER(SUBSTR(first_name,2))) print
FROM employees;
5.instr 返回字符串第一次出现的索引,如果找不到则返回0
SELECT INSTR('落花有意随流水,流水无情恋落花','流水') AS out_put;
6.trim 去除前后空格
SELECT LENGTH(TRIM('   克莱曼婷   ')) out_put;
去除前后指定字符
SELECT TRIM('q' FROM 'qqqqqqq桐qqqq人qqqqqq') out_put;
7.lpad 用指定的字符实现左填充指定长度
SELECT LPAD('克莱曼婷',10,'*') out_put;
8.rpad 用指定的字符实现右填充指定长度
SELECT RPAD('克莱曼婷',10,'*') out_put;
9.replace 替换
SELECT REPLACE('落花有意随流水,流水无情恋落花','流水','桐人') out_put;

二、数学函数

round 四舍五入
SELECT ROUND(1.65);
SELECT ROUND(1.567,2);#保留两位小数
ceil 向上取整,返回 >= 该参数的最小整数
SELECT CEIL(-1.857);
floor 向下取整,返回 <= 该参数的最大整数
SELECT FLOOR(-9.99);
truncate 截断,不管小数点后面数字是什么,只截止到规定位数
SELECT TRUNCATE(3.99999,1);
mod 取余 MOD(a,b) : a-a/b*b ; a/b 商取整数
SELECT MOD(10,3);

三、日期函数

now 返回当前系统日期+时间
SELECT NOW();
CURDATE() 返回当前系统日期,不包含时间
SELECT CURDATE();
CURTIME() 返回当前时间m不包含日期
SELECT CURTIME();
可以获取指定的部分,年、月、日、小时、分钟、秒
SELECT YEAR(NOW()) 年;        # 获取当前系统 年
SELECT YEAR(1999-8-7) 生日;  # 获取指定日期SELECT YEAR(hiredate) 年 FROM employees;  # 获取employees表中的hiredate日期SELECT MONTH(NOW()) 月;   # 获取当前系统 月
SELECT MONTHNAME(NOW()) 月;  # 获取当前系统 月(英文显示)/* str_to_date : 将日期格式的字符转换成指定格式的日期STR_TO_DATE('9-13-1999','%m-%d-%Y');         1999-09-13date_format : 将日期转换成字符DATE_FORMAT('2018/6/6','%Y年%m月%d日');      2018年06月06日*/
查询入职日期为1992-4-3的员工信息
SELECT * FROM employees WHERE hiredate = '1992-4-3';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;
查询有奖金的员工和入职日期(xx月/xx日 xx年)
SELECT first_name,DATE_FORMAT(hiredate,'%m月%d日 %y年') 入职日期
FROM employees
WHERE commission_pct IS NOT NULL;

/*
格式符 功能

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

*/

四、其他函数

SELECT VERSION();
SELECT DATABASE();
SELECT USER();

五、流程控制函数

1.if函数:if else 的效果
SELECT IF(10>5,'大','小');SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金,嘻嘻','有奖金,嘿嘿') 备注
FROM employees;
2. case函数的使用一 :switch case 的效果
java中:switch(变量或表达式) {case 常量1: 语句1;break;.....default: 语句n;break;}mysql中case 要判断的字段或表达式when 常量1 then 要显示的值1或语句1;when 常量2 then 要显示的值2或语句2;......else 要显示的值n或语句n;end
/*部门号 = 30,显示的工资为1.1倍部门号 = 40,显示的工资为1.2倍部门号 = 50,显示的工资为1.3倍其他部门,显示的工资为原工资*/
SELECT salary 原始工资,department_id,
CASE department_idWHEN 30 THENsalary * 1.1WHEN 40 THENsalary * 1.2WHEN 50 THENsalary * 1.3ELSEsalary
END AS 新工资
FROM employees;
3. case函数的使用二 :类似于 多重if
java中:if(条件1) {语句1;}else if(条件2) {语句2;}......else {语句n;}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,
CASE WHEN salary > 20000 THEN'A'WHEN salary > 15000 THEN'B'WHEN salary > 10000 THEN'C'ELSE'D'
END 工资
FROM employees;

-----------------------------------练习题----------------------------------

1.显示系统时间(注:日期+时间)
SELECT NOW();
2.查询员工号、姓名、工资,以及工资提高百分之20后的结果(new salary)
SELECT department_id,first_name,salary,salary*0.2 'new salary'
FROM employees;
3.将员工的姓名按首字母排序,并写出姓名的长度(length)
SELECT LENGTH(first_name) 长度,SUBSTR(first_name,1,1) 首字符,first_name
FROM employees
ORDER BY 首字符;
4.做一个查询,产生下面的结果
<first_name> earns <salary> monthly but wants <salary*3>
Dream Salary
Steven earns 24000 monthly but wants 72000
SELECT CONCAT(first_name,' earns ',salary,' monthly but wants ',salary*3) AS 'Dream Salary'
FROM employees
WHERE salary = 24000;
5.使用case-when,按照下面的条件:
job                 grade
AD_PRES               A
ST_MAN                B
IT_PROG               C
SA_REP                D
ST_CLERK              E产生下面的结果
first_name           job_id         Grade
Steven               AD_PRES          A
SELECT first_name,job_id AS job,
CASE job_idWHEN 'AD_PRES' THEN'A'WHEN 'ST_MAN' THEN'B'WHEN 'ST_MAN' THEN'C'WHEN 'SA_REP' THEN'D'WHEN 'ST_CLERK' THEN'E'
END Gread
FROM employees
WHERE job_id = 'AD_PRES';
# 二、分组函数/*功能:用作统计使用,又称为聚合函数或统计函数或组函数分类:sum 求和、avg 平均值、max 最大值、min 最小值、count 计算个数特点:1、sum、avg一般用于处理数值型max,min,count可以处理任何类型2、以上分组函数都忽略null值3、可以和distinct搭配实现去重的运算SELECT sum(DISTINCT 字段) FROM 表;4、count函数的单独介绍count(字段):统计该字段非空值的个数一般使用count(*)用作统计行数效率上:MyISAM存储引擎,count(*)最高InnoDB存储引擎,count(*)和count(1)<效率>count(字段)5、和分组函数一同查询的字段要求是group by后出现的字段*/

二、分组函数

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;SELECT SUM(salary) 和,AVG(salary) 平均值,MAX(salary) 最大值,MIN(salary) 最小值,COUNT(salary) 个数
FROM employees;
2.参数支持哪些类型
SELECT SUM(first_name),AVG(first_name) FROM employees;
SELECT SUM(hiredate),AVG(hiredate) FROM employees;
SELECT MAX(first_name),MIN(first_name) FROM employees;
SELECT MAX(hiredate),MIN(hiredate) FROM employees;
SELECT COUNT(first_name) FROM employees;
SELECT COUNT(hiredate) FROM employees;
SELECT COUNT(commission_pct) FROM employees;
3.是否忽略null
SELECT SUM(commission_pct),AVG(commission_pct),SUM(commission_pct)/35,SUM(commission_pct)/107 FROM employees;
SELECT MAX(commission_pct),MIN(commission_pct) FROM employees;
SELECT COUNT(commission_pct) FROM employees;
SELECT commission_pct FROM employees;
4.和distinct搭配
SELECT SUM(DISTINCT salary),SUM(salary) FROM employees;
SELECT COUNT(DISTINCT salary),COUNT(salary) FROM employees;
5.count函数的详细介绍
SELECT COUNT(salary) FROM employees;
SELECT COUNT(*) FROM employees;
SELECT COUNT(1) FROM employees;
/*效率:MYISAM存储引擎下,count(*)的效率高INNODB存储引擎下,count(*)和count(1)的效率差不多,比count(字段)要高一些*/
6.和分组函数一同查询的字段有限制
SELECT AVG(salary),employees_id FROM employees;

-------------------------------练习题-------------------------------

1.查询公司员工工资的最大值,最小值,平均值,总和
SELECT MAX(salary),MIN(salary),AVG(salary),SUM(salary) FROM employees;
2.查询员工表中的最大入职时间和最小入职时间的相差天数(DIFFERENCE)
SELECT DATEDIFF('2020-9-1','1999-8-1');SELECT DATEDIFF(MAX(hiredate),MIN(hiredate)) DIFFERENCE
FROM employees;
3.查询部门编号为90的员工个数
SELECT COUNT(*)
FROM employees
WHERE department_id = 90;

mySQL基础之常见函数相关推荐

  1. MySQL基础_常见函数

    一.字符函数 二.数学函数 三.日期函数 一.字符函数 length 获取参数值的字节个数 SELECT LENGTH('jonn'); concat 拼接字符串 SELECT CONCAT(last ...

  2. MySQL基础——数据库和SQL概述\MySQL基本使用\DQL语言学习\条件查询\排序查询\常见函数\分组查询\连接查询\子查询\分页查询\联合查询

    本文详细讲解了MySQL中DQL语言,也就是数据查询语句的使用.全文3w余字,是对学习MySQL知识的整理总结,因为篇幅较长,MySQL基础知识余下部分发表在余下博客中 DML语言学习\插入数据\删除 ...

  3. mysql核心数据库_从MySQL基础进军MySQL核心架构 178集MySQL数据库核心基础视频教程 MySQL基础案例教程...

    从MySQL基础进军MySQL核心架构 178集MySQL数据库核心基础视频教程 MySQL基础案例教程 课程目录 (1) 01MySQL基础_课程引入.avi (2) 02MySQL基础_为什么学习 ...

  4. 04夯实基础之MySQL基础

    文章目录 MySQL基础 一.数据库简介 1.1 数据库概念 1.2 常见数据库管理系统 1.3 数据库存储特点 1.4 三大范式(规范)-面试常考 1.5 MySQL安装和卸载 1.6 CMD操作数 ...

  5. MySQL基础学习笔记(带目录)

    MySQL学习笔记 MySQL产品的介绍和安装 MySQL服务的启动和停止 MySQL服务的登陆和退出 MySQL的常见命令 MySQL的语法规范 MySQL基础查询 1.起别名 2. 去重disti ...

  6. 从前慢-MySql基础

    MySql基础 MySQL 1.SQL.DB.DBMS分别是什么,他们之间的关系? DataBase(数据库,数据库实际上在硬盘上以文件的形式存在) DataBase Management Syste ...

  7. 快速学习mysql_快速学习MySQL基础知识

    这篇文章主要梳理了 SQL 的基础用法,会涉及到以下方面内容: SQL大小写的规范 数据库的类型以及适用场景 SELECT 的执行过程 WHERE 使用规范 MySQL 中常见函数 子查询分类 如何选 ...

  8. MySQL基础+高级

    MySQL基础篇 首先,sql语句的执行顺序是这样的: from--join--where--group by--having--select--order by--limit 前言:MySQL服务的 ...

  9. 李玉婷经典版MySQL基础

    李玉婷经典版MySQL基础 本单元目标 一.为什么要学习数据库 二.数据库的相关概念 DBMS.DB.SQL 三.数据库存储数据的特点 四.初始MySQLMySQL产品的介绍 MySQL产品的安装 ★ ...

  10. MySQL基础 (SQLyog)尚硅谷婷姐 学习笔记整理

    MySQL基础 1.0 本节主要学习内容 DB.DBMS.SQL 定义 DB分类.DBMS 特点 服务器的登录与退出 MySQL常见命令 SQL语言分类 SQLyog 一. DB.DBMS.SQL D ...

最新文章

  1. 【解决方法】Panda read_csv()把第一行的数据变成了列名,怎么处理
  2. 2018 NLP圣经《自然语言处理综述》最新手稿已经发布!
  3. 身怀56个IM技术专利,网易云信如何改变即时通讯?
  4. 微型计算机性能指标中可靠性是指连续,计算机接口原理定义
  5. 程序员请注意:异步编程模式已被人注册为专利
  6. jQuery Portamento 滑动定位
  7. 机器学习公开课笔记(8):k-means聚类和PCA降维
  8. Leetcode 581.最短无序连续子数组
  9. HG_REPMGR configure配置
  10. 倍加福(P+F)R2000修改雷达IP
  11. 关于SGD的一些小笔记
  12. html表格中文字换行设置
  13. 北邮通信博士万字长文,带你深入了解 4G/5G 区别!
  14. 区块链交易验证和支付验证
  15. 使用C#开发纽曼USB来电通来电弹屏客户端小结
  16. 3D模型欣赏:汉服美女 【3D游戏建模教程】
  17. 基于python的手机号码归属信息查询系统
  18. python画笑脸图案-如何用Python画滑稽笑脸!
  19. to be solved
  20. 用 Dev-C++ 编写简单的走迷宫小游戏

热门文章

  1. 如何快速下载720云高清全景图片
  2. Visual Studio添加代码片段
  3. 《道德经》马王堆出土帛书版
  4. 修改禅道使用的数据库
  5. 100行Python代码,做一个打地鼠小游戏!
  6. lol人物模型提取(三)
  7. 小白科普:10Mb独享服务器相当于多少流量?一个月3500GB流量的服务器可以支持多少PV?多少IP访问?
  8. React组件三大属性props state refs以及组件的生命周期
  9. Python爬取链家北京租房房价|保存为csv格式文件
  10. cad重新加载php命令,cad撤回命令是什么