day2-2023年2/12

文章介绍了SQL中的排序方法,包括单一字段的升序和降序排序,以及如何指定多个字段的复合排序。此外,还详细讲解了单行处理函数,如lower、upper、substr、length、concat、trim、str_to_date、date_format、round、rand和ifnull等,这些函数用于数据转换和计算。文章强调了在开发中应避免依赖字段位置进行排序,以及理解SQL语句的执行顺序。
摘要由CSDN通过智能技术生成

四、排序数据

4.1单一字段排序

  • 根据某字段升序排列:

  • order by 字段名 [asc-可省略,默认为升序];

    eg.员工薪资从低到高排:

    select

        ename,sal

    from

        emp

    order by

        sal [asc];//默认是升序!!!

  • 降序:order by 字段名 desc;

    eg.员工薪资从高到低排:

    select

        ename,sal

    from

        emp

    order by

        sal desc;

4.2手动指定排序顺序

  • !!可以多个字段排序吗?比如查询员工名字和薪资要求按照薪资升序,薪资一样时,再按照名字升序排列?

    select

        ename,sal

    from

        emp

    order by

        sal asc, ename asc;//sal在前,起主导,只有sal相等时继续按照ename升序排

4.3使用字段的位置来排序

  • 了解】根据字段的位置也可以排列

    select ename,sal from emp order by 2;//2表示第二列sal.--根据查询结果的第二列sal排列

    *不建议在开发中这样写,因为不健壮。列的顺序很容易发生改变,列顺序修改后,2就废了。

  • 综合案例:

    查找出员工名字和薪资在2000到3500之间的,并按照薪资降序进行排列?

    select

        ename,sal

    from

        emp

    where

        sal between 2000 and 3500

    order by

        sal desc;

    //标红的关键字顺序不能变,以上语句的执行顺序!必须掌握:

    第一步:from找表

    第二步:where筛选数据

    第三步:select进行过滤

    第四步:order by排序展示(排序总在最后执行!

五、数据处理函数/单行处理函数

5.1数据处理函数又被称为单行处理函数

  • 单行处理函数的特点:一个输入对应一个输出

  • 多行处理函数:和单行处理函数相对,特定--多个输入对应一个输出

5.2单行处理函数常见的有哪些?

  • lower(列名)--转换成小写

    select lower(ename) as ename from emp;//不写别名会默认显示成lower(ename)作为列名

 

  • *14个输入,最后还是14个输出,这是单行处理函数的特点。

  • upper(列名)--转换成大写

    select upper(ename) as ename from emp;

  • substr(列名/被截取的字符串,起始下标,截取的长度)--取子串

    *注意:起始下标从1开始,没有0.

    eg.找出员工名字第一个字母是A的员工信息?

    第一种方式:模糊查询

    select ename from emp where ename like 'A%';

    第二种方式:substr函数

    select

        ename

    from

        emp

    where

        substr(ename,1,1)='A';

  • length(列名)--计算每个字段的长度

    select length(ename) enamelength from emp;//两个列名之间只有空格表示省略了as的起别名方式

 

  • concat(要进行拼接的字段1,要进行拼接的字段2,...) --多个字符串的拼接

    select concat(empno,ename) from emp;

 

  • 综合案例:将学生姓名的首字母大写?

    (1)select name from stu;//查找各个学生姓名

    (2)select substr(name,1,1) from stu;//找到首字母

    (3)... upper(substr(name,1,1)) ...//1:首字母转成大写

    (4)... substr(name,2,length(name)-1) ...//2:截除首字母外剩下的字母

    (5)select contact( upper(substr(name,1,1)) , substr(name,2,length(name)-1) ) from emp;//将1,2部分拼接起来

  • trim(可以直接在括号里写字段名,也'可以在引号中直接写带有空格的字符')--去除前后空格

    select * from emp where ename = trim(' KING ');

 

  • str_to_date ---将字符串转换成日期

  • date_format ---格式化日期

  • format ---设置千分位

  • case...when..then..when..then..else..end --相当于分支语句

    eg.当员工的工作岗位是MANAGER的时候,工资上调10%,SALESMAN的时候,工资上调50%,其他正常,注:不修改数据库,只是将结果显示为工资上调。

    select

        ename,

        job,

        sal as oldsal,

        (case job when 'MANAGER' then sal * 1.1 when 'SALESMAN' then sal * 1.5 else sal end)      as newsal

    from

        emp;

  • round(数字,数字-表示四舍五入到哪一位) ---四舍五入

    注意:

    (1)select ename from emp;//select 字段名 from 表名;--结果正常显示

    (2)select 'abc' from emp;//select 后面直接跟非字段名的是'字面量/字面值' --会自动根据表的结构生成以字面量为记录的字段

  •  

  • 结论:select后面可以跟某个表的字段名,也可以跟字面量/字面值(数据)。

    eg:

    (1)select round(1236.567,0) as result from emp;//保留到整数位 ---1237

    (2)select round(1236.567,1) as result from emp;//保留1位小数 ---1236.6

    (3)select round(1236.567,2) as result from emp;//保留2位小数 ---1236.57

    (4)select round(1236.567,-1) as result from emp;//保留到十位 ---1240

  • rand() ---生成随机数,默认是0-1以内的

    (1)select rand() from emp;

 

  • (2)select round(rand()*100,0) from emp;//一百以内的随机整数

  • ifnull(字段名数据,想把数据当做哪个值) ---当"字段名数据"为NULL时,可以人为将NULL值当做自定义的值来进行计算。*因为数据库中有NULL参与的运算,结果都是NULL,会有错误。

    eg.计算员工的薪资加上补助得出实际到手工资:

    select ename,(sal+ifnull(comm,0)) as '实际到手' from emp;//as取别名有就近原则

  • (课程P26-p36)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值