2012-06-28 25 views
0

試想一下,我們有如下表什麼順序1,2做

create table t 
    (item number, 
    bin number, 
    primary key (bin , item)); 

我已經使用INSERT INTO命令插入幾個值到表t,現在我很感興趣,請問這個代碼

select * from t 
    order by 1,2; 

據我所知,它選擇了表t中的所有內容並對其進行排序,因爲排序意味着使用排序命令中列出的條件對選定的查詢進行排序,但我無法理解它是什麼意思,你能幫我嗎?

回答

6

它由第一和第二列進行排序的結果,所以你的情況是相同的

select * 
from t 
order by item, bin; 
2
select * from t 
    order by item, bin; // just different written but result is same. 

Result將第一和第二列進行排序。

區別在於代碼的可讀性,所以如果有人不知道關於表的信息,那麼你的select就不會說他。人只知道結果將按1.和2.列排序,僅此而已。

+0

添加到此:有時,它可以用於當您在結果列中進行計算時。然後,不必將計算添加到排序(以及select)中,只需指定計算列的位置即可。 – Sean

+0

@SeanW - 您也可以按該列的別名進行排序。我唯一使用列順序的順序是在特別扔掉查詢。 –

+0

@MartinSmith好點。當我在結果中有兩次相同的列名時,我也使用它,例如:「SELECT dateinserted,* FROM table ORDER BY 1」。通常dateinserted是長列表中的最後一列,我懶得向右滾動。 (僅用於在SSMS中進行調試) – Sean

2

它會按第一列對結果進行排序,如果第一列中有一些具有相同值的行,則它們將按第二列排序。