目录
IFNULL函数与ISNULL函数的区别
IFNULL函数
功能:判断某字段或表达式是否为null,如果为null返回指定的值,否则返回原本的值。
ISNULL函数
功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0.
进阶三、排序查询
/*语法:
select 查询列表
from 表
(where 筛选条件)
order by 排序列表 (asc(升序)|desc(降序))
特点:
1、asc代表的是升序,desc代表的是降序。如果不写,默认是升序
2、order by子句中可以支持单个字段、多个字段、表达式、函数、别名
3、order by子句一般是放在查询语句的最后面,limit子句除外
*/
案例1:查询员工信息,要求工资从高到低排序
SELECT
*
FROM
employees
ORDER BY salary DESC;
查询结果:
案例2:查询部门编号>=90的员工信息,按入职时间的先后进行排序【添加筛选条件】
SELECT
*
FROM
employees
WHERE
department_id>=90
ORDER BY hiredate;
查询结果:
案例3:按年薪从低到高显示员工的信息和年薪【按表达式排序】
SELECT
*,
salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM
employees
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) ASC;
查询结果:
案例4:按年薪从低到高显示员工的信息和年薪【按别名排序】
SELECT
*,
salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM
employees
ORDER BY 年薪 ASC;
查询结果:
案例5:按姓名的长度显示员工的姓名和工资【按函数排序】
SELECT
LENGTH(last_name) 字节长度,
last_name,
salary
FROM
employees
ORDER BY 字节长度 ASC;
查询结果:
案例6:查询员工信息,要求先按工资升序,再按员工编号降序【按多个字段排序】
SELECT
*
FROM
employees
ORDER BY salary ASC,employee_id DESC;
查询结果:
进阶四、常见函数
/*
概念:类似于Java的方法,将一组逻辑语句封装在方法中,对外暴露方法名
好处:1、隐藏了实现细节;2、提高了代码的重用性
调用: select 函数名(实参列表) 【from 表】
特点:1、叫什么(函数名);2、干什么(函数功能)
分类:1、单行函数。如concat、length、ifnull等
2、分组函数(功能:做统计使用,又称为统计函数、复合函数、组函数)
*/
一、字符函数
1、length 获取参数值的字节个数
2、concat 拼接字符串
3、upper、lower
案例:将姓变大写、名变小写,然后拼接
4、substr/substring 注意:索引从1开始
截取从指定索引处后面的所有字符
截取从指定索引处指定长度的字符
案例:姓名中首字母大写,其他字符小写然后用_拼接,显示出来
5、instr返回子串第一次出现的索引,如果找不到返回0
6、trim
7、lpad用指定的字符实现左填充指定长度
8、rpad用指定的字符实现右填充指定长度
9、replace 替换
二、数学函数
1、round 四舍五入
2、ceil 向上取整,返回>=该参数的最小整数
3、floor 向下取整,返回<=该参数的最大整数
4、truncate 截断 保留小数点后几位
5、mod 取余与%意义一样。计算规则“MOD(a,b)相当于a-a/b*b”
三、日期函数
1、now 返回当前系统日期+时间
2、curdate返回当前系统日期,不包含时间
3、curtime返回当前时间,不包含日期
4、可以获取指定的部分,年、月、日、小时、分钟、秒
5、str_to_date 将日期格式的字符转换成指定格式的日期
6、date_format 将日期转换成字符
四、其他函数
SELECT VERSION(); 查看版本号
SELECT DATABASE(); 查看当前库
SELECT USER(); 查看当前用户
五、流程控制函数
1、if函数 相当于if else的效果
2、case函数的使用一 相当于Switch case的效果
/*语法
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
.........
else 要显示的值n或语句n;
end
*/
案例:查询员工的工资,要求:部门号=30,显示的工资是1.1倍;部门号=40,显示的工资是1.2倍;部门号=50,显示工资是1.3倍;其他部门,显示的工资是原工资
3、case函数的使用二 类似于多重if
/*
case
when 条件1 then 要显示的值1或语句1;
when 条件2 then 要显示的值2或语句2;
.......
else 要显示的值n或语句n;
end
*/
案例:查询员工的工资的情况。如果工资>20000,显示A级别;如果工资>15000,显示B级别;如果工资>10000,显示C级别;否则显示D级别。
二、分组函数
/*
功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类:sum 求和; avg 平均值; max 最大值; min 最小值; count 计算个数
特点:
1、sum、avg一般用于处理数值类型
max、min、count可以处理任何类型
2、以上分组函数都忽略null值
3、可以和distinct搭配实现去重的运算
*/
1、简单使用
2、count函数的详细介绍
效率:MYISAM存储引擎下,count(*)的效率高
INNODB存储引擎下,count(*)和count(1)的效率差不多,比count(字段)要高一些
3、和分组函数一同查询的字段有限制
和分组函数一同查询的字段要求是group by后的字段
DATEDIFF函数