# 进阶4:常见的函数
/*
概念:将一组逻辑语句封装在方法体中,对外暴露方法名
好处:1.隐藏了实现细节 2.提高代码的复用性
调用: select 函数名() 【from 表】;
特点:
(1)叫什么(函数名)
(2)干什么(函数功能)
分类:
1.单行函数
字符函数,数学函数,日期函数,其他函数,流程控制函数
2.分组函数
常见函数总结:
1.单行函数 字符函数:
length,concat,substr,instr,trim,upper,lower,lpad,rpad,replace 数学函数:
round,ceil,floor,truncate,mod 日期函数
now,curdate,curtime,year,month,monthname,day,hour,minute,second,str_to_date,date_format 其他函数:
version(),databases() 流程控制函数
if,case 2.分组函数 */ # 一、字符函数
#1. length获取参数值的字节个数, utf8下面一个字母占一个字节,一个汉字占3个字节
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 lower("JohN");
#示例:将姓变大写,名变小写,然后拼接
select concat(lower(first_name)," ",upper(last_name)) from employees; #4. substr,substring
# 索引从1开始 substr("字符串",num,length),num为截取开始的位置,length为截取的长度,可选
select substr("我的名字叫小芳",6);
select substr("我的名字叫小芳",3,2); #案例:将姓名中首字符大写,其他字符小写,然后用_拼接显示
select concat(upper(substr(first_name,1,1)),lower(substr(first_name,2)),"_",last_name) from employees; #5.instr 返回字串第一次出现的索引,如果找不到则返回0
select instr("我的名字叫小芳","小芳"); #6.trim 去删掉前后的重复
select trim(" aaa ") as out_put; #获得aaa
select trim("b" from "bbbbbbbbaaaaavbfddsaaabbbb") as out_put;
#获得aaaaavbfddsaaa #7.lpad 用指定的字符实现左填充
#8.rpad 用指定的字符实现右填充 #9.replace替换
select replace("wqq123wqqhahahahwqq","wqq","ttt") as out_put; #二、数学函数
# 1.round 四舍五入
select round(-1.55);
select round(-1.566,2);#小数点后保留2位 #2. ceil 向上取整,返回>=该参数的最小整数
select ceil(1.02); # floor向下取整
select floor(1.02); #4.truncate截断
select truncate(1.69999,1); #1.6,小数点后1位 #5.mod取余等价于%
# 返回与被除数有关
#mod(a,b) a-a/b*b # 三、日期函数
# 1. now 返回当前系统的日期和时间
select now(); # 2. curdate 返回当前系统的日期,不包含时间
select curdate(); # 3. curtime 返回当前系统的时间,不包含日期
select curtime(); # 4. 可以获取指定的部分,年,月,日,小时,分,秒
select year(now()) as 年; #年 select month(now()); #月
select monthname(now()); #英文月 # str_to_date:将日期格式的字符转换为日期
select str_to_date("1998-3-2","%Y-%c-%d") as out_put; # 查询入职日期位1992-4-3的员工信息
select * from employees where hiredate="1992-4-3"; # date_format:将日期转换为字符 #四、其他函数 select version();
select database(); #五、流程控制函数
#1.if 函数:if else的效果
select if(10<5,"大","小");
use myemployees;
#案例:显示姓名和奖金率,有奖金哈哈,无奖金呵呵
select last_name,commission_pct, if(commission_pct is null,"没奖金,呵呵","有奖金,哈哈") as 备注 from employees; #2.case函数的使用1-----switch case的效果
/*
case 要判断的字段或者表达式
when 常量1 then 要显示的值1 或者 语句1;
when 常量2 then 要显示的值2 或者 语句2;
...
else 要显示的值n 或者 语句n;
end
*/ /*案例:查询员工的工资,要求
部门号=30,显示工资的1.1倍
部门号=40,显示工资的1.2倍
其他部门,显示工资的1.3倍
*/
select salary as "原始工资",department_id,
case manager_id
when 30 then salary*1.1
when 40 then salary*1.2
else salary*1.3
end as "新工资" from employees; #case函数的使用2
/*
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 as "工资等级" from employees; #题目1:显示系统时间(注:日期+时间)
select now(); #题目2;查询员工的工号,姓名,工资,以及工资提高20%之后的结果(now salary)
select last_name,employee_id,salary,salary*1.2 as "now salary" from employees; #题目3:将员工的姓名按照首字母排序,并写出姓名的长度(length)
select last_name,length(last_name) from employees order by substr(last_name,1,1);
#注意 order by 的位置 # 题目4:做一个查询,产生下面的结果
<last_name> earns <salary> monthly but wants <salary*3> select concat(last_name," earns ",salary," monthly but wants ",salary*3) as "dream salary" from employees; #题目5:使用case-when,按照下面的条件
job grade
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
产生 last_name ,job_id,grade select distinct job_id from employees; select job_id as "job", case job_id
when "AD_PRES" then 'A'
when "ST_MAN" then 'B'
when "IT_PROG" then 'C'
when "SA_REP" then "D"
when "ST_CLERK" then "E"
end as "grade" from employees; #2.分组函数
/*
功能:用作统计使用,又称为聚合函数或者统计函数或者组函数
输入多行,输出一行 分类:
sum,avg,max,min,count 特点:
1.sum,avg:数值型
max,min,count:数值型,字符型
2.是否忽略NULL值
以上所有分组函数均忽略null值
3.可以和distinct搭配 4.count函数的详细介绍(这个不忽略null值的)
一般使用count(*)统计行数 5.和分组函数一同查询的字段有限制
一般要求是group by后的字段
*/ # 1. 简单的使用
select sum(salary) from employees;
select avg(salary) from employees;
select min(salary) from employees;
select max(salary) from employees;
select count(salary) from employees; select sum(salary)as "和", avg(salary) as "平均",min(salary) as "最小", max(salary) as "最大",count(salary) as "总数" from employees;
#round保留小数位
select sum(salary)as "和", round(avg(salary),2) as "平均",min(salary) as "最小", max(salary) as "最大",count(salary) as "总数" from employees; #2.参数支持哪些类型:
sum,avg:数值型
max,min,count:数值型,字符型
count值计算非空的字段 select count(commission_pct) from employees; #35个数据,null值不算
select count(salary) from employees; #107个数据。 #3.是否忽略NULL值
select sum(commission_pct), avg(commission_pct),sum(commission_pct)/35,sum(commission_pct)/107 from employees;
#sum,avg:null不参与计算,直接忽略
select max(commission_pct), min(commission_pct)from employees;
#max,min:null不参与计算,直接忽略 #4.和distinct搭配
select sum(distinct salary),sum(salary) from employees;
#397900,691400 select count(distinct commission_pct),count(commission_pct) from employees;
# 7, 35 #5.count函数的详细介绍
select count(salary) from employees;#107行 select count(*) from employees;#统计行数:107行 select count(1) from employees;#统计行数:107行,与count(*)等价
效率问题:
myism存储引擎下,count(*)效率最高
innodb存储引擎下,count(*)和count(1)效率差不多,但是比count(字段)效率高 #6. 和分组函数一同查询的字段有限制 select avg(salary),commission_pct from employees;
这样是没有意义的,avg(salary)是一个数据,commission_pct是107个数据。 #题目1:查询员工表中的最大入职时间和最小入职时间的相差天数(difference)
select max(hiredate)-min(hiredate) as "difference" from employees;#表达错误 select datediff(max(hiredate),min(hiredate)) as "difference" from employees; select datediff(now(),"2000-01-01");#求相差天数 #题目2:查询部门编号位90的员工个数
select count(*) from employees where department_id=90;

  

