2010-10-18 1 views
2

Étant donné une table deTSQL, commande de ORDER BY

 
Name Age 
Bob 30 
Paul 35 
John 35 

et une déclaration

select * from table ORDER BY Age DESC 

Quelle est la commande de la table résultante?

 
Name Age 
Paul 35 
John 35 
Bob 30 

ou

 
Name Age 
John 35 
Paul 35 
Bob 30 

ou un comportement non défini?

+2

Comme il m'a été expliqué, ne comptez jamais sur l'ordre des lignes revenant lorsque vous n'avez pas spécifié. – Jay

+0

Si vous avez besoin d'un ordre, soyez précis à ce sujet. Si ce n'est pas spécifié, ce n'est pas garanti/défini. –

Répondre

7

Il est garanti que Bob sera la dernière ligne du résultat. L'ordre relatif des autres rangées n'est pas garanti d'aucune façon.

Si vous avez besoin d'une garantie, vous devez être explicite à propos de maintenant. Par exemple:

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

ORDER BY Age DESC, Name [ASC|DESC]

Si vous omettez la clause ORDER BY, l'optimiseur décidera de l'ordre pour vous. Dans mon expérience, il est habituellement mais les données sont commandées sur le disque. S'il existe un index clusterisé (généralement la clé primaire), ce sera son ordre. Cependant, comme @Martin l'a souligné, cela n'est pas garanti. Si vous voulez une commande spécifique, spécifiez-la.

+6

Ceci n'est pas défini ou garanti. –

+1

@ Martin, vous avez raison. J'ai modifié ma réponse pour refléter votre contribution. – Brad

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

Si vous postez du code ou du code XML, ** veuillez ** surligner ces lignes dans l'éditeur de texte et cliquez sur le bouton "code" (101 010) dans la barre d'outils de l'éditeur pour le mettre en valeur! –

+0

Cela ne répond pas à la question - si vous ne spécifiez pas le "nom" comme critère ORDER BY - l'ordre est-il en quelque sorte défini - ou non? –

0

Le résultat n'est finalement pas dans un ordre défini ou garanti dans lequel vous pouvez vous attendre à des résultats.