#进阶3:排序查询
语法:
select * 查询列表
from 表
where 筛选条件
order by 排序列表
特点:
1.asc代表升序,desc代表降序
若不写,默认升序
2.order by 子句中可以支持单个字段、多个字段、表达式,函数,别名
3.order by 字句一般是放在查询语句的最后面,limit字句除外
例子:查询员工信息表,要求工资从高到底排序
SELECT * FROM emmployees ORDER BY salary DESC;//从高到低
SELECT * FROM emmployees ORDER BY salary ASC;//从底到高
//如果不写,则默认是升序
order by 后面可以是别名 函数 或是多个字段
例如:查询员工信息,要求先按工资身序,再按员工编号降序
SELECT *
FROM employees
ORDER BY salary ASC ,employee_id DESc;
#进阶4:常见函数:
/*
概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名好处:
1、隐藏了实现细节 2、提高代码的重用性
调用:select 函数名(实参列表);
特点:
①叫什么(函数名)
②干什么(函数功能)
分类:
1、单行函数
如concat、length、isnull
*/
#一、字符函数
#length----获取参数值的自己个数
SELECT LENGTH(‘john’);
SELECT LENGTH(‘张三丰hahaha’);
#2.concat 拼接字符串
SELECT CONCAT(last_name,"_",first_name)姓名 FROM employees;
#3.upper、lower
#例子:将性变大写,名变小写,然后拼接
SELECT CONCAT(UPPER(last_name),LOWER(first_name)) 姓名 FROM employees;
#4.substr、substring
SELECT SUBSTR('阿珍爱上了阿强',5) out_put;//这里索引从1开始
#截取从指定索引后面所有字符
SELECT SUBSTR('阿珍爱上了阿强',1,3) out_put;
#从指定索引处到指定字符长度的字符
#5.instr//返回子串第一次出现的索引,如果找不到返回0
SELECT INSTR('阿珍爱上了阿强','阿强') AS out_put
#6.trim
SELECT LENGTH(TRIM(' 小明 '))AS out_put;//这里表示去除空格
SELECT TRIM('a' FROM 'aaa小aa明aaa') AS out_put;//这里表示去除小明外面的aaaa
#7.lpad 用指定的字符实现左填充指定长度
SELECT LPAD('小明',5,'ab') AS a;//
#8.rpad同理
#9.replace 替换
SELECT REPLACE('阿珍爱上了阿强','阿珍','铁柱') AS out_put;
二、数学函数
#round 四舍五入
SELECT ROUND(1.55);
SELECT ROUND(1.567,2);//代表小数位后2位
#ceil 向上取整,返回》=该参数的最小整数
SELECT CEIL(-1.02);//返回-1
#floor 向下取整
SELECT FLOOR(-9.99);//返回-10
#truncate截断
SELECT TRUNCATE(1.2323,1)//小数后一位 为1.6
#MOD取余
mod(a,b):a-a/b*b
SELECT MOD(10,-3);
三、日期函数
#now 返回当前系统日期+时间
SELECT NOW();
#curdate 返回当前系统日期,不包含时间
SELECT CURDATE();
#curtime 返回当前时间,不包含日期
SELECT CURTIME();
#可以获取指定的部分,年月,日,小时,分钟,秒
SELECT YEAR(NOW()) 年;
SELECT YEAR('1999-12-19')年;
SELECT MONTH(hiredate) 年 FROM employee;
SELECT ....同样的
四、流程控制函数
#1.if 函数: if else的效果
SELECT IF(10>5,'大','小');//类似于三目运算符
SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没','有')
FROM employees;
#2.case函数的使用一:switch case 效果
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
...
else 要显示的值n 或语句n;
end
例子:查询员工工资,部门号=30,显示工资为1.1倍,40 为1.2倍,50为1.3倍
SELECT salary 工资, department_id,
CASE department_id
WHEN department_id=30 THEN salary*1.1
WHEN department_id=40 THEN salary*1.2
WHEN department_id=50 THEN salary*1.3
ELSE salary
END AS 新工资
FROM employees
使用效果二
case
when 条件1 then 要显示的值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;