【mysql】排序数据|数据处理函数
6、排序数据
6.1 、单一字段排序
排序采用 order by 子句,order by 后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by 默认采用升序,如果存在 where 子句那么order by 必须放到where 语句的后面
l 按照薪水由小到大排序(系统默认由小到大)
select * from emp order by sal; |
l 取得 job 为 MANAGER 的员工,按照薪水由小到大排序(系统默认由小到大)
select * from emp where job='MANAGER' order by sal; |
如果包含 where 语句order by 必须放到 where 后面,如果没有where 语句 order by 放到表的后面以下写法是错误的:
select * from emp order by sal where job='MANAGER'; |
l 按照多个字段排序,如:首先按照job 排序,再按照sal 排序
select * from emp order by job,sal; |
6.2 、手动指定排序顺序
l 手动指定按照薪水由小到大排序
select * from emp order by sal asc; |
l 手动指定按照薪水由大到小排序
select * from emp order by sal desc; |
6.3 、多个字段排序
l 按照 job 和薪水倒序
select * from emp order by job desc, sal desc; |
如果采用多个字段排序,如果根据第一个字段排序重复了,会根据第二个字段排序
6.4 、使用字段的位置来排序
l 按照薪水升序
select * from emp order by 6; |
不建议使用此种方式,采用数字含义不明确,程序不健壮
7、数据处理函数/单行处理函数
Lower |
转换小写 |
upper |
转换大写 |
substr |
取子串(substr(被截取的字符串,起始下标, 截取的长度)) |
length |
取长度 |
trim |
去空格 |
str_to_date |
将字符串转换成日期 |
date_format |
格式化日期 |
format |
设置千分位 |
round |
四舍五入 |
rand() |
生成随机数 |
Ifnull |
可以将 null 转换成一个具体值 |
7.1 、lower
l 查询员工,将员工姓名全部转换成小写
select lower(ename) from emp; |
7.2 、upper
l 查询 job 为 manager 的员工
select * from emp where job=upper('manager'); |
7.3 、substr
l 查询姓名以 M 开头所有的员工
select * from emp where substr(ename, 1, 1)=upper('m'); |
7.4 、length
l 取得员工姓名长度为 5 的
select length(ename), ename from emp where length(ename)=5; |
7.5 、trim
trim 会去首尾空格,不会去除中间的空格
l 取得工作岗位为 manager 的所有员工
select * from emp where job=trim(upper('manager ')); |
7.6 、str_to_date (必须严格按照标准输出)
l 查询 1981-02-20 入职的员工(第一种方法,与数据库的格式匹配上)
select * from emp where HIREDATE='1981-02-20'; |
l 查询 1981-02-20 入职的员工(第二种方法,将字符串转换成date 类型)
select * from emp where HIREDATE=str_to_date('1981-02-20','%Y-%m-%d'); select * from emp where HIREDATE=str_to_date('02-20-1981','%m-%d-%Y'); |
str_to_date 可以将字符串转换成日期,具体格式 str_to_date (字符串,匹配格式)
7.7 、date_format
l 查询 1981-02-20 以后入职的员工,将入职日期格式化成yyyy-mm-dd hh:mm:ss
select empno, ename, date_format(hiredate, '%Y-%m-%d %H:%i:%s') as hiredate from emp; |
select date_format(now(),'%Y-%m-%d %H %i %s'); now() 获得当前时间
日期格式的说明
7.8 、format
l 查询员工薪水加入千分位
select empno, ename, Format(sal, 0) from emp; |
l 查询员工薪水加入千分位和保留两位小数
select empno, ename, Format(sal, 2) from emp; |
7.9 、round
四舍五入
select round(123.56); |
7.10 、rand()
生成随机数
select rand(); |
随机抽取记录数
select * from emp order by rand() limit 2;
order by 必须写上。 |
7.11 、case … when … then …..else …end
l 如果 job 为 MANAGERG 薪水上涨 10%,如果 job 为SALESMAN 工资上涨 50%
select empno, ename, job, sal, case job when 'MANAGER' then sal*1.1 when 'SALESMAN' then sal*1.5 end as newsal from emp; |
其他的工资不动,需要添加 else
select e.*,sal ,case job when 'salesman' then sal*1.1 when 'clerk' then sal*1.2 else sal end as new_sal from emp e;
e.*:取 emp 表所有的字段 , emp as e 是表的别名可以省略as emp e |
- 、ifnull
select ifnull(comm,0) from emp; 如果 comm 为 null 就替换为 0 在 SQL 语句当中若有 NULL 值参与数学运算,计算结果一定是 NULL 为了防止计算结果出现NULL,建议先使用 ifnull 空值处理函数预先处理。以下 SQL 是计算年薪的: select empno,ename,sal,(sal+ifnull(comm,0))*12 as yearsal from emp; |
数据处理函数又被称为单行处理函数,特点:输入一行输出一行
- 点赞
- 收藏
- 关注作者
评论(0)