跟着老杜学习MySQL--day1(中)

简介: 跟着老杜学习MySQL--day1(中)
+关注继续查看

15、排序

15.1、查询所有员工薪资,排序?

 select 
        ename,sal
    from
        emp
    order by
        sal; // 默认是升序!!!
 
    +--------+---------+
    | ename  | sal     |
    +--------+---------+
    | SMITH  |  800.00 |
    | JAMES  |  950.00 |
    | ADAMS  | 1100.00 |
    | WARD   | 1250.00 |
    | MARTIN | 1250.00 |
    | MILLER | 1300.00 |
    | TURNER | 1500.00 |
    | ALLEN  | 1600.00 |
    | CLARK  | 2450.00 |
    | BLAKE  | 2850.00 |
    | JONES  | 2975.00 |
    | FORD   | 3000.00 |
    | SCOTT  | 3000.00 |
    | KING   | 5000.00 |
    +--------+---------+

15.2、怎么降序?

    指定降序:

    select 
        ename,sal
    from
        emp
    order by
        sal desc;
 
+--------+---------+
| ename  | sal     |
+--------+---------+
| KING   | 5000.00 |
| SCOTT  | 3000.00 |
| FORD   | 3000.00 |
| JONES  | 2975.00 |
| BLAKE  | 2850.00 |
| CLARK  | 2450.00 |
| ALLEN  | 1600.00 |
| TURNER | 1500.00 |
| MILLER | 1300.00 |
| MARTIN | 1250.00 |
| WARD   | 1250.00 |
| ADAMS  | 1100.00 |
| JAMES  |  950.00 |
| SMITH  |  800.00 |
+--------+---------+

 指定升序?


 select 
        ename,sal
    from
        emp
    order by
        sal asc;
 
+--------+---------+
| ename  | sal     |
+--------+---------+
| SMITH  |  800.00 |
| JAMES  |  950.00 |
| ADAMS  | 1100.00 |
| WARD   | 1250.00 |
| MARTIN | 1250.00 |
| MILLER | 1300.00 |
| TURNER | 1500.00 |
| ALLEN  | 1600.00 |
| CLARK  | 2450.00 |
| BLAKE  | 2850.00 |
| JONES  | 2975.00 |
| FORD   | 3000.00 |
| SCOTT  | 3000.00 |
| KING   | 5000.00 |
+--------+---------+

15.3、可以两个字段排序吗?或者说按照多个字段排序?

    查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,

    再按照名字升序排列。

select 
        ename,sal
    from
        emp
    order by
        sal asc, ename asc; // sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。
 
    +--------+---------+
    | ename  | sal     |
    +--------+---------+
    | SMITH  |  800.00 |
    | JAMES  |  950.00 |
    | ADAMS  | 1100.00 |
    | MARTIN | 1250.00 |
    | WARD   | 1250.00 |
    | MILLER | 1300.00 |
    | TURNER | 1500.00 |
    | ALLEN  | 1600.00 |
    | CLARK  | 2450.00 |
    | BLAKE  | 2850.00 |
    | JONES  | 2975.00 |
    | FORD   | 3000.00 |
    | SCOTT  | 3000.00 |
    | KING   | 5000.00 |
    +--------+---------+

15.4、了解:根据字段的位置也可以排序

    select ename,sal from emp order by 2; // 2表示第二列。第二列是sal

    按照查询结果的第2列sal排序。

了解一下,不建议在开发中这样写,因为不健壮。

    因为列的顺序很容易发生改变,列顺序修改之后,2就废了。

16、综合一点的案例:

找出工资在1250到3000之间的员工信息,要求按照薪资降序排列。

  

  select 
        ename,sal
    from
        emp
    where
        sal between 1250 and 3000
    order by
        sal desc;
 
