排序查询 与 常用函数查询(字符函数+数学函数)
#进阶3:排序查询
select * from employees;
/*
语法:
select 查询列表 执行顺序 第三步 3
from 表 第一步 1
where 筛选条件 第二步 2
order by 排序列表 [asc|desc] 第四步 4
特点:
1.asc 代表的是升序,desc代表的是降序
如果不写默认升序、
2. order by 字句中可以支持单个字段,多个字段,表达式,函数,别名
3. order by 字句一般是放在查询语句的最后面,limit字句除外
*/
#案例1:查询员工信息,要求工资从高到低排序
select * from employees order by salary desc; #降序
select *from employees order by salary; #默认为升序。
#案例2:查询部门编号>=90的员工信息,按入职时间的先后进行排序
select * from employees
where department_id>=90
order by hiredate asc;
#案例3:按年薪的高低显示员工的信息和年薪【按表达式排序】
select *,salary*12*(1+ifnull(commission_pct,0)) 年薪
from employees
order by salary*12*(1+ifnull(commission_pct,0)) desc;
#案例4:按年薪的高低显示员工的信息和年薪【按别名排序】
select *,salary*12*(1+ifnull(commission_pct,0)) 年薪
from employees
order by 年薪 desc;
#案例5:按姓名的长度显示员工的姓名和工资【按函数排序】
select length(last_name) 字节长度,last_name,salary
from employees
order by length(last_name) desc;
#案例6:查询员工信息,要求先按工资升序,再按员工编号降序【按多个字段排序】
select *
from employees
order by salary asc,employee_id desc;
#1.查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序
select last_name,department_id,salary*12*(1+ifnull(commission_pct,0)) 年薪
from employees
order by 年薪 desc,last_name asc;
#2.选择工资不在8000到17000的员工的姓名和工资,按工资降序
select last_name,salary
from employees
where salary not between 8000 and 17000
order by salary desc;
#3.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序
select *,length(email)
from employees
where email like '%e%'
order by length(email) desc,department_id asc;
常用函数查询
#进阶3:排序查询
select * from employees;
/*
语法:
select 查询列表 执行顺序 第三步 3
from 表 第一步 1
where 筛选条件 第二步 2
order by 排序列表 [asc|desc] 第四步 4
特点:
1.asc 代表的是升序,desc代表的是降序
如果不写默认升序、
2. order by 字句中可以支持单个字段,多个字段,表达式,函数,别名
3. order by 字句一般是放在查询语句的最后面,limit字句除外
*/
#案例1:查询员工信息,要求工资从高到低排序
select * from employees order by salary desc; #降序
select *from employees order by salary; #默认为升序。
#案例2:查询部门编号>=90的员工信息,按入职时间的先后进行排序
select * from employees
where department_id>=90
order by hiredate asc;
#案例3:按年薪的高低显示员工的信息和年薪【按表达式排序】
select *,salary*12*(1+ifnull(commission_pct,0)) 年薪
from employees
order by salary*12*(1+ifnull(commission_pct,0)) desc;
#案例4:按年薪的高低显示员工的信息和年薪【按别名排序】
select *,salary*12*(1+ifnull(commission_pct,0)) 年薪
from employees
order by 年薪 desc;
#案例5:按姓名的长度显示员工的姓名和工资【按函数排序】
select length(last_name) 字节长度,last_name,salary
from employees
order by length(last_name) desc;
#案例6:查询员工信息,要求先按工资升序,再按员工编号降序【按多个字段排序】
select *
from employees
order by salary asc,employee_id desc;
#1.查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序
select last_name,department_id,salary*12*(1+ifnull(commission_pct,0)) 年薪
from employees
order by 年薪 desc,last_name asc;
#2.选择工资不在8000到17000的员工的姓名和工资,按工资降序
select last_name,salary
from employees
where salary not between 8000 and 17000
order by salary desc;
#3.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序
select *,length(email)
from employees
where email like '%e%'
order by length(email) desc,department_id asc;
#进阶4: 常见函数
/*
概念:类似于Java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名
好处:1.隐藏了实现细节 2.提高代码的重用性
调用: select 函数名(实参列表) 【from 表】;
特点:
1.叫什么(函数名)
2.干什么(函数功能)
分类:
1.单行函数{
1字符函数
2数学函数
3日期函数
4其他函数
5流程控制函数
}
如concat、length、ifnull等
2.分组函数
功能:做统计使用,又称为统计函数,聚合函数、组函数
*/
#一、字符函数
#1.length 获取参数值的字节个数
select length('john'); #4个字节
select length('张三丰hahaha'); #15个字节
show variables like '%char%'; #查看当前表字符集
#2.concat 拼接字符串
select concat(last_name,'_',first_name) 姓名 from employees;
#3.kupper、lower
select upper('john');
select lower('joHN');
#实例:将姓变大写,名变小写,然后拼接
select concat(upper(last_name),lower(first_name)) 姓名 from employees;
#4.substr 。 substring
#截取从指定索引处后面所有字符
select substr('李莫愁爱上了陆展元',7) out_put; #陆展元 !!索引从1开始
#截取从指定索引处指定字符长度的字符
select substr('李莫愁爱上了陆展元',1,3) out_put; #李莫愁
#案例:姓名中首字符大写,其他字符小写然后用_拼接看,显示出来 函数的相互嵌套
select concat(upper(substr(last_name,1,1)),'_',lower(substr(last_name,2))) out_put
from employees;
#5.instr
#返回子串第一次出现的索引,如果找不到返回0
select instr('杨不悔爱上了殷六侠','殷六侠') as out_put; #7
#6.trim 去除字符串两端的空格
select length(trim(' 张翠山 '))as out_put;
select trim('a'from 'aaaaaaaa张aaaa翠山aaaaaaaaaaa') as out_put;
#7.lpad 用指定的字符实现左填充指定长度
select lpad('殷素素',10,'*') as out_put; #*******殷素素
#8.rpad 用指定的字符实现右填充指定长度
select rpad('啧啧啧',10,'#')as out_put #啧啧啧#######
#9.replace 替换
select replace('张无忌爱上了周芷若','周芷若','赵敏') as out_put; #张无忌爱上了赵敏
#二、数学函数
#round 四舍五入
select round(-1.55);
select round(1.254,2); #保留两位
#ceil 向上取整,返回>=该参数的最小整数
select ceil(-1.02);
#floor 向下取整,返回看看<=该参数的最大整数
select floor(-9.99);
#truncate 截断
select truncate(1.68888,1);
#取余
/*
mod(a,b) : a-a/b*b
mod(-10,-3) (-10)/(-3)*(-3)
*/
select mod(10,-3);
select 10%3;