Se hai bisogno di capire una query, ad esempio, per correggere un bug, devi essere in grado di guardarlo e rispondere rapidamente ad alcune domande:
- quante colonne nel set di risultati?
- quali sono i loro nomi?
- quali tabelle sono coinvolte nella query?
- quali sono i criteri di partecipazione?
Quindi, per migliorare la comprensione della velocità di comprensione, mi piace rendere il mio SQL più tabulare possibile, specialmente WRT alla clausola from
e ai criteri join
. Nell'elenco di selezione, mi piace usare la sintassi column-name = expression
perché rende le cose molto più leggibili. Ometto anche le parole chiave opzionali nella grammatica SQL. Non ha senso dire left outer join' when
left join will do: there is no such thing as a
left inner join '.
Questo non è molto importante per le query banali: se la tua query è qualcosa sulla linea di
select * from foo where foo_date between @lowBound and @hiBound
non importa molto. Ma più grandi e complesse diventano le query, più importante diventa tutto. Se la query è lunga 400 righe e comprende 18 tabelle con subquery annidate, criteri di join molto complicati e altre bruttezze diverse, l'SQL ben formattato è molto importante per la capacità di comprendere il codice. Questo è vero anche se sei l'autore del codice in questione. Quando si tratta della possibilità di creare codice "scrivi una volta", Perl non ha nulla su SQL.
Molti anni di lavoro di manutenzione su codice esistente e sciatto mi hanno portato a un modulo simile a questo:
select column_name = <some-expression> ,
another_column_name = <another-expression> ,
...
from dbo.some_table t1
left join dbo.another_table t2 on t2.some_table_id = t1.id
join dbo.yet_another_table t3 on t3.id = t2.another_table_id
and exists ( select ...
from ...
where <correlation-criteria>
and <filtering-criteria
)
join ( select ...
from ...
where ...
) t4 on t4.id = t3.widget_id
where t1.xxx = t4.yyy
and t2.zzz = ( select count(*)
from ...
where ...
)
Gerald Weinberg ha sottolineato all'inizio degli anni '70 nel suo lavoro seminale, La psicologia della programmazione informatica , che la lingua più importante da conoscere per un programmatore di computer è l'inglese, non [insert-the-programming-language-of-choice-here]: la scrittura e la manutenzione di programmi per computer è un compito sociale (qualcosa uno fa con le persone: il computer è semplicemente uno strumento). Per quanto riguarda il vero codice sorgente, il compilatore non si preoccupa di come appare, purché analizzi correttamente. Tuttavia, le persone che hanno bisogno di lavorare con quel codice sorgente si preoccupano: devono essere in grado di eliminarlo.
Alla mente umana piace l'ordine: gli spazi bianchi e l'allineamento delle colonne tabulari sono i tuoi amici.