3.3 按列位置排序
除了能用列名指出排序顺序外,ORDER BY
还支持按相对列位置进行排序。为理解这一内容,我们来看个例子:
输入▼
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY 2, 3;
输出▼
prod_id prod_price prod_name
------- ---------- --------------------
BNBG02 3.4900 Bird bean bag toy
BNBG01 3.4900 Fish bean bag toy
BNBG03 3.4900 Rabbit bean bag toy
RGAN01 4.9900 Raggedy Ann
BR01 5.9900 8 inch teddy bear
BR02 8.9900 12 inch teddy bear
RYL01 9.4900 King doll
RYL02 9.4900 Queen doll
BR03 11.9900 18 inch teddy bear
分析▼
可以看到,这里的输出与上面的查询相同,不同之处在于ORDER BY
子句。SELECT
清单中指定的是选择列的相对位置而不是列名。ORDER BY 2
表示按SELECT
清单中的第二个列prod_name
进行排序。ORDER BY 2,3
表示先按prod_price
,再按prod_name
进行排序。
这一技术的主要好处在于不用重新输入列名。但它也有缺点。首先,不明确给出列名有可能造成错用列名排序。其次,在对SELECT
清单进行更改时容易错误地对数据进行排序(忘记对ORDER BY
子句做相应的改动)。最后,如果进行排序的列不在SELECT
清单中,显然不能使用这项技术。
按非选择列排序
显然,当根据不出现在SELECT
清单中的列进行排序时,不能采用这项技术。但是,如果有必要,可以混合匹配使用实际列名和相对列位置。