3.3 按列位置排序

除了能用列名指出排序顺序外,ORDER BY还支持按相对列位置进行排序。为理解这一内容,我们来看个例子:

输入▼

  1. SELECT prod_id, prod_price, prod_name
  2. FROM Products
  3. ORDER BY 2, 3;

输出▼

  1. prod_id prod_price prod_name
  2. ------- ---------- --------------------
  3. BNBG02 3.4900 Bird bean bag toy
  4. BNBG01 3.4900 Fish bean bag toy
  5. BNBG03 3.4900 Rabbit bean bag toy
  6. RGAN01 4.9900 Raggedy Ann
  7. BR01 5.9900 8 inch teddy bear
  8. BR02 8.9900 12 inch teddy bear
  9. RYL01 9.4900 King doll
  10. RYL02 9.4900 Queen doll
  11. 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清单中的列进行排序时,不能采用这项技术。但是,如果有必要,可以混合匹配使用实际列名和相对列位置。