+--------+---------+
| ename  | sal     |
+--------+---------+
| FORD   | 3000.00 |
| SCOTT  | 3000.00 |
| JONES  | 2975.00 |
| BLAKE  | 2850.00 |
| CLARK  | 2450.00 |
| ALLEN  | 1600.00 |
| TURNER | 1500.00 |
| MILLER | 1300.00 |
| MARTIN | 1250.00 |
| WARD   | 1250.00 |
+--------+---------+

   关键字顺序不能变:

       select

           ...

       from

           ...

       where

           ...

       order by

           ...

       

       以上语句的执行顺序必须掌握:

           第一步:from

           第二步:where

           第三步:select

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

17、数据处理函数

17.1、数据处理函数又被称为单行处理函数

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

    和单行处理函数相对的是:多行处理函数。(多行处理函数特点:多个输入,对应1个输出!)

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

    lower 转换小写

        

mysql> select lower(ename) as ename from emp;
        +--------+
        | ename  |
        +--------+
        | smith  |
        | allen  |
        | ward   |
        | jones  |
        | martin |
        | blake  |
        | clark  |
        | scott  |
        | king   |
        | turner |
        | adams  |
        | james  |
        | ford   |
        | miller |
        +--------+

 14个输入,最后还是14个输出。这是单行处理函数的特点。    upper 转换大写

    

    mysql> select * from t_student;
        +----------+
        | name     |
        +----------+
        | zhangsan |
        | lisi     |
        | wangwu   |
        | jack_son |
        +----------+
 
        mysql> select upper(name) as name from t_student;
        +----------+
        | name     |
        +----------+
        | ZHANGSAN |
        | LISI     |
        | WANGWU   |
        | JACK_SON |
        +----------+

 substr 取子串(substr( 被截取的字符串, 起始下标,截取的长度))

       select substr(ename, 1, 1) as ename from emp;

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

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

           第一种方式:模糊查询

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

           第二种方式:substr函数

               select

                   ename

               from

                   emp

               where

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


       首字母大写?

           select name from t_student;

           select upper(substr(name,1,1)) from t_student;

           select substr(name,2,length(name) - 1) from t_student;

           select concat(upper(substr(name,1,1)),substr(name,2,length(name) - 1)) as result from t_student;

           +----------+

           | result   |

           +----------+

           | Zhangsan |

           | Lisi     |

           | Wangwu   |

           | Jack_son |

           +----------+

       

   concat函数进行字符串的拼接

       

select concat(empno,ename) from emp;
        +---------------------+
        | concat(empno,ename) |
        +---------------------+
        | 7369SMITH           |
        | 7499ALLEN           |
        | 7521WARD            |
        | 7566JONES           |
        | 7654MARTIN          |
        | 7698BLAKE           |
        | 7782CLARK           |
        | 7788SCOTT           |
        | 7839KING            |
        | 7844TURNER          |
        | 7876ADAMS           |
        | 7900JAMES           |
        | 7902FORD            |
        | 7934MILLER          |
        +---------------------+

    length 取长度

      

 select length(ename) enamelength from emp;
        +-------------+
        | enamelength |
        +-------------+
        |           5 |
        |           5 |
        |           4 |
        |           5 |
        |           6 |
        |           5 |
        |           5 |
        |           5 |
        |           4 |
        |           6 |
        |           5 |
        |           5 |
        |           4 |
        |           6 |
        +-------------+

    trim 去空格

      

 mysql> select * from emp where ename = '  KING';
        Empty set (0.00 sec)
 
        mysql> select * from emp where ename = trim('   KING');
        +-------+-------+-----------+------+------------+---------+------+--------+
        | EMPNO | ENAME | JOB       | MGR  | HIREDATE   | SAL     | COMM | DEPTNO |
        +-------+-------+-----------+------+------------+---------+------+--------+
        |  7839 | KING  | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL |     10 |
        +-------+-------+-----------+------+------------+---------+------+--------+

   str_to_date 将字符串转换成日期

   date_format 格式化日期

   format 设置千分位


   case..when..then..when..then..else..end

       当员工的工作岗位是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;
        
        +--------+-----------+---------+---------+
        | ename  | job       | oldsal  | newsal  |
        +--------+-----------+---------+---------+
        | SMITH  | CLERK     |  800.00 |  800.00 |
        | ALLEN  | SALESMAN  | 1600.00 | 2400.00 |
        | WARD   | SALESMAN  | 1250.00 | 1875.00 |
        | JONES  | MANAGER   | 2975.00 | 3272.50 |
        | MARTIN | SALESMAN  | 1250.00 | 1875.00 |
        | BLAKE  | MANAGER   | 2850.00 | 3135.00 |
        | CLARK  | MANAGER   | 2450.00 | 2695.00 |
        | SCOTT  | ANALYST   | 3000.00 | 3000.00 |
        | KING   | PRESIDENT | 5000.00 | 5000.00 |
        | TURNER | SALESMAN  | 1500.00 | 2250.00 |
        | ADAMS  | CLERK     | 1100.00 | 1100.00 |
        | JAMES  | CLERK     |  950.00 |  950.00 |
        | FORD   | ANALYST   | 3000.00 | 3000.00 |
        | MILLER | CLERK     | 1300.00 | 1300.00 |
        +--------+-----------+---------+---------+

