2011-04-11 19 views
11

Quando eseguo una query come SELECT col1, col2, col3 FROM table, viene ordinata in base alla chiave primaria crescente.Esiste un "Ordine predefinito per colonna" in SQL Server?

Mi chiedo se esiste un modo per specificare una colonna diversa, ad esempio ORDER BY CreatedDate DESC se non esiste una clausola Order By?

ne dubito (in quanto sarebbe molto intuitivo, ma solo chiedendo in ogni caso.

risposta

24

No. qualsiasi ordinamento che si vede è un artefatto della strategia del Query Optimizer. teoria relazionale vieta che non v'è alcun ordinamento implicita di qualsiasi insieme di dati.

non si può nemmeno contare su lo stesso ordine la prossima volta per la stessa query perché la strategia di ottimizzazione dipende dal contesto e dal d ata che potrebbe cambiare.

+3

La teoria relazionale interessante specifica che "un insieme è una collezione non ordinata di elementi unici e non duplicati". –

12

Anche il comportamento si sta vedendo (ordinato da pk) non è garantita dallo standard. Si deve sempre specificare l'ordine che si desidera cose da recuperare.

+3

Ma solo se importa quello che potrebbe non essere vero. – dkretz

+0

@le dorfier: è corretto, se non ti interessa l'ordine, non c'è motivo di utilizzare una clausola ORDER BY. –

Problemi correlati