Ü4.2.1. MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access, OpenOffice.org Base SELECT * FROM tbKursthema; Ü4.2.2 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access, OpenOffice.org Base SELECT kt.Kursthema, kt.Kursbeschreibung, kt.DauerPlan FROM tbKursthema kt; Ü4.2.3 MySQL, PostgreSQL, Oracle, SQL Server, Firebird SELECT KTHID AS "KThID", kursthema AS KURSTHEMA, DauerPlan AS "geplante Kursdauer" FROM TBKURSTHEMA; MS Access SELECT KThID , KURSTHEMA, DauerPlan as [geplante Kursdauer] FROM TBKURSTHEMA; oder SELECT tbKursthema.KTHID AS KThID, tbKursthema.Kursthema AS KURSTHEMA, tbKursthema.DauerPlan AS [geplante Dauer] FROM tbKursthema; (Access) openBase SELECT "KTHID" AS "KThID", "Kursthema" AS "KURSTHEMA", "DauerPlan" AS "geplante Kursdauer" FROM "tbKursthema"; Ü4.2.4 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access, OpenOffice.org Base SELECT DISTINCT DauerPlan FROM tbKursthema; In Oracle auch SELECT UNIQUE DauerPlan FROM tbKursthema; Ü4.3.1 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access, OpenOffice.org Base SELECT Familienname, Vorname, Geburtsdatum FROM tbPerson ORDER BY Geburtsdatum DESC; Die obige Anweisung funktioniert auch in Oracle. Hier werden im Standard die NUll-Werte nach oben sortiert. Daher ist der erste Datensatz der Datensatz ohne Geburtsdatum. Dies können Sie mit dem Zusatz NULLS LAST ändern. Beachten Sie auch die Datumslogik, die hier im Standard bei zweistelligen Jahresangaben von 1950 bis 2050 geht. Daher wird der Datensatz mit dem Jahr 49 als jüngster Datensatz aus dem Jahr "2049" nach oben sortiert. Auf die genauen Einstellmöglichkeiten kann hier nicht eingegangen werden, dies sollten Sie im Oracle-Handbuch nachlesen. SELECT Familienname, Vorname, Geburtsdatum FROM tbperson ORDER BY Geburtsdatum DESC NULLS LAST; (Oracle) Ü4.3.2 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access, OpenOffice.org Base SELECT p.Familienname, p.Vorname, p.PLZ, p.Ort, p.Strasse FROM tbPerson p ORDER BY p.Ort ASC, p.PLZ ASC; Ü4.3.3 MySQL, PostgreSQL, Oracle, SQL Server, Firebird SELECT Kursthema, DauerPlan AS "geplante Kursdauer" FROM tbkursthema ORDER BY "geplante Kursdauer" DESC; Alias hat in MySQL im Alias keine Wirkung. Es muss der Originalname verwendet werden. SELECT Kursthema, DauerPlan AS "geplante Kursdauer" FROM tbkursthema ORDER BY DauerPlan DESC; MS Access SELECT Kursthema, DauerPlan AS [geplante Kursdauer] FROM tbkursthema ORDER BY [geplante Kursdauer] DESC; funktioniert leider nicht. Es muss der originalname verwendet werden SELECT Kursthema, DauerPlan AS [geplante Kursdauer] FROM tbkursthema ORDER BY DauerPlan DESC; OpenOffice.org Base SELECT Kursthema, DauerPlan AS "geplante Kursdauer" FROM tbKursthema ORDER BY "geplante Kursdauer" DESC; Ü4.3.4 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access, OpenOffice.org Base SELECT * FROM tbKursbesuche ORDER BY KID ASC, Zahlweise ASC, Rabatt DESC; Ü4.4.1 MySQL, PostgreSQL, SQL Server, Oracle, Firebird, MS Access, OpenOffice.org Base SELECT Familienname, Vorname, PLZ, Ort, Geburtsdatum FROM tbPerson WHERE Ort = 'Braunschweig'; Ü4.4.2 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, OpenOffice.org Base SELECT Familienname, Vorname, PLZ, Ort, Geburtsdatum FROM tbPerson WHERE Ort LIKE 'B%' ORDER BY 4 ASC; MS Access SELECT Familienname, Vorname, PLZ, Ort, Geburtsdatum FROM tbPerson WHERE Ort LIKE 'B*' ORDER BY 4 ASC; Ü4.4.3 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, OpenOffice.org Base SELECT p.Familienname, p.Vorname, p.PLZ AS "kleiner 30000", p.Ort, p.Strasse FROM tbPerson p WHERE (p.PLZ < '30000') AND (p.Strasse LIKE '%allee%') ORDER BY p.PLZ ASC; MS Access SELECT p.Familienname, p.Vorname, p.PLZ AS "kleiner 30000", p.Ort, p.Strasse FROM tbPerson p WHERE (p.PLZ < '30000') AND (p.Strasse LIKE '*allee*') ORDER BY p.PLZ ASC; Ü4.4.4 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, OpenOffice.org Base SELECT Kursthema FROM tbKursthema WHERE (DauerPlan IN ('40', '80')) AND ((Kursthema LIKE '%Access%') OR (Kursthema LIKE '%Excel%') OR (Kursthema LIKE '%Datenbank%')); MS Access SELECT Kursthema FROM tbKursthema WHERE (DauerPlan IN (40,80)) AND ((Kursthema LIKE '*Access*') OR (Kursthema LIKE '*Excel*') OR (Kursthema LIKE '*Datenbank*')); Ü4.4.5 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, OpenOffice.org Base SELECT KID, Zahlweise, Rabatt, GezahlterBetrag FROM tbKursbesuche WHERE (KID = 'CE23') AND ((Zahlweise = 'Gutschein') OR ((Zahlweise != 'Gutschein') AND (GezahlterBetrag >= 250))) ORDER BY GezahlterBetrag DESC; MS Access SELECT KID, Zahlweise, Rabatt, GezahlterBetrag FROM tbKursbesuche WHERE (KID = 'CE23') AND ((Zahlweise = 'Gutschein') OR ((Zahlweise <> 'Gutschein') AND (GezahlterBetrag >= 250))) ORDER BY GezahlterBetrag DESC; Ü4.5.1.1 MySQL, PostgreSQL, Oracle, SQL Server, Oracle, Firebird, OpenOffice.org Base SELECT k.Kurskennung AS "Kennung", kt.Kursthema AS "Thema", k.KursdauerStunden "Tatsächliche Kursdauer", kt.DauerPlan AS "Geplante Kursdauer" FROM tbkurs k INNER JOIN tbKursthema kt ON k.KTHID = kt.KTHID ORDER BY k.Kurskennung ASC; MS Access SELECT k.Kurskennung AS [Kennung], kt.Kursthema AS [Thema], k.KursdauerStunden AS [Tatsächliche Kursdauer], kt.DauerPlan AS [Geplante Kursdauer] FROM tbKurs k INNER JOIN tbKursthema kt ON k.KTHID = kt.KTHID ORDER BY k.Kurskennung ASC; Ü4.5.1.2 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access SELECT p.Familienname, p.Vorname, p.PLZ, p.Ort, d.Stundensatz FROM tbdozent d INNER JOIN tbperson p ON d.PID = p.PID ORDER BY p.Familienname ASC, p.Vorname ASC; OpenOffice.org Base SELECT tbPerson.Familienname, tbPerson.Vorname, tbPerson.PLZ, tbPerson.Ort, tbDozent.Stundensatz FROM tbDozent INNER JOIN tbPerson ON tbDozent.PID = tbPerson.PID ORDER BY tbPerson.Familienname ASC, tbPerson.Vorname ASC; OpenOffice.org Base bietet je Nach Version teilweise nicht die Option ALIAS, um sie für Tabellen zu verwenden. Ü4.5.1.3 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access SELECT d.DID, d.Stundensatz, k.Kurskennung, k.Kursbeginn, k.Kursende FROM tbDozent d INNER JOIN tbKurs k ON (d.DID = k.DID) ORDER BY k.Kursbeginn ASC; OpenOffice.org Base SELECT tbDozent.DID, tbDozent.Stundensatz, tbkurs.Kurskennung, tbkurs.Kursbeginn, tbkurs.Kursende FROM tbDozent INNER JOIN tbkurs ON (tbDozent.DID = tbkurs.DID) ORDER BY tbkurs.Kursbeginn ASC; Ü4.5.1.4 MySQL, PostgreSQL, Oracle, SQL Server, Firebird SELECT DISTINCT kt.Kursthema FROM tbkursthema kt INNER JOIN tbkurs k ON (kt.KTHID = k.KTHID) WHERE ((kt.Kursbeschreibung LIKE '%Access%') OR (kt.Kursbeschreibung LIKE '%Excel%') OR (kt.Kursbeschreibung LIKE '%Datenbank%') AND (k.KursdauerStunden = 40)); MS Access SELECT DISTINCT kt.Kursthema FROM tbkursthema kt INNER JOIN tbkurs k ON (kt.KTHID = k.KTHID) WHERE ((kt.Kursbeschreibung LIKE '*Access*') OR (kt.Kursbeschreibung LIKE '*Excel*') OR (kt.Kursbeschreibung LIKE '*Datenbank*') AND (k.KursdauerStunden = 40)); OpenOffice.org Base SELECT DISTINCT tbKursthema.Kursthema FROM tbKursthema INNER JOIN tbkurs ON (tbKursthema.KTHID = tbkurs.KTHID) WHERE ((tbKursthema.Kursbeschreibung LIKE '%Access%') OR (tbKursthema.Kursbeschreibung LIKE '%Excel%') OR (tbKursthema.Kursbeschreibung LIKE '%Datenbank%') AND (tbkurs.KursdauerStunden = 40)); Ü4.5.2.1 MySQL, PostgreSQL, Oracle, SQL Server, Firebird SELECT DISTINCT p.Familienname, p.Vorname FROM (tbperson p INNER JOIN (tbKursbesuche kb INNER JOIN (tbKurs k INNER JOIN tbKursthema kt ON (k.KTHID = kt.KTHID)) ON (k.KID = kb.KID)) ON (p.PID = kb.KTID)) WHERE kt.Kursthema LIKE '%Access%' ORDER BY Familienname ASC, Vorname ASC; MS Access SELECT DISTINCT p.Familienname, p.Vorname FROM (tbperson p INNER JOIN (tbKursbesuche kb INNER JOIN (tbKurs k INNER JOIN tbKursthema kt ON (k.KTHID = kt.KTHID)) ON (k.KID = kb.KID)) ON (p.PID = kb.KTID)) WHERE kt.Kursthema LIKE '*Access*' ORDER BY Familienname ASC, Vorname ASC; OpenOffice.org Base SELECT tbPerson.Familienname, tbPerson.Vorname FROM tbkurs, tbKursthema, tbKursbesuche, tbPerson WHERE ( tbkurs.KTHID = tbKursthema.KTHID AND tbKursbesuche.KID = tbkurs.KID AND tbKursbesuche.KTID = tbPerson.PID ) AND ( (tbKursthema.Kursthema LIKE '%Access%' ) ) ORDER BY tbPerson.Familienname ASC, tbPerson.Vorname ASC; OpenOffice.org Base unterstützt INNER JOIN teilweise. Die Dokumentation rät davon ab und verweist auf die ursprüngliche "alte" SQL89 Syntax. Wie Sie an vorherigen Beispielen gesehen haben funktioniert INNER JOIN trotzdem in manchen Fällen. In komplexen Situationen ist dies aber nicht garantiert. Ü4.5.2.2 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access SELECT p.Familienname, p.Vorname, d.Stundensatz, k.Gebuehr FROM (tbperson p INNER JOIN (tbDozent d INNER JOIN tbKurs k ON (k.DID = d.DID)) ON (p.PID = d.PID)); OpenOffice.org Base SELECT tbPerson.Familienname, tbPerson.Vorname, tbDozent.Stundensatz, tbkurs.Gebuehr FROM tbPerson, tbDozent, tbkurs WHERE (tbkurs.DID = tbDozent.DID) AND (tbPerson.PID = tbDozent.PID); Ü4.5.2.3 MySQL, PostgreSQL, Oracle, SQL Server, Firebird SELECT kt.Kursthema, k.Kurskennung, p.Familienname, p.Vorname FROM tbKursthema kt INNER JOIN (tbkurs k INNER JOIN (tbDozent d INNER JOIN tbPerson p ON (d.PID = p.PID)) ON (k.DID = d.DID)) ON (d.PID = p.PID) ORDER BY p.Familienname; MS Access SELECT tbKursthema.Kursthema, tbKurs.Kurskennung, tbPerson.Familienname, tbPerson.Vorname FROM tbKursthema INNER JOIN ((tbPerson INNER JOIN tbDozent ON tbPerson.PID = tbDozent.PID) INNER JOIN tbKurs ON tbDozent.DID = tbKurs.DID) ON tbKursthema.KTHID = tbKurs.KTHID ORDER BY tbPerson.Familienname; OpenOffice.org Base SELECT tbKursthema.Kursthema, tbkurs.Kurskennung, tbPerson.Familienname, tbPerson.Vorname FROM tbKursthema, tbPerson, tbDozent, tbkurs WHERE ( tbPerson.PID = tbDozent.PID AND tbDozent.DID = tbkurs.DID AND tbKursthema.KTHID = tbkurs.KTHID) ORDER BY tbPerson.Familienname; Ü4.5.2.4 Anmerkung: Die Ergbnismenge der Abfrage ist mit dem Originaldatenbestand leer, da kein Dozent gleichzeitig Kursteilnehmer ist. Sie können aber ein Ergebnis erzeugen, indem Sie den Datenbestand leicht ändern. Ändern Sie bei den Kursbesuchen die KTID des Datensatzes mit der KBID 312 (2. Datensatz) Ändern Sie die KTID dabei von 4 auf 2. Die Abfrage liefert dann Bucz, Susanne als Ergebnis. MySQL, PostgreSQL, Oracle, SQL Server, Firebird SELECT p.Familienname, p.Vorname FROM tbPerson p INNER JOIN tbKursbesuche kb ON p.PID=kb.KTID INNER JOIN (tbDozent d INNER JOIN tbkurs k ON d.DID=k.DID) ON p.PID=d.PID WHERE k.KID != kb.KID; MS Access SELECT DISTINCT tbPerson.Familienname, tbPerson.Vorname FROM ((tbPerson INNER JOIN tbKursbesuche ON tbPerson.PID = tbKursbesuche.KTID) INNER JOIN tbDozent ON tbPerson.PID = tbDozent.PID) INNER JOIN tbKurs ON tbDozent.DID = tbKurs.DID WHERE tbKursbesuche.KID <> tbKurs.KID; OpenOffice.org Base SELECT DISTINCT tbPerson.Familienname, tbPerson.Vorname FROM tbPerson, tbKursbesuche, tbDozent, tbkurs WHERE tbPerson.PID = tbKursbesuche.KTID AND tbPerson.PID = tbDozent.PID AND tbDozent.DID = tbkurs.DID AND tbKursbesuche.KID != tbkurs.KID; Lösungen für den Bereich 4.5.3.x sind grundsätzlich nur mit MySQL, PostgreSQL, Oracle und SQL Server möglich. Ü4.5.3.1 SELECT k.Kurskennung AS "Kennung", kt.Kursthema AS "Thema", k.KursdauerStunden "Tatsächliche Kursdauer", kt.DauerPlan AS "Geplante Kursdauer" FROM tbkurs k NATURAL JOIN tbKursthema kt ORDER BY k.Kurskennung ASC; Ü4.5.3.2 MySQL, PostgreSQL. Oracle, SQL Server SELECT p.Familienname, p.Vorname, p.PLZ, p.Ort, d.Stundensatz FROM tbdozent d INNER JOIN tbperson p USING (PID) ORDER BY p.Familienname ASC, p.Vorname ASC; PostgreSQL, Oracle, SQL Server SELECT p.Familienname, p.Vorname, p.PLZ, p.Ort, d.Stundensatz FROM tbdozent d NATURAL JOIN tbperson p ORDER BY p.Familienname ASC, p.Vorname ASC; Ü4.5.3.3 Nicht möglich weil die Bedingung p.PID = kb.KTID nicht auf gleichnamigen Datenfeldern beruht. Ü4.5.3.4 MySQL, PostgreSQL, Oracle, SQL Server SELECT DID, p.Familienname, p.Vorname, d.Stundensatz, k.Gebuehr FROM (tbperson p NATURAL JOIN tbDozent d NATURAL JOIN tbKurs k); Die folgende Anweisung, führt in Oracle zu Problemen und einem Ergebnis mit 10 Datensätzen, da zunächst links ein kartesisches Produkt gebildet wird. SELECT DID, p.Familienname, p.Vorname, d.Stundensatz, k.Gebuehr FROM (tbperson p NATURAL JOIN (tbDozent d NATURAL JOIN tbKurs k)); Ü4.5.4.1 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access, OpenOffice.org Base (eventuell ohne Alias) SELECT kb.KTID, kb.GezahlterBetrag, k.Gebuehr FROM tbkurs k INNER JOIN tbKursbesuche kb ON (k.KID = kb.KID) AND (kb.GezahlterBetrag < k.Gebuehr); Ü4.5.4.2 MySQL, PostgreSQL, Oracle, SQL Server, Firebird SELECT k.Kurskennung FROM (tbPerson p INNER JOIN tbDozent d ON (p.PID = d.PID)) INNER JOIN tbkurs k ON (k.DID != d.DID) WHERE (p.Familienname = 'Weiss') AND (p.Vorname = 'Peter') AND (p.PLZ = '30529'); MS Access SELECT k.Kurskennung FROM (tbPerson p INNER JOIN tbDozent d ON (p.PID = d.PID)) INNER JOIN tbkurs k ON (k.DID <> d.DID) WHERE (p.Familienname = 'Weiss') AND (p.Vorname = 'Peter') AND (p.PLZ = '30529'); OpenOffice.org Base SELECT tbkurs.Kurskennung FROM tbPerson p, tbDozent, tbkurs WHERE (p.PID = tbDozent.PID) AND (tbkurs.DID != tbDozent.DID) AND (p.Familienname = 'Weiss') AND (p.Vorname = 'Peter') AND (p.PLZ = '30529'); Ü4.5.5.1 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access SELECT kt.Kursthema, k.Kurskennung, k.Kursbeginn, k.Kursende FROM tbkursthema kt LEFT OUTER JOIN tbkurs k ON kt.KTHID = k.KTHID; OpenOffice.org Base SELECT tbKursthema.Kursthema, tbkurs.Kurskennung, tbkurs.Kursbeginn, tbkurs.Kursende FROM tbKursthema LEFT OUTER JOIN tbkurs ON tbKursthema.KTHID = tbkurs.KTHID; Ü4.5.5.2 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access SELECT kb.KID, kb.Zahlweise, p.PID, p.Familienname, p.Vorname FROM tbkursbesuche kb RIGHT OUTER JOIN tbPerson p ON kb.KTID = p.PID ORDER BY p.Familienname ASC, p.Vorname ASC; OpenOffice.org Base SELECT tbKursbesuche.KID, tbKursbesuche.Zahlweise, tbPerson.PID, tbPerson.Familienname, tbPerson.Vorname FROM tbKursbesuche RIGHT OUTER JOIN tbPerson ON tbKursbesuche.KTID = tbPerson.PID ORDER BY tbPerson.Familienname ASC, tbPerson.Vorname ASC; Ü4.5.5.3 MySQL, PostgreSQL, SQL Server, Oracle, Firebird SELECT p.Familienname, p.Vorname, d.DID, d.Qualifikationen, kb.KID, kb.Zahlweise FROM tbkursbesuche kb RIGHT OUTER JOIN tbPerson p ON kb.KTID = p.PID LEFT OUTER JOIN tbDozent d ON p.PID = d.PID; MS Access SELECT p.Familienname, p.Vorname, d.DID, d.Qualifikationen, kb.KID, kb.Zahlweise FROM ( tbkursbesuche kb RIGHT OUTER JOIN tbPerson p ON (kb.KTID = p.PID)) LEFT OUTER JOIN tbDozent d ON (p.PID = d.PID); Klammern setzen! OpenOffice.org Base SELECT tbPerson.Familienname, tbPerson.Vorname, tbDozent.DID, tbDozent.Qualifikationen, tbKursbesuche.KID, tbKursbesuche.Zahlweise FROM tbKursbesuche RIGHT OUTER JOIN tbPerson ON ( tbKursbesuche.KTID = tbPerson.PID) LEFT OUTER JOIN tbDozent ON (tbPerson.PID = tbDozent.PID); Hier wieder ohne die Klammern. Man sieht, dass bei mehreren JOIN die Reihenfolge wichtig ist. Ü4.5.6.1 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access, OpenOffice.org Base SELECT DID, Stundensatz, Kursthema FROM tbdozent, tbkursthema; Ü4.5.6.2 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access, OpenOffice.org Base SELECT Familienname, Vorname, DID, Stundensatz, Kursthema FROM tbdozent INNER JOIN tbperson ON (tbdozent.PID = tbperson.PID), tbkursthema; Ü4.6.1 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access, OpenOffice.org Base SELECT Zahlweise, COUNT(*) FROM tbKursbesuche GROUP BY Zahlweise; Ü4.6.2 MySQL, PostgreSQL, Oracle, Firebird, OpenOffice.org Base SELECT KID, COUNT(*) FROM tbKursbesuche WHERE Selbstzahler = 'J' GROUP BY KID; SQL Server SELECT KID, COUNT(*) FROM tbKursbesuche WHERE Selbstzahler = 1 GROUP BY KID; MS Access SELECT KID, COUNT(*) FROM tbKursbesuche WHERE Selbstzahler = -1 GROUP BY KID; (Access) MS Access bildet Ja/Nein-Felder auf 0 (=Nein) -1(=Ja) ab. Ü4.6.3 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access, OpenOffice.org Base SELECT KID, COUNT(*) FROM tbKursbesuche WHERE KID IN ('CE17','CE23') GROUP BY KID ORDER BY 2 DESC; Ü4.6.4 MySQL, PostgreSQL, SQL Server, Oracle, Firebird, MS Access, OpenOffice.org Base SELECT COUNT(*) FROM tbKursbesuche; Ü4.6.5 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, OpenOffice.org Base SELECT tbKursbesuche.KID, MIN(Kursthema), SUM(Fehltage) FROM tbKursbesuche INNER JOIN tbkurs ON (tbKursbesuche.KID = tbkurs.KID) INNER JOIN tbKursthema ON (tbkurs.KTHID = tbKursthema.KTHID) GROUP BY tbKursbesuche.KID; Das Kursthema muss ebenfalls mit einer Aggregatfunktion versehen werden. Grundsätzlich müssen dies alle Felder, die nicht Teil der Gruppierung sind. Einige Datenbanken wie MySQL machen dies allerdings automatisch. Da hier alle Werte im Kursthema gleich sind, kann jede beliebige Funktion, die für alphanumerische Datentypen definiert ist, verwendet werden. MS Access SELECT tbKursbesuche.KID, MIN(Kursthema), SUM(Fehltage) FROM( tbKursbesuche INNER JOIN tbkurs ON (tbKursbesuche.KID = tbkurs.KID)) INNER JOIN tbKursthema ON (tbkurs.KTHID = tbKursthema.KTHID) GROUP BY tbKursbesuche.KID; In MS Access müssen wie üblich Klammern für die JOIN-Reihenfolge gesetzt werden, in den anderen Systemen wird die Reihenfolge automatisch richtig festgelegt. Sie können noch Alias für die Felder ergänzen. Ü4.7.1 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access, OpenOffice.org Base SELECT KID, MIN(Rabatt), Max(Rabatt) FROM tbKursbesuche GROUP BY KID HAVING Max(Rabatt) > 50 ORDER BY 3 DESC; Ü4.7.2 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access, OpenOffice.org Base SELECT KID, AVG(Rabatt) FROM tbKursbesuche GROUP BY KID HAVING AVG(GezahlterBetrag) < 250; Ü4.7.3 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access, OpenOffice.org Base SELECT Gebuehr, COUNT(*) AS Anzahl FROM tbkurs GROUP BY Gebuehr HAVING COUNT(*) > 1 ORDER BY Gebuehr ASC; Ü4.7.4 MySQL, PostgreSQL, Oracle, SQL Server, Firebird, MS Access, OpenOffice.org Base SELECT Gebuehr, COUNT(*) AS Anzahl FROM tbkurs WHERE Gebuehr >= 300 GROUP BY Gebuehr;