web-dev-qa-db-fra.com

Lorsqu'aucune commande par n'est spécifiée, quelle commande une requête choisit-elle pour votre jeu d'enregistrements?

J'ai toujours eu l'impression qu'une requête sans règle "Trier par" spécifiée, classerait cela par les résultats selon ce qui était spécifié dans votre clause where.

Par exemple, ma clause where stipule:

WHERE RESULTS_I_AM_SEARCHING_FOR IN
ITEM 1
ITEM 2
ITEM 3

J'aurais imaginé que les résultats retournés pour les articles 1, 2 et 3 seraient dans l'ordre spécifié dans le où, mais ce n'est pas le cas. Quelqu'un sait-il dans quel ordre il les trie lorsqu'il n'est pas spécifié?

Merci et désolé pour la question vraiment basique!

Damon

33
dmoney

Si vous ne spécifiez pas de ORDER BY, alors AUCUNE COMMANDE n'est définie.

Les résultats peuvent être renvoyés dans un ordre arbitraire - et cela peut également changer avec le temps.

Il n'y a pas "d'ordre naturel" ou quelque chose comme ça dans une base de données relationnelle (du moins dans tout ce que je sais). La seule façon d'obtenir un ordre fiable est de explicitement spécifier un ORDER BY clause.

Mise à jour: pour ceux qui ne me croient toujours pas - voici deux excellents articles de blog qui illustrent ce point (avec des exemples de code!):

49
marc_s

Avec SQL Server, si non ORDER BY est spécifié, les résultats sont renvoyés de la manière le plus rapide possible.

Par conséquent, sans ORDER BY, ne faites aucune hypothèse sur la commande.

23
Curt

Comme cela a déjà été dit, vous ne devez jamais vous fier à la "commande par défaut" car elle n'existe pas. Quoi qu'il en soit, si vous voulez toujours connaître quelques détails curieux sur la mise en œuvre du serveur SQL, vous pouvez le vérifier:

http://exacthelp.blogspot.co.uk/2012/10/default-order-of-select-statement-in.html

2
user2703636