【mysql】排序数据|数据处理函数

举报
xcc-2022 发表于 2022/11/28 19:03:59 2022/11/28
【摘要】 6、排序数据  6.1  、单一字段排序排序采用 order by 子句,order by 后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by 默认采用升序,如果存在 where 子句那么order by 必须放到where 语句的后面l  按照薪水由小到大排序(系统默认由小到大)select * from emp order by sal; l  取得 job 为 M...

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;


 

数据处理函数又被称为单行处理函数,特点:输入一行输出一行

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。