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

Entspricht der GroupBy- und Having-Klausel in der relationalen Algebra

Beachten Sie, dass Sie die Gehaltssumme erhalten möchten, in Tutorial D :

SUMMARIZE emp BY { job } ADD ( SUM ( sal ) AS total_sal )

Die Notenaggregation ist kein relationaler Operator und wird daher nicht Teil einer relationalen Algebra sein.

Wie für HAVING , ist es eine historische Anomalie. Vor dem SQL-92-Standard war es nicht möglich, SELECT zu schreiben Ausdrücke im FROM -Klausel (auch bekannt als abgeleitete Tabellen), d. h. Sie mussten die gesamte Arbeit in einem SELECT erledigen Ausdruck. Aufgrund der starren Auswertungsreihenfolge von SQL entsteht der Aggregatwert nicht nach WHERE Klausel wurde ausgewertet, d. h. es war unmöglich, eine Beschränkung basierend auf aggregierten Werten anzuwenden. HAVING wurde eingeführt, um dieses Problem zu lösen.

Aber auch mit HAVING , blieb SQL bezüglich Codds relational unvollständig, bis abgeleitete Tabellen eingeführt wurden. Abgeleitete Tabellen, die HAVING gerendert werden redundant, aber mit HAVING ist immer noch beliebt (wenn man von Stackoverflow ausgehen kann):Die Leute scheinen immer noch gerne ein einzelnes SELECT zu verwenden wo möglich und die erwähnte Starrheit von SQL in Bezug auf die Reihenfolge der Auswertungen (Projektion wird zuletzt in einem SELECT durchgeführt Ausdruck) macht die Verwendung abgeleiteter Tabellen im Vergleich zu HAVING recht ausführlich .