sql >> Database >  >> RDS >> Mysql

Equivalent van GroupBy en Having-clausule in relationele algebra

Merk op dat u de som van het salaris wilt ontvangen, in Tutorial D :

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

Notenaggregatie is geen relationele operator en zal daarom geen deel uitmaken van een relationele algebra.

Wat betreft HAVING , is het een historische anomalie. Vóór de SQL-92-standaard was het niet mogelijk om SELECT . te schrijven uitdrukkingen in de FROM clausule (ook wel afgeleide tabellen genoemd) d.w.z. je moest al het werk in één SELECT doen uitdrukking. Vanwege de rigide evaluatievolgorde van SQL komt de geaggregeerde waarde niet tot stand na de WHERE clausule is geëvalueerd, d.w.z. het was onmogelijk om een ​​beperking toe te passen op basis van geaggregeerde waarden. HAVING werd geïntroduceerd om dit probleem aan te pakken.

Maar zelfs met HAVING , bleef SQL relationeel onvolledig met betrekking tot Codd's totdat afgeleide tabellen waren geïntroduceerd. Afgeleide tabellen weergegeven met HAVING overbodig maar met gebruik van HAVING is nog steeds populair (als StackOverflow iets is om langs te gaan):mensen lijken nog steeds graag een enkele SELECT te gebruiken waar mogelijk en de eerder genoemde rigiditeit van SQL met betrekking tot de volgorde van evaluaties (projectie wordt als laatste uitgevoerd in een SELECT expressie) maakt het gebruik van afgeleide tabellen behoorlijk uitgebreid in vergelijking met HAVING .



  1. Fix "Conversie mislukt bij het converteren van de varchar-waarde" bij het proberen samen te voegen in SQL Server

  2. verwijderen met waar en of

  3. Hoe tabel in Oracle-procedure af te kappen?

  4. PostgreSQL MAAK TABEL