MySQL中常用的查询操作,首先是能直接从表中直接取出数据,接着能对查询结果做一些简单的处理,比如去重等,然后是根据条件查询数据,包括精准查询、模糊查询以及按照数据的某个范围或者指定多个指标进行查询,值得注意的是,MySQL中的一些查询会忽略空值。最后是将查询结果进行排序,主要包括升序和降序以及多个字段的先后排序处理。

第三部分主要介绍order by 语句——对查询结果进行排序。

一、具体方法

对查询结果排序

1、表达式后面可选地跟着 asc 或 desc 来指示排序方向。如果没有指定方向,默认为 asc。 2、升序时先对空值排序,降序时最后对空值排序。

问题

类型

方法

按照用户年龄进行升序排列

升序

order by a

先按照age升序,再按照gpa升序

多列排序

order by a,b

先按照age降序,再按照gpa降序

多列降序

order by a desc, b desc

扩展:

高级用法前往:MySQL union 和 order by 一起使用需要注意的问题

二、实例

已知有用户信息表user_profile(device_id 设备ID, gender 性别, age 年龄, university 学校, gpa)

id

device_id

gender

age

university

gpa

1

2138

male

21

北京大学

3.4

2

3214

male

复旦大学

4.0

3

6543

female

20

北京大学

3.2

4

2315

female

23

浙江大学

3.6

5

5432

male

25

山东大学

3.8

6

2131

male

28

北京师范大学

3.3

题目1:取出用户的device_id、age、university信息,并按照用户年龄进行升序排列

【分类】:升序

【知识点】:order by a

求解代码
select 
	device_id,
	age,
  university
from user_profile
order by age;
结果

device_id

age

university

3214

None

复旦大学

6543

20

北京大学

2138

21

北京大学

2315

23

浙江大学

5432

25

山东大学

2131

28

北京师范大学


题目2:取出用户信息表中的device_id,gpa,age数据,并先按照gpa升序排序,再按照age升序排序输出

【分类】:多列升序

【知识点】:order by a ,b

求解代码
select
    device_id,
    age,
    gpa
from user_profile
order by age,gpa;
结果

device_id

age

gpa

3214

None

4.0

6543

20

3.2

2138

21

3.4

2315

23

3.6

5432

25

3.8

2131

28

3.3


题目3:取出用户信息表中的device_id,gpa,age数据,并先按照gpa、年龄降序排序输出

【分类】:多列降序

【知识点】: order by a desc, b desc

求解代码
select
    device_id,
    age,
    gpa
from user_profile
order by age desc,gpa desc;
结果

device_id

age

gpa

2131

28

3.3

5432

25

3.8

2315

23

3.6

2138

21

3.4

6543

20

3.2

3214

None

4.0


创建 user_profile 表的代码

-- ----------------------------
-- Table structure for user_profile
-- ----------------------------
DROP TABLE IF EXISTS `user_profile`;
CREATE TABLE `user_profile`  (
  `id` int(11) NOT NULL,
  `device_id` int(11) NOT NULL,
  `gender` varchar(14) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `age` int(11) NULL DEFAULT NULL,
  `university` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `gpa` float NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user_profile
-- ----------------------------
INSERT INTO `user_profile` VALUES (1, 2138, 'male', 21, '北京大学', 3.4);
INSERT INTO `user_profile` VALUES (2, 3214, 'male', NULL, '复旦大学', 4);
INSERT INTO `user_profile` VALUES (3, 6543, 'female', 20, '北京大学', 3.2);
INSERT INTO `user_profile` VALUES (4, 2315, 'female', 23, '浙江大学', 3.6);
INSERT INTO `user_profile` VALUES (5, 5432, 'male', 25, '山东大学', 3.8);
INSERT INTO `user_profile` VALUES (6, 2131, 'male', 28, '北京师范大学', 3.3);

SET FOREIGN_KEY_CHECKS = 1;