sql >> Databasteknik >  >> RDS >> Mysql

Motsvarighet till GroupBy och Having-klausulen i Relational Algebra

Notera att du vill få summan av lönen i Stutorial D :

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

Notesaggregering är inte en relationsoperator, och kommer därför inte att utgöra en del av en relationalgebra.

När det gäller HAVING , är det en historisk anomali. Innan SQL-92-standarden var det inte möjligt att skriva SELECT uttryck i FROM klausul (a.k.a härledda tabeller) dvs du var tvungen att göra allt arbete i en SELECT uttryck. På grund av SQL:s stela utvärderingsordning kommer det aggregerade värdet inte till efter WHERE klausulen har utvärderats, dvs det var omöjligt att tillämpa begränsningar baserat på aggregerade värden. HAVING infördes för att lösa detta problem.

Men även med HAVING , SQL förblev relationellt ofullständig när det gäller Codds tills härledda tabeller hade introducerats. Härledda tabeller renderade HAVING redundant men använder HAVING är fortfarande populär (om Stackoverflow är något att gå efter):folk verkar fortfarande gilla att använda en enda SELECT där det är möjligt och SQLs tidigare nämnda stelhet vad gäller utvärderingsordning (projektionen utförs sist i en SELECT expression) gör användningen av härledd tabell ganska utförlig jämfört med HAVING .



  1. Hur får man php-kod att ansluta till två olika databaser med två olika värdar?

  2. MySQL-licens och GPL

  3. MySQL-index för Group By / Order By

  4. Uppdatera med join med Zend-framework