Newsgroup: it.comp.software.database
Titolo: ordine alfabetico

Salve,
       con la seguente query:
       SELECT DISTINCT nome, telefono FROM prenotazioni
ottengo tutti i nomi e relativi numeri di telefono da una tabella, ma i 
risultati non sono in ordine alfabetico...come si fa??
grazie

 grazie
Prego.
Ciao!
-- 
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://italy.mvps.org
 

Larry ha scritto:

mi sembra strano, non è che il risultato sia corretto ed è solo un 
problema di case-sensitive del campo "nome"?

device ha scritto:

'nsomma, se il risultato fosse corretto sarebbe una bella botta di culo ;)

 'nsomma, se il risultato fosse corretto sarebbe una bella botta di culo ;)
beh,
se la colonna 'nome' fosse una chiave cluster (in sql sever almeno) 
sarebbero già ordinati.
ma dubito che sia così :-)
ciao
Stefano 

 sarebbero già ordinati.
Non è detto, dipende dal piano di esecuzione della query.
L'unica soluzione che ti garantisce in ogni caso di avere un result set 
ordinato come vuoi tu consiste nel ricorrere alla clausola ORDER BY.



ciao,
mi sono rifatto alla guida in linea di sql server, che cita:
"Utilizzo di indici cluster
Un indice cluster determina l'ordinamento fisico dei dati in una tabella. Un 
indice cluster ha un funzionamento analogo a quello di un elenco telefonico 
che dispone i dati per cognome. Poiché l'indice cluster stabilisce l'ordine 
di archiviazione fisico dei dati nella tabella, una tabella può includere un 
unico indice cluster. Tuttavia, l'indice può includere più colonne (un 
indice composto), così come l'elenco telefonico è organizzato per cognome e 
nome."
quindi da questa specificazione si capisce che una tabella che contiene un 
indice cluster nella colonna x, avrà i dati ordinati per quella colonna 
nativamente.
proseguendo nella lettura della guida si legge:
"Prima di creare indici cluster, è consigliabile conoscere la modalità di 
accesso ai dati. Utilizzare un indice cluster per: "
[CUT]
"Colonne a cui si accede di frequente utilizzando query che includono join o 
clausole GROUP BY. In genere si tratta di colonne chiave esterna. Un indice 
basato sulle colonne specificate nella clausola ORDER BY o GROUP BY elimina 
la necessità di ordinamento dei dati perché le righe sono già ordinate e 
consente di ottimizzare le prestazioni delle query."
Mi sembra quindi di intendere che nel caso specifico di Larry, l'utilizzo di 
un indice cluster sulla colonna 'nome' eliminerebbe la necessità di un ORDER 
BY.
ciao
Stefano 

 necessità di un ORDER BY.
Il piano di esecuzione di quella query molto probabilmente genererà un 
result set ordinato per l'eventuale indice clustered, ma una query anche 
leggermente più complessa potrebbe generare piani che non rispettano 
l'ordinamento fisico dell'indice clustered.
Ribadisco che l'unico modo per garantire IN OGNI CASO un ordinamento 
consiste nel ricorrere esplicitamente alla clausola ORDER BY.


 BY.
Direi che nel caso specifico l'order by è quello che serve senza alcuna 
ombra di dubbio :-)
Gli indici non servono per l'ordinamento e quelli cluster in particolare 
li riserverei per la chiave primaria o i campi fk utilizzati 
massicciamente nelle join, come d'altronde si evince nella 
documentazione da te postata :-)

 Ciao!
ciao
Stefano 

 Stefano
Bye
-- 
Luca Bianchi
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com

 particolare li riserverei per la chiave primaria
Un indice clustered da il meglio di se quando si ricercano dei valori per 
intervalli o quando i risultati vengono richiesti ordinati per il campo 
chiave dell'indice clustered. Tipicamente una query che coinvolga la PK 
difficilmente richiederà i dati ordinati per il valore della chiave primaria 
o ricercherà i dati compresi tra 2 valori di PK. Ovviamente il discorso può 
essere diverso se la PK non è un valore di tipo identity (quindi 
pseudo-casuale) ma è, ad esempio, una data o un "codice parlante". In questo 
caso aumentano le probabilità che la tabella venga interrogata per ottenere 
i record compresi nel periodo da...a.
Personalmente, quindi, nella definizione del tipo di indice che supporterà 
la PK tengo in primo luogo in considerazione TUTTI gli altri campi della 
tabella e definisco l'indice per la pk di tipo clustered solo se non esiste 
un candidato migliore per questo tipo di indice...
Bye
-- 
Luca Bianchi
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com

 Bye
Ciao
Stefano 

 Ciao
