Skip to forum
SQL (ORACLE) Unters...
 
Benachrichtigungen
Alles löschen

[Geschlossen] SQL (ORACLE) Unterschied Having und Where

4 Beiträge
3 Benutzer
0 Reactions
965 Ansichten
Doninhas
Joined: 18.08.2007

Hi,

hab am Do ein Praktikum. Dabei sollen wir die Grundlagen der Datenbankprogrammierung nutzen. Das Skript ist zwar sehr lang, aber nur sehr oberflächlich.

Frage: Wo liegt der Unterschied (zB Namen aller Kunden aud DB auslesen, die älter als 20 sind):

SELECT name
FROM kunde
WHERE alter > 20

oder SELECT name
FROM kunde
HAVING alter > 20


3 replies

Das HAVING Keyword ist eigentlich für Aggregationsfunktionen gedacht, weil WHERE eigentlich Dinge wie

SELECT * FROM members WHERE SUM(MinutesOnline) > 100

eigentlich nicht kann.

In Deinem Fall könnte es zwar zum selben Ergebnis führen (bin mir da im Moment nicht sicher: hab Oracle ne Weile nicht benutzt), auf jeden Fall würde die Engine das ganze aber als Funktion behandeln, was einfach nicht sein muss. Grund: es wird langsamer ablaufen. Bei nur einigen wenigen Abfragen macht das vielleicht nicht viel aus, bei einigen 10.000 Abfragen multipliziert sich das allerdings schon.

Deshalb: WHERE benutzen.


netsrak
Joined: 11.03.2006

Ich hab zwar die Syntax jetzt nicht genau zur Hand aber dein Statement 2 dürfte nicht funktionieren.
WHERE ist für Suchbedingungen wie in deinem ersten Beispiel
HAVING ist für Verfeinerungen von Aggregate Abfragen in Verbindung mit Group By, z.B.
SELECT count(*), name from kunde group by name having count(*) > 5
gibt alle Kundennamen deren Name mehr als 5* vorkommt


Doninhas
Joined: 18.08.2007

Ah ok, vielen Dank. Macht Sinn