Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Ordem de execução da consulta/cláusula do MySQL


A execução real de instruções MySQL é um pouco complicada. No entanto, o padrão especifica a ordem de interpretação dos elementos na consulta. Isso está basicamente na ordem que você especifica, embora eu ache que HAVING e GROUP BY pode vir depois de SELECT :
  • FROM cláusula
  • WHERE cláusula
  • SELECT cláusula
  • GROUP BY cláusula
  • HAVING cláusula
  • ORDER BY cláusula

Isso é importante para entender como as consultas são analisadas. Você não pode usar um alias de coluna definido em um SELECT no WHERE cláusula, por exemplo, porque o WHERE é analisado antes do SELECT . Por outro lado, tal alias pode estar no ORDER BY cláusula.

Quanto à execução real, isso é realmente deixado para o otimizador. Por exemplo:
. . .
GROUP BY a, b, c
ORDER BY NULL

e
. . .
GROUP BY a, b, c
ORDER BY a, b, c

ambos têm o efeito do ORDER BY não sendo executado - e, portanto, não executado após o GROUP BY (no primeiro caso, o efeito é remover a classificação do GROUP BY e no segundo o efeito é não fazer nada além do GROUP BY já faz).