Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was ist der semantische Unterschied zwischen WHERE und HAVING?

HAVING arbeitet auf der zusammengefassten Zeile - WHERE auf die gesamte Tabelle vor dem GROUP BY wirkt wird angewandt. (Sie können GROUP BY nicht eingeben beiseite, HAVING ist eine Klausel, die für die Verwendung mit GROUP BY reserviert ist - Weglassen des GROUP BY ändert nichts an der impliziten Aktion, die hinter den Kulissen stattfindet).

Es ist auch wichtig zu beachten, dass aus diesem Grund WHERE kann einen Index verwenden, während HAVING kann nicht. (In supertrivialen, nicht gruppierten Ergebnismengen könnten Sie theoretisch einen Index für HAVING verwenden , aber ich habe noch nie einen Abfrageoptimierer gesehen, der tatsächlich auf diese Weise implementiert wurde).