2
respostas

desc na querry

qual a função do desc na querry:

select e.pergunta, count(r.id) from exercicio e join resposta r on e.id = r.exercicio_id group by r.id order by count(r.id) desc

sem ele, o resultado aparentemente é o mesmo.

2 respostas

Boa tarde Paulo. Com o desc ou sem é a mesma coisa pois o desc é default mesmo

Na verdade, não é que o desc seja deafult.

O banco sempre retorna os registros na ordem de um potencial índice, por exemplo se seu índice por o campo id, o order será por ele independente de qualquer campo. Geralmente esse índice padrão é a chave primária, se não tiver chave primária, é ordenado por qual foi inserido primeiro.

A menos que o programa, como o wrokbench por exemplo, já esteja com algum order definido como padrão.

Como é o caso de normalmente já ter um limit 1000, mesmo que você não tenha definido.

Mas isso nem sempre está definido, como por exemplo, se em uma linguagem como o PHP você fizer o select em qualquer tabela, ele sempre irá retornar todos os registros, mesmo que sejam milhões e na ordem de algum potencial índice, como explicado acima.

Por isso é sempre recomendado definir um limite nas consultas.

No seu caso específico, não faz diferença por que, provavelmente a ordem do índice padrão da tabela, que deve ser a chave primária, coincidiu com a contagem, dando a impressão de que o order desc seja irrelevante neste caso específico.

Mas é normal muitas pessoas acharem que o order asc ou desc seja default, pois em versões anteriores realmente isso era implícito, mas não deve ser confiado 100% pois isso pode mudar de uma versão para outra, como pode ser visto na documentação:

https://dev.mysql.com/doc/refman/5.5/en/order-by-optimization.html

Por isso, mesmo que pareça não fazer diferença, é recomendado definir um order, caso seu SQL seja executado em versões diferentes do banco.