ORDER BY实现排序操作 [MySQL][数据库]

编程入门 行业动态 更新时间:2024-10-07 19:27:10

ORDER BY实现排序<a href=https://www.elefans.com/category/jswz/34/1770947.html style=操作 [MySQL][数据库]"/>

ORDER BY实现排序操作 [MySQL][数据库]

ORDER BY实现排序操作

注意: 我们的排序操作也是属于查找操作的一部分
我们在MySQL中使用ORDER BY子句来实现排序操作
  • ASC(ascend) : 升序
  • DESC(descend) : 降序
    • 注意: 这里的DESC和我们前面的显示表结构中的DESC不是一个意思,这里的DESC的全称是:descend,表示的含义是降序的意思,但是我们的显示表结构中的DESC的全称是:describe是指的描述,显示的意思
ORDER BY字句在SELECT查询语句的末尾,但是当我们的SELECT子句中有分页操作,也就是有LIMIT的时候,那么我们的ORDER BY就是在LIMIT前面,我们的LIMIT无论如何都是SELECT子句的末尾

下面我们通过几个例子来理解如何使用ORDER BY子句来实现排序操作

注意: 我们后面的例子中的employees是一个员工表,是我们事先就创建好的一张数据表

eg1:

SELECT * FROM employees;
  • 这里就是我们对员工表中的所有字段进行查询,这个时候我们并没有使用ORDER BY子句来排序,但是这个时候我们如果多次执行这个SELECT语句之后我们可以发现我们每次的查询结果都是一样的,这个是因为我们没有显示的使用排序操作的时候就会进行默认排序,默认排序的时候就是按照数据在数据库中添加的顺序进行排序的

eg2: 按照salary从高到低的顺序显示员工的信息

SELECT *
FROM employees
ORDER BY salary DESC;
  • 这里我们ORDER BY子句的后面加的是什么字段,我们就是按照什么字段进行排序,然后后面加上排序的字段之后还要加上排序方式,排序方式有两种: 第一种是ASC ,表示升序排序,第二种是DESC,表示降序排序,这里我们就是使用的DESC,也就是按照降序的方式进行的排序

eg3: 按照salary从低到高的顺序显示员工信息

  • 这里我们有两种方式来解决这个问题

方式一:

SELECT * 
FROM employees
ORDER BY salary ASC;
  • 这里我们就是按照salary字段进行了升序排序(ASC),也就是从低到高

方式二:

SELECT * 
FROM employees
ORDER BY salary;
  • 这里我们省略了排序方式,那么我们执行之后可以发现,这个时候还是通过升序的方式进行了排序,那么也就是说明了我们如果省略排序方式之后,这个时候我们默认会按照升序排序的方式进行排序

eg4:

SELECT employee_id,salary * 12 annual_sal
FROM employees
ORDER BY annual_sal;
  • 这里我们可以发现,我们可以通过列的别名进行排序,在我们的这个查询语句中,我们的annual_sal使我们为列起的一个别名

eg5:

SELECT employee_id,salary * 12 annual_sal
FROM employees
WHERE annual_sal>80000
ORDER BY annual_sal;
  • 这个时候我们执行之后就会发现这个时候会报错,那么这里是因为什么?
    • 这里其实是因为我们的WHERE语句中不可以使用列的别名
那么这里我们就有了一个问题:为什么我们的列的别名不可以在WHERE子句中使用,但是却可以在ORDER BY子句中使用?

这里我们先给出一个模型

① SELECT …

② FROM …

③ WHERE …

④ ORDER BY …

那么你有没有思考过,难道我们的SQL语句真的是从上到下这样执行的?我们真的就是先执行SELECT 然后执行 FROM,然后执行 WHERE,最后执行ORDER BY?

  • 其实不是的,我们这里的实际的执行顺序是 : ② —> ③ —> ① —> ④ , 那么这个时候我们其实就可以明白为什么我们列的别名可以在ORDER BY子句中使用,但是却不可以在WHERE子句中使用了,这个时候我们可以发现我WHERE子句是执行在我们的FROM子句之前的,而我们给列其别名的使用就是在FROM子句中起的,那么也就是我们的WHERE子句执行的使用我们的列的别名还没有起好,那么我们自然也就不可以在WHERE子句中使用列的别名了
注意:我们的WHERE子句和FROM子句的亲密度比较高,我们的WHERE子句总是跟在我们的FROM子句之后(而且是紧跟其后)

下面几个例题中我们来说明一下多级排序

eg6:

SELECT *
FROM employees
ORDER BY department_id DESC,salary ASC; 
  • 这个时候就是一个二级排序,这个时候我们先是通过department_id字段进行降序排序,如果我们的某些记录中的department_id字段是相同的,那么这个时候我们就会使用到二级排序,这个时候又会根据我们的salary字段进行升序排序
多级排序: 对多列排序的操作我们称之为多列排序(也称之为多级排序)
  • 二级排序也是一种多级排序

  • 在对多列进行排序的时候,首先我们排序的第一列必须要有相同的值,这个时候才会进行二级排序,如果第二列的数据中所有的数据都是唯一的,那么将不会再对第二例之后进行排序了

补充:

可以使用不在SELECT列表中的列进行排序

  • 只要是在FROM后面的查询列表中的字段我们都可以按起为参考进行排序
  • 什么是SELECT列表?
    • SELECT (SELECT列表)
    • FROM …

补充:

更多推荐

ORDER BY实现排序操作 [MySQL][数据库]

本文发布于:2024-02-28 09:55:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1769394.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:操作   数据库   ORDER   MySQL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!