很多知识点不用则会忘记,查起来也不方便,不如想到什么就动手操作下,并写下来加深印象。
Order by起到对oracle查询结果集的排序作用。
语法:
1、 order by可以跟表达式expr。这是order by奇妙之处,可以按照自定义顺序排序。
如下例子:如果以W开头则排在首位,其他按照sal的升序排序
![](https://img-my.csdn.net/uploads/201304/12/1365747438_9341.png)
2、 order by可跟列的顺序排序,如order by 1,2,3
3、 order by 可跟列的别名排序(注意group by不能)
4、 order by 不加asc或者desc则按照asc升序
5、 order by某列有空值,如果是asc升序则空值排在最后,如果desc降序,则空值放在最前面。可以用nulls fisrt和nulls last来指定空值放在最前面或者最后面。
6、 如果没有order by语句其实不是按照rowid来排序的。例子证明:
droptable t;
createtable t ( x int primary key, a char(2000), b char(2000), c char(2000), dchar(2000), e char(2000) );
insertinto t(x) values ( 1 );
insertinto t(x) values ( 2 );
insertinto t(x) values ( 3 );
commit;
column anoprint
column bnoprint
column cnoprint
column dnoprint
column e noprint
select * from t;
![](https://img-my.csdn.net/uploads/201304/12/1365747540_5516.jpg)
时,貌似确实按照rowid来排序的。但是做些修改:
update tset a = 'x', b = 'x', c = 'x' where x = 3;
commit;
update tset a = 'x', b = 'x', c = 'x' where x = 2;
commit;
update tset a = 'x', b = 'x', c = 'x' where x = 1;
commit;
![](https://img-my.csdn.net/uploads/201304/12/1365747573_2647.png)
可以看见rowid没有变化,但是我查t的时候X的顺序确发生了变化,所以orderby 默认顺序是根据rowid来排序的是不对的。