Ü6.2.1 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, Firebird, MS Access, OpenOffice.org Base SELECT p1.Vorname, p1.Familienname FROM tbPerson p1 WHERE p1.Geburtsdatum >= (SELECT MAX(p2.Geburtsdatum) FROM tbPerson p2); Beachten Sie bitte, dass MySQL und die anderen Datenbanken Tanja Schulze liefern, während Oracle Karl Schmidt angibt, offensichtlich die älteste Person. Dies liegt darin, dass Oracle in der Grundeinstellung Zahlen vor 1950 als 2049, 2048, ... interpretiert. Ü6.2.2 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, Firebird, MS Access, OpenOffice.org Base SELECT kb.KID, AVG(kb.Rabatt) FROM tbKursbesuche kb GROUP BY kb.KID HAVING AVG(kb.Rabatt) >= (SELECT AVG(kb2.Rabatt) FROM tbKursbesuche kb2); Ü6.2.3 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, Firebird, MS Access SELECT a.anr, a.bezeichnung, a.listenpreis FROM artikel a WHERE a.listenpreis > (SELECT AVG(a2.listenpreis) FROM artikel a2); OpenOffice.org Base SELECT a."anr", a."bezeichnung", a."listenpreis" FROM "ARTIKEL" a WHERE a."listenpreis" > (SELECT AVG(a2."listenpreis") FROM "ARTIKEL" a2); Ü6.2.4 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, Firebird, MS Access SELECT a.anr, a.bezeichnung, a.listenpreis FROM artikel a WHERE a.listenpreis >= (SELECT MAX(a2.listenpreis) FROM artikel a2); OpenOffice.org Base SELECT a."anr", a."bezeichnung", a."listenpreis" FROM "ARTIKEL" a WHERE a."listenpreis" >= (SELECT MAX(a2."listenpreis") FROM "ARTIKEL" a2); Ü6.2.5 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, Firebird, MS Access SELECT MAX(w.warengruppe), AVG(a.listenpreis) FROM warengruppe w INNER JOIN artikel a ON (w.kennziffer = a.wgknz) GROUP BY w.kennziffer HAVING AVG(a.listenpreis) >= (SELECT AVG(a2.listenpreis) FROM artikel a2); OpenOffice.org Base SELECT MAX(w."warengruppe"), AVG(a."listenpreis") FROM "WARENGRUPPE" w INNER JOIN "ARTIKEL" a ON (w."kennziffer" = a."wgknz") GROUP BY w."kennziffer" HAVING AVG(a."listenpreis") >= (SELECT AVG(a2."listenpreis") FROM "ARTIKEL" a2); Ü6.3.1 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, Firebird, MS Access, OpenOffice.org Base SELECT KBID, kb.GezahlterBetrag ,kb.KID FROM tbKursbesuche kb WHERE kb.GezahlterBetrag >= ALL (SELECT kb2.GezahlterBetrag FROM tbKursbesuche kb2); Ü6.3.2 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, Firebird, MS Access, OpenOffice.org Base SELECT KBID, kb.GezahlterBetrag ,kb.KID FROM tbKursbesuche kb WHERE kb.KID = 'CE23' AND kb.GezahlterBetrag >= ALL (SELECT kb2.GezahlterBetrag FROM tbKursbesuche kb2 WHERE kb2.KID='CE23'); Ü6.3.3 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, Firebird, MS Access, OpenOffice.org Base SELECT AVG(kb.GezahlterBetrag) ,kb.KID FROM tbKursbesuche kb GROUP BY kb.KID HAVING AVG(kb.GezahlterBetrag) >= ALL (SELECT AVG(kb2.GezahlterBetrag) FROM tbKursbesuche kb2 GROUP BY kb2.KID); Ü6.3.4 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, Firebird, MS Access SELECT kb.KTID, kb.gezahlterBetrag, kb.Rabatt, k.Gebuehr * (1-kb.Rabatt/100) AS "offener Betrag", k.Kurskennung, k.Gebuehr FROM tbKursbesuche kb INNER JOIN tbKurs k ON (kb.KID = k.KID) WHERE NOT (k.Gebuehr * (1-kb.Rabatt/100) > ANY (SELECT k2.Gebuehr * (1-kb2.Rabatt/100) FROM tbKursbesuche kb2 INNER JOIN tbKurs k2 ON (kb2.KID = k2.KID))); OpenOffice.org Base SELECT kb.KTID, kb.GezahlterBetrag, kb.Rabatt, k.Gebuehr * (1-kb.Rabatt/100) AS "offener Betrag", k.Kurskennung, k.Gebuehr FROM tbKursbesuche kb INNER JOIN tbkurs k ON (kb.KID = k.KID) WHERE NOT ((k.Gebuehr * (1-kb.Rabatt/100) > ANY (SELECT k2.Gebuehr * (1-kb2.Rabatt/100) FROM tbKursbesuche kb2 INNER JOIN tbkurs k2 ON (kb2.KID = k2.KID)))); Achtung: Man sieht den Datenfehler mit 150% Rabatt. Firebird kontrolliert auf negative Beträge, daher hier alles 0. Ü6.4.1 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, Firebird, MS Access SELECT a.anr, a.bezeichnung FROM artikel a WHERE NOT EXISTS (SELECT * FROM bestell_position bp WHERE a.anr = bp.anr); OpenOffice.org Base SELECT a."anr", a."bezeichnung" FROM "ARTIKEL" a WHERE NOT (EXISTS (SELECT * FROM "BESTELL_POSITION" bp WHERE a."anr" = bp."anr")); Beachten Sie die zusätzlichen Klammern für den Ausdruck hinter dem NOT. Ü6.4.2 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, Firebird, MS Access SELECT DISTINCT b.bnr, b.bestelldatum FROM bestellung b INNER JOIN bestell_position bp ON (b.mid = bp.mid AND b.bnr = bp.bnr) WHERE bp.anr IN (SELECT a.anr FROM artikel a WHERE a.wgknz = 9); OpenOffice.org Base SELECT DISTINCT b."bnr", b."bestelldatum" FROM "BESTELLUNG" b INNER JOIN "BESTELL_POSITION" bp ON (b."mid" = bp."mid" AND b."bnr" = bp."bnr") WHERE bp."anr" IN (SELECT a."anr" FROM "ARTIKEL" a WHERE a."wgknz" = 9); Ü6.4.3 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, Firebird, MS Access SELECT DISTINCT b.bnr, MAX(b.bestelldatum), COUNT(bp.pos) AS "Anzahl Bestellpositionen" FROM bestellung b INNER JOIN bestell_position bp ON (b.mid = bp.mid AND b.bnr = bp.bnr) WHERE bp.anr IN (SELECT a.anr FROM artikel a WHERE a.wgknz = 9) GROUP BY b.bnr OpenOffice.org Base SELECT DISTINCT b."bnr", MAX(b."bestelldatum"), COUNT(bp."pos") AS "Anzahl Bestellpositionen" FROM "BESTELLUNG" b INNER JOIN "BESTELL_POSITION" bp ON (b."mid" = bp."mid" AND b."bnr" = bp."bnr") WHERE bp."anr" IN (SELECT a."anr" FROM "ARTIKEL" a WHERE a."wgknz" = 9) GROUP BY b."bnr"; Ü6.4.4 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, Firebird, MS Access SELECT nachname, vorname FROM kunden k WHERE NOT EXISTS (SELECT * FROM bestellung b WHERE k.mid = b.mid AND k.kid = b.kid); OpenOffice.org Base SELECT "nachname", "vorname" FROM "KUNDE" k WHERE NOT (EXISTS (SELECT * FROM "BESTELLUNG" b WHERE k."mid" = b."mid" AND k."kid" = b."kid")); Ü6.7.1 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, MS Access, Firebird (ab 2.1) SELECT a.anr, a.bezeichnung, a.listenpreis AS "Nettopreis", ROUND(a.listenpreis * (1 + m.mwst_satz/100),2) AS "Bruttopreis" FROM artikel a INNER JOIN mwst m ON (a.mwst_art = m.mwst_art); Firebird (ältere Versionen) SELECT a.anr, a.bezeichnung, a.listenpreis AS "Nettopreis", a.listenpreis * (1 + m.mwst_satz/100) AS "Bruttopreis" FROM artikel a INNER JOIN mwst m ON (a.mwst_art = m.mwst_art); OpenOffice.org Base SELECT a."anr", a."bezeichnung", a."listenpreis" AS "Nettopreis", ROUND(a."listenpreis" * (1 + m."mwst_satz"/100),2) AS "Bruttopreis" FROM "ARTIKEL" a INNER JOIN "MWST" m ON (a."mwst_art" = m."mwst_art"); Ü6.7.2 MySQL, MariaDB SELECT bp.mid, bp.bnr, bp.pos, bp.anzahl, bp.anr, bp.anzahl * a2.Nettopreis AS "Netto", bp.anzahl * a2.Bruttopreis AS "Brutto" FROM bestell_position bp INNER JOIN (SELECT a.anr, a.bezeichnung, a.listenpreis AS "Nettopreis", ROUND(a.listenpreis * (1 + m.mwst_satz/100),2) AS "Bruttopreis" FROM artikel a INNER JOIN mwst m ON (a.mwst_art = m.mwst_art)) AS a2 ON bp.anr = a2.anr; MS Access SELECT bp.mid, bp.bnr, bp.pos, bp.anzahl, bp.anr, bp.anzahl * a2.Nettopreis AS [Netto], bp.anzahl * a2.Bruttopreis AS [Brutto] FROM bestell_position bp INNER JOIN (SELECT a.anr, a.bezeichnung, a.listenpreis AS [Nettopreis], ROUND(a.listenpreis * (1 + m.mwst_satz/100),2) AS [Bruttopreis] FROM artikel a INNER JOIN mwst m ON (a.mwst_art = m.mwst_art)) a2 ON (bp.anr = a2.anr); PostgreSQL, SQL Server, Oracle, Firebird (ab 2.1) SELECT bp.mid, bp.bnr, bp.pos, bp.anzahl, bp.anr, bp.anzahl * a2."Nettopreis" AS "Netto", bp.anzahl * a2."Bruttopreis" AS "Brutto" FROM bestell_position bp INNER JOIN (SELECT a.anr, a.bezeichnung, a.listenpreis AS "Nettopreis", ROUND(a.listenpreis * (1 + m.mwst_satz/100),2) AS "Bruttopreis" FROM artikel a INNER JOIN mwst m ON (a.mwst_art = m.mwst_art)) a2 ON (bp.anr = a2.anr); Firebird (ältere Versionen) SELECT bp.mid, bp.bnr, bp.pos, bp.anzahl, bp.anr, bp.anzahl * a2."Nettopreis" AS "Netto", bp.anzahl * a2."Bruttopreis" AS "Brutto" FROM bestell_position bp INNER JOIN (SELECT a.anr, a.bezeichnung, a.listenpreis AS "Nettopreis", (a.listenpreis * (1 + m.mwst_satz/100)) AS "Bruttopreis" FROM artikel a INNER JOIN mwst m ON (a.mwst_art = m.mwst_art)) AS a2 ON bp.anr = a2.anr; OpenOffice.org Base SELECT bp."mid", bp."bnr", bp."pos", bp."anzahl", bp."anr", bp."anzahl" * a2."Nettopreis" AS "Netto", bp."anzahl" * a2."Bruttopreis" AS "Brutto" FROM "BESTELL_POSITION" bp INNER JOIN (SELECT a."anr", a."bezeichnung", a."listenpreis" AS "Nettopreis", ROUND(a."listenpreis" * (1 + m."mwst_satz"/100),2) AS "Bruttopreis" FROM "ARTIKEL" a INNER JOIN "MWST" m ON (a."mwst_art" = m."mwst_art")) AS a2 ON bp."anr" = a2."anr"; Ü6.7.3 MySQL, MariaDB SELECT b.bnr, MAX(b.kid) AS "Kundennummer", MAX(b.bestelldatum) AS "Bestelldatum", SUM(a3.Netto) AS "Bestellwert Netto", SUM(a3.Brutto) AS "Bestellwert Brutto" FROM bestellung b INNER JOIN (SELECT bp.mid, bp.bnr, bp.pos, bp.anzahl, bp.anr, bp.anzahl * a2.Nettopreis AS "Netto", bp.anzahl * a2.Bruttopreis AS "Brutto" FROM bestell_position bp INNER JOIN (SELECT a.anr, a.bezeichnung, a.listenpreis AS "Nettopreis", ROUND(a.listenpreis * (1 + m.mwst_satz/100),2) AS "Bruttopreis" FROM artikel a INNER JOIN mwst m ON (a.mwst_art = m.mwst_art)) AS a2 ON (bp.anr = a2.anr)) AS a3 ON b.mid = a3.mid AND b.bnr = a3.bnr GROUP BY b.bnr; PostgreSQL, SQL Server, Oracle, Firebird (ab 2.1) SELECT b.bnr, MAX(b.kid) AS "Kundennummer", MAX(b.bestelldatum) AS "Bestelldatum", SUM(a3."Netto") AS "Bestellwert Netto", SUM(a3."Brutto") AS "Bestellwert Brutto" FROM bestellung b INNER JOIN (SELECT bp.mid, bp.bnr, bp.pos, bp.anzahl, bp.anr, bp.anzahl * a2."Nettopreis" AS "Netto", bp.anzahl * a2."Bruttopreis" AS "Brutto" FROM bestell_position bp INNER JOIN (SELECT a.anr, a.bezeichnung, a.listenpreis AS "Nettopreis", ROUND(a.listenpreis * (1 + m.mwst_satz/100),2) AS "Bruttopreis" FROM artikel a INNER JOIN mwst m ON (a.mwst_art = m.mwst_art)) a2 ON (bp.anr = a2.anr)) a3 ON ((b.mid = a3.mid) AND (b.bnr = a3.bnr)) GROUP BY b.bnr; Firebird (ältere Versionen) SELECT b.bnr, MAX(b.kid) AS "Kundennummer", MAX(b.bestelldatum) AS "Bestelldatum", SUM(a3."Netto") AS "Bestellwert Netto", SUM(a3."Brutto") AS "Bestellwert Brutto" FROM bestellung b INNER JOIN (SELECT bp.mid, bp.bnr, bp.pos, bp.anzahl, bp.anr, bp.anzahl * a2."Nettopreis" AS "Netto", bp.anzahl * a2."Bruttopreis" AS "Brutto" FROM bestell_position bp INNER JOIN (SELECT a.anr, a.bezeichnung, a.listenpreis AS "Nettopreis", a.listenpreis * (1 + m.mwst_satz/100) AS "Bruttopreis" FROM artikel a INNER JOIN mwst m ON (a.mwst_art = m.mwst_art)) AS a2 ON bp.anr = a2.anr) AS a3 ON b.mid = a3.mid AND b.bnr = a3.bnr GROUP BY b.bnr; MS Access SELECT b.bnr, MAX(b.kid) AS [Kundennummer], MAX(b.bestelldatum) AS [Bestelldatum], SUM(a3.Netto) AS [Bestellwert Netto], SUM(a3.Brutto) AS [Bestellwert Brutto] FROM bestellung b INNER JOIN (SELECT bp.mid, bp.bnr, bp.pos, bp.anzahl, bp.anr, bp.anzahl * a2.Nettopreis AS [Netto], bp.anzahl * a2.Bruttopreis AS [Brutto] FROM bestell_position bp INNER JOIN (SELECT a.anr, a.bezeichnung, a.listenpreis AS [Nettopreis], ROUND(a.listenpreis * (1 + m.mwst_satz/100),2) AS [Bruttopreis] FROM artikel a INNER JOIN mwst m ON (a.mwst_art = m.mwst_art)) AS a2 ON bp.anr = a2.anr) AS a3 ON b.mid = a3.mid AND b.bnr = a3.bnr GROUP BY b.bnr; OpenOffice.org Base SELECT b."bnr", MAX(b."kid") AS "Kundennummer", MAX(b."bestelldatum") AS "Bestelldatum", SUM(a3."Netto") AS "Bestellwert Netto", SUM(a3."Brutto") AS "Bestellwert Brutto" FROM "BESTELLUNG" b INNER JOIN (SELECT bp."mid", bp."bnr", bp."pos", bp."anzahl", bp."anr", bp."anzahl" * a2."Nettopreis" AS "Netto", bp."anzahl" * a2."Bruttopreis" AS "Brutto" FROM "BESTELL_POSITION" bp INNER JOIN (SELECT a."anr", a."bezeichnung", a."listenpreis" AS "Nettopreis", ROUND(a."listenpreis" * (1 + m."mwst_satz"/100),2) AS "Bruttopreis" FROM "ARTIKEL" a INNER JOIN "MWST" m ON (a."mwst_art" = m."mwst_art")) AS a2 ON bp."anr" = a2."anr") AS a3 ON b."mid" = a3."mid" AND b."bnr" = a3."bnr" GROUP BY b."bnr";