2012-06-28 7 views
0

Представьте, что мы имеем следующую таблицу, что делает заказ 1,2 сделать

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

я использовал вставку в команду, чтобы вставить несколько значений в таблицу t, теперь я заинтересован в том, что делает этот код

select * from t 
    order by 1,2; 

Насколько я знаю, он выбирает все из таблицы t и сортирует его, потому что порядок означает сортировку выбранного запроса, используя условие, указанное в команде заказа, но order 1,2 Я не мог понять, что это значит, не могли бы вы мне помочь?

ответ

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

Чтобы добавить к этому: иногда это может быть полезно, например, когда у вас есть вычисление в столбце результата. Затем вместо того, чтобы добавлять вычисления в сортировку (а также выбор), вы можете просто указать позицию вычисленного столбца. – Sean

+0

@SeanW - Вы также можете заказать по столбцу псевдоним для этого случая. Единственный раз, когда я когда-либо пользовался порядком по порядку столбца, - это запрос об отброске запросов. –

+0

@MartinSmith хорошая точка. Я также использую его, когда у меня есть одно и то же имя столбца дважды в результате, например: «SELECT dateinserted, * FROM table ORDER BY 1». Обычно dateinserted - последний столбец в длинном списке, и я слишком ленив, чтобы прокручивать вправо. (Только для отладки чего-то в SSMS) – Sean

2

Он будет заказывать результаты по первому столбцу, а затем, если в первом столбце есть несколько строк с одинаковым значением, он будет заказывать их вторым столбцом.

Смежные вопросы