SQL乐园(11):用ORDER BY子句排序

软件世界

  观察SELECT语句返回的数据,我们可能会有这么一种印象,数据排列的顺序是杂乱无章的。事实上,SELECT语句返回的记录是按照“自然”顺序排列的,也就是DBMS发现它们的顺序。那么我们可不可以设定返回记录的排列顺序呢?答案是肯定的。

  1. 引例

  启动SQL Server 2000的“服务管理器”,进入“查询分析器”,在窗口上方的下拉框中选择Northwind数据库,然后在查询窗口中输入以下语句:

  SELECT DISTINCT ShipCountry From Orders

  点击“执行查询”按钮查看结果,Ship Country的排列顺序是杂乱的。而执行下面这条语句,得到的结果就大不一样了。

  SELECT DISTINCT ShipCountry From Orders ORDER BY ShipCountry

  2.结构

  含有ORDER BY子句的SELECT语句的结构是这样的:

  SELECT column1 [,column2……columnN]

  FROM table1 [,table2……tableN]

  WHERE condition

  ORDER BY column1 [ASC|DESC] [,column2 [ASC|DESC]……columnN [ASC|DESC]]

  其中,ASC表示升序,DESC表示降序。

  提示:升序是默认的顺序。空值被视为最小的可能取值。

  3.应用

  有了ORDER BY子句,我们想按照逆字母表顺序排列查询结果,只须执行以下语句:SELECT DISTINCT ShipCountry From Orders ORDER BY ShipCountry DESC

  如果有这样一种要求,按照ShipCoun try的降序和ShipCity的升序排列查询结果,ORDER BY子句能实现吗?带着这个疑问,我们执行语句“SELECT ShipCoun try,ShipCity From Orders ORDER BY ShipCountry DESC,ShipCity ASC”,查询结果表明:ORDER BY子句能对不同字段按不同的要求进行排序。

  提示:要提醒大家的是,执行ORDER BY子句必然要增加查询引擎的负担,如果结果集很大,则很可能导致查询速度和性能显著下降。所以,除非不得以的情况,建议朋友们少使用ORDER BY子句。