使用select语句检索出的数据一般将以它在顶层表中出现的顺序显示,这有可能是数据最初添加到表中的顺序,但是如果数据随后进行过更新或删除,那么这个顺序将会受到DBMS的重用回收存储空间的方式的影响。因此,如果不明确控制的话,则最终的结果不能依赖该顺序排序。关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有任何意义。
为了明确地排序用select语句检索出的数据,可使用 order by 子句,可以取一个或多个列的名字,据此对输出进行排序。
order by 子句的位置:应该保证它是select语句中最后一条语句。如果它不是最后的子句,将会出现错误消息。
1.单个列排序 (略)
2.多个列排序
要按多个列排序,简单指定列名,列名之间用逗号分开即可,类似选择多个列时那样。
select prod_id, prod_price , prod_name from Products order by prod_price , prod_name;
重要的是理解在按多个列排序时候,排序的顺序完全按照规定进行,对于上述例子中的输出,列出多个行具有相同的prod_price值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序。
3.指定排序方向
数据排序不限于升序排序(从A到Z),这只是默认的排序,还可以使用order by进行降序排序,必须指定 desc关键字
select prod_id, prod_price , prod_name from Products order by prod_price desc; 按prod_price降序排序
select prod_id, prod_price , prod_name from Products order by prod_price desc , prod_name;
这里注意了: desc关键字只应用到直接位于其前面的列名,即对于上述例子 只对 prod_price指定desc,而prod_name不指定。因此prod_price列以降序排序,而prod_name列仍然按标准的升序排列。所以 如果想在多个列上降序排序,必须对每一列指定 desc关键字。这里和
distinct关键字恰恰相反