参考源
- 简单教程
- 菜鸟教程
- <https://www.runoob.com/sql/sql-orderby.html
SQL order by 关键字
SQL order by
子句用于对结果集按照一个列或者多个列进行排序
SELECT column_name FROM table_name ORDER BY column_name [ASC|DESC] [, column_name [ASC|DESC]];
说明:
-
order by
关键字默认按照升序对记录进行排序 -
如需要按照降序对记录进行排序,可以使用
desc
关键字 -
如果没有
order by
语句,结果集会以主键
升序排序
一般情况下,主键都是 id
示例数据
CREATE DATABASE IF NOT EXISTS hardy_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
USE hardy_db;
DROP TABLE IF EXISTS lesson;
CREATE TABLE lesson (
id INT ( 11 ) NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR ( 32 ) DEFAULT '',
views INT ( 11 ) NOT NULL DEFAULT 0,
created_at TIMESTAMP
);
INSERT INTO lesson ( id, name, views, created_at )
VALUES
( 1, 'Python3 基础教程', 981, '2019-03-18 13:52:03' ),
( 2, 'JavaScript 基础教程', 73, '2019-03-18 16:03:32' ),
( 3, 'Ruby 基础教程', 199, '2019-04-01 06:16:14' ),
( 4, 'SQL 基础教程', 533, '2019-05-02 08:13:42' ),
( 5, 'Linux 基础教程', 1000, '2019-06-02 08:13:42' );
基本使用
升序
默认升序排序,关键字为 asc
下面的 SQL 语句从 “lesson
” 表中选取所有的课程,并按照 “views
” 列升序排序:
select * from lesson order by views;
OR
select * from lesson order by views asc;
运行以上 SQL 语句,输出结果如下
mysql> select * from lesson order by views;
+----+--------------------+-------+---------------------+
| id | name | views | created_at |
+----+--------------------+-------+---------------------+
| 2 | JavaScript基础教程 | 73 | 2019-03-18 16:03:32 |
| 3 | Ruby 基础教程 | 199 | 2019-04-01 06:16:14 |
| 4 | SQL 基础教程 | 533 | 2019-05-02 08:13:42 |
| 1 | Python3 基础教程 | 981 | 2019-03-18 13:52:03 |
+----+--------------------+-------+---------------------+
4 rows in set (0.00 sec)
降序
如果要降序排序,可以使用 desc
关键字
下面的 SQL 语句从 “lesson” 表中选取所有课程,并按照 “views
” 列降序排序
select * from lesson order by views desc;
运行以上 SQL 语句,输出结果如下:
mysql> select * from lesson order by views desc;
+----+--------------------+-------+---------------------+
| id | name | views | created_at |
+----+--------------------+-------+---------------------+
| 1 | Python3 基础教程 | 981 | 2019-03-18 13:52:03 |
| 4 | SQL 基础教程 | 533 | 2019-05-02 08:13:42 |
| 3 | Ruby 基础教程 | 199 | 2019-04-01 06:16:14 |
| 2 | JavaScript基础教程 | 73 | 2019-03-18 16:03:32 |
+----+--------------------+-------+---------------------+
4 rows in set (0.00 sec)
多列排序
如果要多列排序,那么每个排序字段使用逗号 (,
) 分隔
下面的 SQL 语句从 “lesson
” 表中选取所有课程,并按照 “views
” 和 “id
” 列排序
select * from lesson order by views asc, id asc;
运行以上 SQL 语句,输出结果如下:
mysql> select * from lesson order by views, id;
+----+--------------------+-------+---------------------+
| id | name | views | created_at |
+----+--------------------+-------+---------------------+
| 2 | JavaScript基础教程 | 73 | 2019-03-18 16:03:32 |
| 3 | Ruby 基础教程 | 199 | 2019-04-01 06:16:14 |
| 4 | SQL 基础教程 | 533 | 2019-05-02 08:13:42 |
| 1 | Python3 基础教程 | 981 | 2019-03-18 13:52:03 |
+----+--------------------+-------+---------------------+
4 rows in set (0.00 sec)
说明
多列排序排序过程:
select * from lesson order by views, id;
- 按照排序字段从左往右 ( views, id )
- 如果第一个排序字段 ( views ) 的值不一样,则按照第一个排序字段的值排序
- 如果第一个排序字段 ( views ) 的值一样,则按照第二个排序字段 ( id ) 的值排序
- 以此类推