首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
9.1 基本查询语句
9.2 单表查询
9.2.1 查询所有字段
9.2.2 查询指定字段
9.2.3 查询指定数据
9.2.4 带关键字IN的查询
9.2.5 带关键字BETWEEN AND的范围查询
9.2.6 带LIKE的字符匹配查询
9.2.7 用IS NULL关键字查询空值
9.2.8 带AND的多条件查询
9.2.9 带OR的多条件查询
9.2.10 用DISTINCT关键字去除结果中的重复行
9.2.11 用ORDER BY关键字对查询结果进行排序
9.2.12 用GROUP BY关键字分组查询
9.2.13 用LIMIT限制查询结果的数量
9.3 聚合函数查询
9.3.1 COUNT()统计函数
9.3.2 SUM()求和函数
9.3.3 AVG()平均数函数
9.3.4 MAX()最大值函数
9.3.5 MIN()最小值函数
9.4 连接查询
9.4.1 内连接查询
9.4.2 外连接查询
9.4.3 复合条件连接查询
9.5 子查询
9.5.1 带IN关键字的子查询
9.5.2 带比较运算符的子查询
9.5.3 带EXISTS关键字的子查询
9.5.4 带ANY关键字的子查询
9.5.5 带ALL关键字的子查询
9.6 合并查询结果
9.7 定义表和字段的别名
9.7.1 为表取别名
9.7.2 为字段取别名
9.8 使用正则表达式查询
9.8.1 匹配指定字符中的任意一个
9.8.2 使用“*”和“ ”来匹配多个字符
9.8.3 匹配以指定的字符开头和结束的记录
10.1 MySQL函数
10.2 数学函数
10.2.1 ABS(x)绝对值函数
10.2.2 FLOOR(x)向下取整函数
10.2.3 RAND()随机数函数
10.2.4 PI()圆周率函数
10.2.5 TRUNCATE(x,y)截断函数
10.2.6 ROUND(x)近似值函数和ROUND(x,y)四舍五入函数
10.2.7 SQRT(x)平方函数
10.3 字符串函数
10.3.1 INSERT(s1,x,len,s2)替换函数
10.3.2 UPPER(s)函数和UCASE(s)字母大写函数
10.3.3 LEFT(s,n)取左函数
10.3.4 RTRIM(s)去空格函数
10.3.5 SUBSTRING(s,n,len)截取函数
10.3.6 REVERSE(s)反转函数
10.3.7 FIELD(s,s1,s2,…,sn)位置函数
10.3.8 LOCATE(s1,s)、POSITION(s1 IN s)和INSTR(s,s1)3个位置函数
10.4 日期和时间函数
10.4.1 CURDATE()和CURRENT_DATE()当前日期函数
10.4.2 CURTIME()和CURRENT_TIME()当前时间函数
10.4.3 NOW()当前日期和时间函数
10.4.4 DATEDIFF(d1,d2)间隔天数函数
10.4.5 ADDDATE(d,n)日期计算函数
10.4.6 ADDDATE(d,INTERVAL expr type)日期时间计算函数
10.4.7 SUBDATE(d,n)日期计算函数
10.5 条件判断函数
10.6 系统信息函数
10.6.1 获取MySQL版本号、连接数和数据库名的函数
10.6.2 获取用户名的函数
10.6.3 获取字符串的字符集和排序方式的函数
10.7.1 格式化函数FORMAT(x,n)
10.7.2 改变字符集的函数
10.7.3 改变字段数据类型的函数
当前位置:
首页>>
技术小册>>
MySQL从入门到精通(三)
小册名称:MySQL从入门到精通(三)
### 9.2.11 用ORDER BY关键字对查询结果进行排序 在数据库查询中,数据的排序是一项非常基础且重要的操作,它允许用户按照特定的列或表达式对查询结果集进行排序,从而更容易地分析和展示数据。MySQL通过`ORDER BY`子句提供了强大的排序功能,使得用户能够灵活地控制数据的输出顺序。本章节将深入探讨`ORDER BY`子句的使用方法,包括基本语法、排序方向、多列排序以及结合其他SQL语句的使用。 #### 9.2.11.1 基本语法 `ORDER BY`子句通常位于SELECT语句的末尾(但在LIMIT子句之前,如果有的话),其基本语法如下: ```sql SELECT column1, column2, ... FROM table_name WHERE condition ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...; ``` - `column1, column2, ...`:指定用于排序的列名。 - `ASC`:表示升序排序,即从小到大或从A到Z的顺序。这是默认排序方式,如果未明确指定排序方向,则默认为升序。 - `DESC`:表示降序排序,即从大到小或从Z到A的顺序。 - `table_name`:指定查询的表名。 - `condition`:为可选的WHERE子句,用于过滤查询结果。 #### 9.2.11.2 单列排序 单列排序是最简单的排序方式,仅根据一个列的值来排序整个结果集。 **示例**:假设有一个名为`employees`的表,包含`id`、`name`和`salary`字段,我们想要根据员工的薪资(`salary`)从高到低进行排序: ```sql SELECT id, name, salary FROM employees ORDER BY salary DESC; ``` 执行上述SQL语句后,将返回薪资最高的员工记录在最前面,薪资最低的员工记录在最后面。 #### 9.2.11.3 多列排序 在实际应用中,我们经常需要根据多个列的值来排序数据。MySQL允许在`ORDER BY`子句中指定多个列,并分别为它们指定排序方向。当第一列的值相同时,将按照第二列的值进行排序,依此类推。 **示例**:继续上面的`employees`表,如果我们想要首先按照薪资(`salary`)从高到低排序,如果薪资相同,则按照员工姓名(`name`)的字母顺序进行排序: ```sql SELECT id, name, salary FROM employees ORDER BY salary DESC, name ASC; ``` 这样,即使两个员工的薪资相同,他们也会根据姓名的字母顺序进行排列。 #### 9.2.11.4 使用表达式排序 `ORDER BY`子句不仅限于直接对列名进行排序,还可以对列上的表达式或函数的结果进行排序。 **示例**:假设我们想要根据员工的年薪(假设年薪是月薪的12倍)进行排序: ```sql SELECT id, name, salary, salary * 12 AS annual_salary FROM employees ORDER BY annual_salary DESC; ``` 注意,虽然`annual_salary`是一个在SELECT列表中定义的别名,但在`ORDER BY`子句中仍然可以直接使用它来排序。 #### 9.2.11.5 结合其他SQL语句使用 `ORDER BY`子句经常与`SELECT`、`JOIN`、`GROUP BY`等其他SQL语句结合使用,以实现复杂的查询和数据排序需求。 **示例**:结合`GROUP BY`和`ORDER BY`对分组后的结果进行排序。假设我们想要查询每个部门的最高薪资,并按照这个最高薪资从高到低排序: ```sql SELECT department, MAX(salary) AS max_salary FROM employees GROUP BY department ORDER BY max_salary DESC; ``` 这个查询首先按部门分组,并计算每个部门的最高薪资,然后按照最高薪资从高到低进行排序。 #### 9.2.11.6 注意事项 - 排序操作可能会对查询性能产生影响,特别是在对大型数据集进行排序时。优化查询(如通过索引)是提高性能的关键。 - 当使用`ORDER BY`子句时,如果查询结果包含了LIMIT子句,那么排序操作会在LIMIT操作之前进行,以确保只有排序后的前N条记录被返回。 - 在某些情况下,如果排序的列包含NULL值,MySQL允许你通过指定`NULLS FIRST`或`NULLS LAST`(在某些版本的MySQL中可能不直接支持,但可以通过其他方式如CASE表达式实现类似效果)来控制NULL值的排序位置。 #### 总结 `ORDER BY`子句是MySQL中用于对查询结果进行排序的强大工具,它允许用户根据一列或多列的值(包括表达式和函数的结果)对结果进行升序或降序排序。通过灵活运用`ORDER BY`子句,用户可以轻松地获取有序的数据集,从而更有效地进行数据分析和展示。在实际应用中,结合其他SQL语句如`WHERE`、`GROUP BY`和`LIMIT`等,可以实现更加复杂和强大的查询需求。
上一篇:
9.2.10 用DISTINCT关键字去除结果中的重复行
下一篇:
9.2.12 用GROUP BY关键字分组查询
该分类下的相关小册推荐:
SQL零基础到熟练应用(增删改查)
MySQL从入门到精通(五)
MySQL从入门到精通(一)
MySQL8.0入门与实践
MySQL 实战 45 讲
MySQL必会核心问题
MySQL从入门到精通(二)
细说MySQL(零基础到高级应用)
MySQL从入门到精通(四)