排序查询 与 常用函数查询(字符函数+数学函数)

#进阶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;