SEC8 - MySQL 查询语句--------------进阶4:常见的函数的更多相关文章

  1. MySQL 查询语句--------------进阶9:联合查询

    #进阶9:联合查询 /* union 联合 合并:将多条查询语句的结果合并成一个结果 语法: 查询语句1 union 查询语句2 union..... 应用场景:要查询的结果来自于多个表,且多个表没有 ...

  2. MySQL 查询语句--------------进阶7:子查询

    #进阶7:子查询 /* 含义: 出现在其他语句中的select语句,称为子查询或者内查询 外部的查询语句,称为主查询或外查询 分类: 按照子查询出现的位置: select后面:只支持标量子查询 fro ...

  3. SEC7 - MySQL 查询语句--------------进阶3:排序查询

    # 进阶3:排序查询 /* 引入: select * from employees; 语法: select 查询列表 from 表 [where 筛选条件] order by 排序的列表 asc/de ...

  4. MySQL 查询语句--------------进阶6:连接查询

    #进阶6:连接查询 /* 含义:多个表格连接,当查询的字段来自于多个表时候,就会用到连接查询 我觉得这里类似于excel中的vlookup函数 笛卡尔乘积现象:表1有m行,表2有n行,结果有m*n行 ...

  5. MySQL 查询语句--------------进阶5:分组查询

    #进阶5:分组查询 /* select 分组函数,列(要求出现在group by的后面) from 表 [where 筛选条件] group by 分组的列表 [order by 子句] 注意: 查询 ...

  6. SEC6 - MySQL 查询语句--------------进阶2:条件查询

    # 进阶2:条件查询 /* 语法: select 查询列表 from 表名 where 筛选条件; 分类: 一.按照条件表达式筛选 条件运算符:> < = !=(等价于<>) ...

  7. SEC5 - MySQL 查询语句--------------进阶1:基础查询

    # 进阶1:基础查询 /* 语法: select 查询列表 from 表名: 特点: 1.查询列表可以是:表中的字段.常量值.表达式.表达式.函数 2.查询的结果是一个虚拟的表格 如何执行:执行谁,请 ...

  8. MySQL 查询语句--------------进阶8:分页查询

    #进阶8:分页查询 /* 应用场景:要显示的数据,一页显示不全,需要分页提交sql请求 语法: select 查询列表 from 表 [join type] join 表2 on 连接条件 [wher ...

  9. MySQL查询语句执行过程及性能优化-基本概念和EXPLAIN语句简介

    网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上. 我们知道MySQL的性能优化方法,一般有建立索引.规避复杂联合查询.设置冗余字段.建立中间表.查询 ...

