2010-07-27 10 views
5

Ignorando la versione, quali sono le migliori pratiche per la formattazione del codice SQL?Effetto di stile/formato su SQL

preferisco in questo modo (metodo A):

select col from a inner join b on a.id = b.id inner join c on b.id = c.id 

un collega preferisce un altro (metodo B):

select col from a inner join (b inner join c on b.id=c.id) on a.id = b.id 

mi piacerebbe sapere se c'è qualche differenza - l'interrogazione l'ottimizzatore sembra generare lo stesso piano di esecuzione per entrambi. Quindi forse è solo leggibilità?

Questa è la prima volta che ho visto SQL scritto usando il metodo B, qualcun altro scrive SQL come questo? Personalmente trovo molto difficile leggere il metodo B.

MODIFICA: Si noti che il codice si trova su una riga e in maiuscolo per renderli entrambi più comparabili ai fini di questa domanda.

+1

Ci sono già abbastanza risposte che dicono lo stesso (il metodo A è più comune e più facilmente comprensibile dalla maggioranza), ma in aggiunta questa domanda su SQLServerCentral.com illustra come il metodo "B" può portare a veri "stumpers": http : //www.sqlservercentral.com/questions/T-SQL/77296/ Il 65% delle persone (in genere professionisti SQL) che rispondono a questa domanda ha sbagliato. – Tao

risposta

1

Penso che A sia più leggibile e la maggior parte del codice di esempio utilizza questo stile. Entrambi analizzano lo stesso e producono lo stesso piano di query, quindi per quanto riguarda SQL Server, non c'è alcuna differenza.

Io di solito anche le parole chiave maiuscole e trattino per migliorare la leggibilità:

SELECT col 
FROM a 
    INNER JOIN b 
    ON a.id = b.id 
    INNER JOIN c 
    ON b.id = c.id 
+0

Lo stile esattamente allo stesso modo. semplicemente non in quell'esempio. –

1

Il metodo B è una sintassi simile a una sottoselezione, ma viene analizzato allo stesso modo del metodo A. Non c'è nulla di male nell'utilizzarlo. Personalmente preferisco il metodo A, perché può essere letto in modo lineare.

1

mia preferenza personale è

SELECT col1, col2, col3, 
     col4, col5 
FROM a 
    INNER JOIN b ON a.id = b.id 
    INNER JOIN c ON b.id = c.id 
WHERE a.col1 = 1 

Credo che la coerenza è fondamentale, io preferisco la tua strada sopra i vostri colleghi per la leggibilità.

+0

Preferisco scrivere codice anche in questo modo, a meno che non ci siano molte condizioni di join, quindi inserisco l'on .... nella riga successiva. –

+0

Faccio lo stesso se comincia a sembrare un po 'affollato. Preferisco le maiuscole per le parole chiave SQL, ci sono solo poche parole chiave e aiuta a distinguerle dai nomi di colonne/tabelle. IMO :) –