2010-10-18 5 views
2

Учитывая таблицуTSQL, Заказ ORDER BY

 
Name Age 
Bob 30 
Paul 35 
John 35 

и заявление

select * from table ORDER BY Age DESC 

Что такое упорядочение результирующей таблицы?

 
Name Age 
Paul 35 
John 35 
Bob 30 

или

 
Name Age 
John 35 
Paul 35 
Bob 30 

или неопределенное поведение?

+2

Как мне объяснили, никогда не полагайтесь на порядок строк, когда вы не указали. – Jay

+0

Если вам нужен заказ - будьте конкретны. Если он не указан, он не гарантируется/не определен. –

ответ

7

Гарантировано, что Bob будет последним рядом результатов. Относительное упорядочение других строк никак не гарантируется.

Если вам нужен гарантированный заказ, тогда вам нужно быть откровенным. Например:

SELECT * 
FROM table 
ORDER BY age DESC, 
     name ASC 
2

ORDER BY Age DESC, Name [ASC|DESC]

Если опустить предложение ORDER BY, оптимизатор будет определять порядок для вас. По моему опыту, это обычно однако данные упорядочены на диске. Если есть кластеризованный индекс (обычно первичный ключ), это будет его порядок. Однако, как отметил Мартин, это не гарантируется. Если вы хотите указать конкретный заказ, укажите его.

+6

Это не определено или не гарантировано. –

+1

@ Мартин, ты прав. Я изменил свой ответ, чтобы отразить ваш вклад. – Brad

0
select * from table 
ORDER BY Age DESC , name asc 
+0

Если вы отправляете код или XML, ** пожалуйста ** выделите эти строки в текстовом редакторе и нажмите кнопку «код» (101 010) на панели инструментов редактора, чтобы красиво отформатировать и выделить синтаксис! –

+0

Это не отвечает на вопрос - если вы не укажете «имя» в качестве критериев ORDER BY - это порядок, определенный каким-либо образом - или нет? –

0

Результат, наконец, не указан в каком-либо определенном или garuanteed порядке, в котором вы можете ожидать результатов.

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