SQL必知必会 学习之路
如果我们需要对检索的数据进行排序,需要使用ORDER BY
字句。
3.1 排序数据
输入:
SELECT prod_name
FROM Products;
输出:
如果不排序,数据一般会以它在底层表中出现的顺序显示,如果不明确控制的话,那最后结果也不应该依赖排序关系。
为了明确排序,使用ORDER BY子句,ORDER BY子句取一个或多个列的名字,根据默认的升序进行排列。
输入:
SELECT prod_name
FROM Products
ORDER BY prod_name;
分析:
以字母顺序进行升序排序
输出:
*ORDER BY 位于SELECT语句中的最后一句,也可以使用非检索的列进行排序,完全合法。
*
3.2 按照多个列排序
实际上,我们需要经常对不止一个列进行排序,例如,我们希望对姓和名排序(首先对姓排序,其次在每个姓中根据名字排序)下面的代码检索3个列,按其中的两个列对结果进行排序-----首先根据价格排序,其次根据名称排序。
输入:
SELECT prod_id,prod_price,prod_name
FROM Products
ORDER BY prod_price,prod_name;
输出:
仅在多行具有相同的prod_price
时,按照prod_name
进行排序,如果prod_price
每行都不同,则不会按prod_name
排序.
3.3 按列位置排序
输入:
SELECT prod_id,prod_price,prod_name
FROM Products
ORDER BY 2,3;
输出:
可以看出,输出结果与3.2检索结果相同,不同之处在于ORDER BY
子句,SELECT
语句中指定的是列的相对位置而不是列名,如果对结果进行排序所需的列不在SELECT
语句中,那么将无法使用。
提示:
可以混合使用相对位置、实际列名。
3.4 指定排序方向
使用DESC
关键字对结果进行降序排序
SELECT prod_id,prod_price,prod_name
FROM Products
ORDER BY prod_price DESC;
输出:
如果价格相同时,可以按照prod_name
进行排序(默认升序排序,降序排序使用DESC
关键字),DESC
不同于DISTINCT
作用于所有列,它只作用于其前面的列名。