Berechnung des durchschnittlichen Verkaufspreises aller Produkte.
SELECTAvg(vkpreis) AS Durchschnittspreis
FROMmydb.produkt;
Ermitteln der Mitarbeitern mit Rolle
SELECTm.idmitarbeiterAS"Mitarbeiter ID",
m.nachnameAS"Nachname",
m.vornameAS"Vorname",
r.NAMEAS"Rolle"FROMmydb.mitarbeiter m
JOINmydb.mitarbeiter_hat_rollen mr
ONm.idmitarbeiter=mr.mitarbeiter_idmitarbeiterJOINmydb.rolle r
ONmr.rolle_idrolle=r.idrolle;
Berechnung der Gesamtzahl der Mitarbeiter in jeder Stadt.
SELECTmydb.plz.stadt,
Count(*) AS Anzahl_Mitarbeiter
FROMmydb.mitarbeiterINNER JOINmydb.adresseONmydb.mitarbeiter.adresse_idadresse =mydb.adresse.idadresse
INNER JOINmydb.plzONmydb.adresse.plz_idplz =mydb.plz.idplz
GROUP BY mydb.plz.stadt;
Auswahl aller Lieferanten, die mehr als 10 Produkte liefern.
SELECTmydb.lieferant.idlieferant,
mydb.lieferant.NAME,
Count(mydb.produkt_hat_lieferant.produkt_produktid) AS AnzahlProdukte
FROMmydb.lieferantINNER JOINmydb.produkt_hat_lieferantONmydb.lieferant.idlieferant =mydb.produkt_hat_lieferant.lieferant_idlieferant
GROUP BY mydb.lieferant.idlieferant,
mydb.lieferant.NAME
HAVINGCount(mydb.produkt_hat_lieferant.produkt_produktid) >10;
Aktualisierung des Bestands eines bestimmten Produkts (Auslösung des Triggers zur Bestellung).
UPDATEmydb.produktSET bestand =4WHERE idprodukt =1;
SELECT*FROMmydb.bestellungen;
Auswahl aller Produkte, die nicht im Bestand sind
SELECT*FROMmydb.produktWHERE bestand =0;
Ermittlung der Anzahl der Verkäufe pro Produkt.
SELECT produkt_produktid,
Count(*) AS Anzahl_Verkaeufe
FROMmydb.produktverkauf
GROUP BY produkt_produktid;
Rekursive Anfrage zur Ermittlung aller Vertretungen für eine gegebene Vertretung (idVertretung = 1).
WITH recursive vertretungskette AS
(
SELECTv.idvertretung,
v.vertretung_idvertretung,
v.vertretungsgrund,
m.vorname,
m.nachnameFROMmydb.vertretung v
JOINmydb.mitarbeiter m
ONv.vertretenermitarbeiter_id=m.idmitarbeiterWHEREv.idvertretung=1UNION ALLSELECTv.idvertretung,
v.vertretung_idvertretung,
v.vertretungsgrund,
m.vorname,
m.nachnameFROMmydb.vertretung v
JOIN vertretungskette
ONv.vertretung_idvertretung=vertretungskette.idvertretungJOINmydb.mitarbeiter m
ONv.vertretenermitarbeiter_id=m.idmitarbeiter )
SELECT*FROM vertretungskette;
Alle Produkte, welchen einen geringen Bestand haben und noch nicht bestellt sind.
SELECT*FROMmydb.produktAS p
WHERE bestand <=5AND NOT EXISTS (SELECT1FROMmydb.bestellung_haben_produkteAS bhp
JOINmydb.bestellungenAS b
ONb.idbestellungen=bhp.bestellungen_idbestellungenWHEREbhp.produkt_idprodukt=p.idproduktANDb.bestellstatus='Bestellt');
Alle Kategorien auflisten, welche mehr als 5 Produkte haben und sortiere diese absteigend.
SELECTCount(idprodukt) AS Menge,
kategorie
FROMmydb.produkt
GROUP BY kategorie
HAVINGCount(idprodukt) >=5
ORDER BY kategorie DESC;
Sind alle Produkte im Bestand (Allquantor)
SELECT CASE
WHEN NOT EXISTS (SELECT*FROMmydb.produktWHERE bestand <=0) THEN
'Ja, alle Produkte sind im Bestand.'
ELSE 'Nein, nicht alle Produkte sind im Bestand.'
END AS AllquantorErgebnis;
Alle Adressen ausgeben, die keinem Mitarbeiter zugeordnet sind
SELECTa.straße,
a.hausnummer,
a.plz_idplzFROMmydb.mitarbeiter m
RIGHT OUTER JOINmydb.adresse a
ONm.adresse_idadresse=a.idadresseWHEREm.idmitarbeiter IS NULL;
Produktpreise (EK) updaten. Basierend auf der Tabelle Lieferantenpreise
UPDATEmydb.produktSET ekpreis = (SELECT neuerekpreis
FROMmydb.lieferantenpreiseWHEREmydb.produkt.idprodukt =mydb.lieferantenpreise.produktid
ORDER BY idlieferantenpreise DESCLIMIT1)
WHERE EXISTS (SELECT1FROMmydb.lieferantenpreiseWHEREmydb.produkt.idprodukt =mydb.lieferantenpreise.produktid)
;