随机推荐

  1. linux 配合仅主机模式

  2. ASP.NET MVC 快速开发框架之 SqlSugar+SyntacticSugar+JQWidgetsSugar+jqwidgets(转)

    jqwidgets.js: 是一个功能完整的框架,它具有专业的可触摸的jQuery插件.主题.输入验证.拖放插件.数据适配器,内置WAI-ARIA(无障碍网页应用)可访问性.国际化和MVVM模式支持. ...

  3. cp: omitting directory”错误

    在linux下拷贝的时候有时候会出现cp:omitting directory的错误 , 是因为目录下面还有子目录,不能直接拷贝 解决办法: 命令:cp -r 

  4. PKUSC 模拟赛 题解_UPD

    之前挖了两个大坑 一个是day1下午的第二题 另一个是day2上午的第五题 先说day1下午的第二题吧 我们显然不能O(n^2)的dp,所以我们只能算贡献 首先对于任意一个边界点而言,他对答案的贡献路 ...

  5. NYOJ 372 巧克力的

    巧克力 时间限制:4000 ms  |  内存限制:65535 KB 难度:2 描写叙述 布欧能够把人变成巧克力吃了来添加他的能量,也有可能降低. 如今布欧变了n*m个巧克力,并把巧克力排成一个n*m ...

  6. mysql 两张表的数据设置主外健关联删除

    image_group 主表 image 副表 alter table image add constraint fk_group_idforeign key (group_id)references ...

  7. Linux&amp;Windows中VNC协议及使用方法

    [转载]window下使用vnc远程登录ubuntu/linux图形界面_五个粽子_新浪博客http://blog.sina.com.cn/s/blog_677265f601012mqg.html V ...

  8. Core Graphices 设置渐变

    Core Graphices 设置渐变 Quartz 提供了两种设置渐变的方式  CGShadingRef and CGGradientRef 尝试CGGradientRef 的使用 import & ...

  9. mysql 开发进阶篇系列 23 应用层优化与查询缓存

    一.概述 前面章节介绍了很多数据库的优化措施,但在实际生产环境中,由于数据库服务器本身的性能局限,就必须要对前台的应用来进行优化,使得前台访问数据库的压力能够减到最小. 1. 使用连接池 对于访问数据 ...

  10. HDU.2516.取石子游戏(博弈论 Fibonacci Nim)

    题目链接 \(Description\) 1堆石子有n个.两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍,取完者胜.问谁能赢. \(Solution ...