Update ch02: 基础查询与排序.md

This commit is contained in:
mba1398
2021-08-22 11:21:54 +08:00
committed by GitHub
parent 64ff1e28a6
commit f53ec17477

View File

@@ -467,10 +467,37 @@ FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY。
其中SELECT的执行顺序在 GROUP BY 子句之后ORDER BY 子句之前。也就是说当在ORDER BY中使用别名时已经知道了SELECT设置的别名存在但是在GROUP BY中使用别名时还不知道别名的存在所以不能在ORDER BY中可以使用别名但是在GROUP BY中不能使用别名
##
## 2.7.3 ORDER BY 排序列中存在 `NULL` 时,指定其出现在首行或者末行的方式
## 2.7.3 ORDER BY 排序列中存在 NULL 时,指定其出现在首行或者末行的方式
在MySQL中`NULL` 值被认为比任何 `非NULL` 值低,因此,当顺序为 ASC升序`NULL` 值出现在第一位,而当顺序为 DESC降序则排序在最后。
如果想指定存在 `NULL` 的行出现在首行或者末行,需要特殊处理。
使用如下代码构建示例表:
```sql
CREATE TABLE user (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(5),
date_login DATE,
PRIMARY KEY (id)
);
INSERT INTO user(name, date_login) VALUES
(NULL, '2017-03-12'),
('john', NULL),
('david', '2016-12-24'),
('zayne', '2017-03-02');
```
既然排序时,`NULL` 的值比 `非NULL` 值低(可以理解为 `0` 或者 `-∞`),那么我们在排序时就要对这个默认情况进行特殊处理以达到想要的效果。
一般有如下两种需求:
-`NULL` 值排在最后,同时将所有 `非NULL` 值按升序排列。
对于数字或者日期类型可以在排序字段前添加一个负号minus来得到反向排序。`-1、-2、-3....-∞`
##