Consultas em SQL são basicamente códigos no final, logo é importantíssimo termos a preocupação de oferecer um código claro e objetivo para aumentar a manutenibilidade dele por outros desenvolvedores. Comandos mal formatados e/ou com escritas confusas podem aumentar mais erros e uma falta geral de motivação para revisar seu trabalho. Para quem simplesmente escreve a consulta pode fazer sentido e até funcionar, porém é fundamental que o código esteja num melhor formato possível para aumentar sua qualidade, vamos a alguma regras que podem ajudar.
Seja consistente e corente com a formatação
SELECT primeiroNome, count(*) from Usuários WHERE ultimo_nome = 'silva' Group by primeiroNome
Vamos analisar alguns pontos:
- Veja que algumas partes estão em maiúsculas e outras não, procure manter um padrão único, por exemplo todas as palavras reservadas.
- É confuso identificar o que é coluna ou o que é comando
- A coluna do SELECT está em "camelCase", a usada no WHERE está "snake_case" e o nome da tabela em "PascalCase", crie um padrão geral, se começou errado, conserte.
- A utilização de caracter especial em definição de nomes, como na tabela Usuários
Veja um exemplo como deveria ser:
SELECT primeiro_nome, COUNT(*) from usuarios WHERE ultimo_nome = 'silva' GROUP BY by primeiro_nome
Use e Abuse da Identação
SELECT g.id, COUNT(u.id) FROM usuarios u JOIN gruopos g on u.grupo_chave
= g.chave WHERE u.nome = 'Marcelo' AND u.sobrenome
= 'Silva' GROUP BY g.chave ORDER BY COUNT(u.chave) desc
Para uma consulta pequena pode não fazer diferença para leitura quando tudo está sem um padrão de separação, agora imagine aquelas longas procedures com todos os comandos encavalados, não é mesmo?
Veja se o resultado fica melhor para o entendimento:
SELECT g.id , COUNT(u.id) FROM usuarios u JOIN gruopos g on u.grupo_chave = g.chave WHERE u.nome = 'Marcelo' AND u.sobrenome = 'Silva' GROUP BY g.chave ORDER BY COUNT(u.chave) desc
Dica: A utilização da virgula (,)antes de cada campo no SELECT, ou das conjunções AND / OR no WHERE, GROUP BY, ORDER BY facilita a identificação visual onde se inicia ou termina o grupo de campo, além de fornecer uma forma agíl de comentar um campo
Se você utilizar 2 ou 4 espaços não surti efeito considerável, o importante é só manter o padrão em toda a codificação, a simplesmente utilização dessa formatação farão seu colegas adorarem ver suas consultas quase como obras de arte. 😃
Utilize sempre "Aliases"
SELECT
u.chave
, u.nome
, t.chave
, t.nome
, (SELECT COUNT(*) FROM titulos where nome = t.nome)
FROM usuarios u
JOIN titulos t on u.titulo_chave = t.chave
O resultado dessa consulta será:
chave |
nome |
chave |
nome |
count |
1 |
Marcelo Goberto |
4 |
Arquiteto |
6 |
Novamente num cenário minimalista é possível identificar o que é cada conteúdo, agora imagine isso num longo resultado com várias colunas, por isso é fundamental que você nomeie cada coluna para que possa facilitar o entendimento.
Veja como fica o resultado da mesma consulta acima com ajustes
SELECT
u.chave AS usuario_chave
, u.nome AS usuario_nome
, t.chave AS titulo_chave
, t.nome AS titulo_nome
, (SELECT COUNT(*) FROM titulos where nome = t.nome) AS qtde_titulos
FROM usuarios u
JOIN titulos t on u.titulo_chave = t.chave
O resultado dessa consulta será
usuario_chave |
usuario_nome |
titulo_chave |
titulo_nome |
qtde_titulos |
1 |
Marcelo Goberto |
4 |
Arquiteto |
6 |
Utilize números nas clausulas GROUP BY e ORDER BY
Neste caso essa é uma preferência pessoal que acredito que auxilia muito no organização de uma consulta, veja um exemplo com essa aplicação
SELECT
nome
, sobrenome
, COUNT(*) AS total
FROM usuarios
GROUP BY 1, 2
ORDER BY 3 desc
Algumas vantagens na adoção desse formato são:
- Economia de linhas: a utilização de muitas colunas em GROUP ou ORDER não aumentará sua consulta, pois todos estarão enfileiradas
- Manutenção: Se desejar trocar o agrupamento ou a ordenação, basta trocar as colunas de lugar dentro da clausula SELECT
Esses foram alguns pontos que sempre considero na hora de escrever uma consulta, não existe um melhor padrão ou formato único para SQL, mas com certeza existe o desafio que procurar fazer um ótimo trabalho que possa ter sua manutenção facilitada para os próximos e quem sabe para nós mesmo, porque se todos tivermos um consenso que garantir sempre um excelente padrão de código, todos se sairão ganhando.
Marcelo Goberto de Azevedo
Arquiteto na GFT Brasil