假如我们除了需要查询出数据,并且还要对查询的结果的英语成绩从小到大进行排序,我们没办法再用简单的几行程序直接写出来了。因为排序牵涉到排序的算法,我们可能会封装一个排序的算法,假定叫SortFunction,我们用最简单的冒泡排序为例:
Function SortFunction(Arr,SortField);
Begin
For i:=0 to length(Arr)-1 do
For j:=I to length(Arr)-1 do
Begin
If Arr[i][SortField]>Arr[j][SortField] then
Begin
swap:=Arr[i];
Arr[i]:=Arr[j];
Arr[j]:=swap;
End;
End;
End;
那么在对结果B我们可以使用SortFunction(B,"英语成绩");从我们实现查询到排序,总共使用了10好几条语句。
我们再看下SQL的写法:
B:=Select * from EnglishScore where ["英语成绩"]>85 order by ["英语成绩"] end;
也就是说,SQL允许在where子句之后(或者省略where子句返回所有),可以带order by 排序的表达式。order by默认是从小到大排序的,事实上,order by允许对多个字段同时进行排序,并且支持从大到小排序。我们如果要对ScoreList的语文成绩正序排序,然后对英语成绩和语文成绩的比值进行逆序排列,我们可以如下写:
B:=select * from ScoreList Order by ["语文成绩"] asc,["英语成绩"]/["语文成绩"] desc end;
也就是说order by 后的排序表达式之后允许跟asc或者desc来描述排序的方向,缺省为正序(asc可以省略),而desc则代表逆序,并且order by之后支持多个排序,多个排序表达式和排序方向之间使用逗号进行分割。