按照单个列排序
语句:SELECT prod_name FROM Products ORDER BY prod_name;
输出结果:
prod_name
————————
12 inch teddy bear
18 inch teddy bear
8 inch teddy bear
Bird bean bag toy
Fish bean bag toy
King doll
Queen doll
Rabbit bean bag toy
Raggedy Ann
ORDER BY子句必须是SELECT语句中最后一条子句,也就是order by必须要放在一条select语句的最后面,order by后面要跟着需要排序的列名。通常,ORDER BY子句中使用的列将是为显示而选择的列。但是,实际上并不一定要这样,用非查询的列排序数据也是可以的,比如上述语句的order by可以用prod_price来排序,即使没有查询这个列。
按照多个列排序
语句:SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price, prod_name;
输出结果:
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后面简单指定多个列名,列名之间用逗号分开即可(就像选择多个列时那样)。各个列的排序优先级是,先按照第一个列排序,如果第一个列中有的很多的值有多个相同的值,那这些相同值的所在行再按照第二个列取排列,以此类推。对于上述例子中的输出,仅在多个行具有相同的prod_price值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序。
按列位置排序
语句: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 |
SELECT清单中指定的是选择列的相对位置而不是列名。ORDER BY 2表示按SELECT清单中的第二个列prod_name进行排序。ORDER BY 2,3表示先按prod_price,再按prod_name进行排序。
但是这个用法很可能因为列名不明确而造成数据失去准确性,显然,当根据不出现在SELECT清单中的列进行排序时,不能用这个方法。但是,如果有需要,可以混合匹配使用实际列名和相对列位置。
order by的排序方向
升序(asc):是order by的默认排序
语句及输出结果参考上面的语句和结果
降序(desc):
语句:SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC, prod_name;
输出结果:
prod_id | prod_price | prod_name |
---|---|---|
BR03 | 11.9900 | 18 inch teddy bear |
RYL01 | 9.4900 | King doll |
RYL02 | 9.4900 | Queen doll |
BR02 | 8.9900 | 12 inch teddy bear |
BR01 | 5.9900 | 8 inch teddy bear |
RGAN01 | 4.9900 | Raggedy Ann |
BNBG02 | 3.4900 | Bird bean bag toy |
BNBG01 | 3.4900 | Fish bean bag toy |
BNBG03 | 3.4900 | Rabbit bean bag toy |
DESC关键字只应用到直接位于其前面的列名。在这个语句中,只对prod_price列指定DESC,对prod_name列不指定。因此,prod_price列以降序排序,而prod_name列(在每个价格内)仍然按标准的升序排序。
注意:如果想在多个列上进行降序排序,必须对order by后面的每一列都指定DESC关键字。