Bom dia pessoal!!!
Padronização de escrita do SQL é importante para o desenvolvimento de sistemas. Contudo não concordo com a forma que alguns colegas escrevem as suas consultas e gostaria de opinião de vocês.
1 - Sou contra o uso de alias em uma consulta;
Por exemplo:
SELECT cliente.nome,
endereco.rua,
endereco.numero,
endereco.cidade,
tipo_telefone.descricao,
telefone.numero,
pedido.valor_total,
tipo_pedido.descricao,
produto.descricao,
produto.valor,
item_pedido.quantidade
item_pedido.valor_total
FROM cliente
INNER JOIN endereco
ON (cliente.id = endereco.id_cliente)
LEFT JOIN telefone
ON (cliente.id = telefone.id_cliente)
INNER JOIN tipo_telefone
ON (telefone.id_tipo_telefone = tipo_telefone.id)
INNER JOIN pedido
ON (cliente.id = pedido.id_cliente)
INNER JOIN tipo_pedido
ON (pedido.id_tipo_pedido = tipo_pedido.id)
INNER JOIN item_pedido
ON (pedido.id = item_pedido.id_pedido)
INNER JOIN produto
ON (item_pedido.id_produto = produto.id)
WHERE cliente.ativo = true
AND pedido.valor_total > 1000
ORDER BY cliente.nome
Dessa forma eu consigo enxergar sem problemas a qual tabela pertence cada campo. Vejamos o mesmo sql, utilizando alias:
SELECT c.nome,
e.rua,
e.numero,
e.cidade,
tt.descricao,
t.numero,
p.valor_total,
tp.descricao,
pr.descricao,
pr.valor,
ip.quantidade
ip.valor_total
FROM cliente c
INNER JOIN endereco e
ON (c.id = e.id_cliente)
LEFT JOIN telefone t
ON (c.id = t.id_cliente)
INNER JOIN tipo_telefone tt
ON (t.id_tipo_telefone = tt.id)
INNER JOIN pedido p
ON (c.id = p.id_cliente)
INNER JOIN tipo_pedido tp
ON (p.id_tipo_pedido = tp.id)
INNER JOIN item_pedido ip
ON (p.id = ip.id_pedido)
INNER JOIN produto pr
ON (ip.id_produto = pr.id)
WHERE c.ativo = true
AND p.valor_total > 1000
ORDER BY c.nome
OK. O sql ficou menor! Porém, dessa forma eu tenho dificuldades em identificar a qual tabela pertence cada campo. Assim sendo, tenho que consultar na estrutura do FROM o que significa determinada sigla!
2 - Sou a favor da indentação do código para facilitar a leitura (inclusive no código fonte do sistema).
Vejamos o mesmo código sem indentação:
SELECT cliente.nome,
endereco.rua,
endereco.numero,
endereco.cidade,
tipo_telefone.descricao,
telefone.numero,
pedido.valor_total,
tipo_pedido.descricao,
produto.descricao,
produto.valor,
item_pedido.quantidade
item_pedido.valor_total
FROM cliente
INNER JOIN endereco ON (cliente.id = endereco.id_cliente)
LEFT JOIN telefone ON (cliente.id = telefone.id_cliente)
INNER JOIN tipo_telefone ON (telefone.id_tipo_telefone = tipo_telefone.id)
INNER JOIN pedido ON (cliente.id = pedido.id_cliente)
INNER JOIN tipo_pedido ON (pedido.id_tipo_pedido = tipo_pedido.id)
INNER JOIN item_pedido ON (pedido.id = item_pedido.id_pedido)
INNER JOIN produto ON (item_pedido.id_produto = produto.id)
WHERE cliente.ativo = true
AND pedido.valor_total > 1000
ORDER BY cliente.nome
Percebem como fica mais difícil para realizar a leitura? Já peguei consultas muito maiores do que essa. Por isso, acho fundamental criar uma padronização.
Por favor deem suas opiniões!