round 四舍五入

        select 字段 from 表名;

        select ename from emp;

        select 'abc' from emp; // select后面直接跟“字面量/字面值”  

   mysql> select 'abc' as bieming from emp;
        +---------+
        | bieming |
        +---------+
        | abc     |
        | abc     |
        | abc     |
        | abc     |
        | abc     |
        | abc     |
        | abc     |
        | abc     |
        | abc     |
        | abc     |
        | abc     |
        | abc     |
        | abc     |
        | abc     |
        +---------+
 
        mysql> select abc from emp;
        ERROR 1054 (42S22): Unknown column 'abc' in 'field list'

        这样肯定报错,因为会把abc当做一个字段的名字,去emp表中找abc字段去了。

    

    select 1000 as num from emp; // 1000 也是被当做一个字面量/字面值。
        +------+
        | num  |
        +------+
        | 1000 |
        | 1000 |
        | 1000 |
        | 1000 |
        | 1000 |
        | 1000 |
        | 1000 |
        | 1000 |
        | 1000 |
        | 1000 |
        | 1000 |
        | 1000 |
        | 1000 |
        | 1000 |
        +------+

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

  

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
SQL 关系型数据库 MySQL
MySQL学习笔记(学习完之后的课后练习~)
学习笔记完毕之后的课后练习哦~
|
1月前
|
存储 SQL 关系型数据库
PHP的学习与MYSQL高级 2
PHP的学习与MYSQL高级
36 0
|
1月前
|
关系型数据库 MySQL PHP
PHP的学习与MYSQL高级 1
PHP的学习与MYSQL高级
32 0
|
1月前
|
关系型数据库 MySQL 数据库
【MySQL】MySQL事务保姆级教程(适合MySQL初学者学习)
【MySQL】MySQL事务保姆级教程(适合MySQL初学者学习)
422 0
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】DCL数据控制语言(非常适合MySQL初学者学习)
【MySQL】DCL数据控制语言(非常适合MySQL初学者学习)
27 0
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】DQL数据查询语言(非常适合MySQL初学者学习)
【MySQL】DQL数据查询语言(非常适合MySQL初学者学习)
77 0
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】DML数据操纵语言(非常适合MySQL初学者学习)
【MySQL】DML数据操纵语言(非常适合MySQL初学者学习)
95 0
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】DDL数据定义语言(非常适合MySQL初学者学习)
【MySQL】DDL数据定义语言(非常适合MySQL初学者学习)
82 0
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】初识MySQL以及bin目录命令总结(非常适合MySQL初学者学习)
【MySQL】初识MySQL以及bin目录命令总结(非常适合MySQL初学者学习)
107 0
|
1月前
|
存储 NoSQL 安全
Python | Python学习之mysql交互详解
Python | Python学习之mysql交互详解
推荐文章
更多