Quando non viene specificato ‘Ordina per’, quale ordine sceglie una query per il set di record?

Ho sempre avuto l’impressione che una query senza una regola “Ordina per” specificata, ordinasse ciò in base a quanto specificato nella clausola where.

Ad esempio, la mia clausola where afferma:

WHERE RESULTS_I_AM_SEARCHING_FOR IN ITEM 1 ITEM 2 ITEM 3 

Avrei immaginato che i risultati restituiti per gli articoli 1, 2 e 3 sarebbero nell’ordine specificato nel dove, tuttavia questo non è il caso. Qualcuno sa quale ordine ordina quando non è specificato?

Grazie e scusa per la domanda di base!

Damon

Se non si specifica un ordine ORDER BY , quindi non è definito alcun ordine.

I risultati possono essere restituiti in un ordine arbitrario e questo potrebbe cambiare anche nel tempo.

Non esiste un “ordine naturale” o qualcosa di simile in un database relazionale (almeno in tutto ciò che conosco). L’unico modo per ottenere un ordine affidabile è specificando esplicitamente una clausola ORDER BY .

Aggiornamento: per coloro che ancora non mi credono – ecco due post di blog eccellenti che illustrano questo punto (con esempi di codice!):

  • Conor Cunningham (architetto del team Core SQL Server Engine): nessuna cintura di sicurezza – ordine in attesa senza ORDINARE BY
  • Alexander Kuznetsov: senza ORDER BY, non esiste un ordinamento predefinito

Con SQL Server, se non viene specificato ORDER BY , i risultati vengono restituiti nel modo più rapido ansible .

Pertanto senza un ordine ORDER BY , non fare ipotesi circa l’ordine .

Come è già stato detto, non dovresti mai fare affidamento sull’ordine predefinito perché non esiste. Ad ogni modo se vuoi ancora conoscere alcuni dettagli curiosi sull’implementazione del server SQL puoi verificarlo:

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