1. Geben Sie die Bezeichnung und das Gewicht aller Produkte aus. SELECT bezeichnung, gewicht FROM produkt; 2. Geben Sie die Bezeichnung und den Schätzwert aller Kunstwerke aus und sortieren Sie die Liste nach Gewicht. SELECT bezeichnung, schaetzwert FROM produkt AS p, kunstwerk AS k WHERE p.nummer = k.nummer ORDER BY gewicht ASC; 3. Geben Sie die Bezeichnung und das Gewicht aller Kunstwerke aus, für die der Schätzwert kleiner als 5000 Euro ist und sortieren Sie das Ergebnis nach dem Schätzwert. SELECT bezeichnung, gewicht FROM produkt AS p, kunstwerk AS k WHERE p.nummer = k.nummer AND schaetzwert < 5000 ORDER BY schaetzwert ASC; 4. Geben Sie für alle gekündigten Mitarbeiter den Namen (Vorname und Nachname) und das Kündigungsdatum aus. SELECT vorname, nachname, kuendigungsdatum FROM person AS p, kuendigung AS k WHERE p.nummer = k.nummer; 5. 5.1. Wieviele Maschinen werden benötigt um 'Mika Fender' herzustellen? SELECT COUNT(*) FROM erzeugt, produkt WHERE pnummer = nummer AND bezeichnung = 'Mika Fender'; 5.2. Geben Sie die Namen der Produkte aus, die von Maschinen erzeugt wurden und geben Sie die Anzahl der benötigten Maschinen aus. SELECT bezeichnung, COUNT(pnummer) FROM produkt, erzeugt WHERE pnummer = nummer GROUP BY pnummer, bezeichnung; 5.3. Geben Sie an, welche Produkte die meisten Maschinen für deren Herstellung benötigen. Geben Sie dafür die Bezeichnung und die Anzahl aus. SELECT bezeichnung, COUNT(pnummer) FROM produkt, erzeugt WHERE pnummer = nummer GROUP BY pnummer, bezeichnung HAVING COUNT(pnummer) = ( SELECT COUNT(pnummer) AS cnt FROM produkt, erzeugt WHERE pnummer = nummer GROUP BY pnummer ORDER BY cnt DESC LIMIT 1 ); oder: SELECT bezeichnung, COUNT(pnummer) FROM produkt, erzeugt WHERE pnummer = nummer GROUP BY pnummer, bezeichnung HAVING COUNT(pnummer) = ( SELECT MAX(cnt) FROM ( SELECT COUNT(pnummer) AS cnt FROM produkt, erzeugt WHERE pnummer = nummer GROUP BY pnummer ) AS max ); 6. Geben Sie den durchschnittlichen Preis aller Produte des Standardsortiments aus, die in Plastik ('Plastiksackerl' oder 'Plastikfolie bedruckt') verpackt sind. SELECT AVG(preis) FROM standardsortiment WHERE verpackung = 'Plastiksackerl' OR verpackung = 'Plastikfolie bedruckt'; 7. Geben Sie für Standardprodukte (Nummer und Bezeichnung) aus, mit welchen Maschinen (Nummer und Beschreibung) sie erzeugt wurden. SELECT p.nummer AS pnr, p.bezeichnung, m.nummer AS mnr, m.beschreibung FROM standardsortiment AS s, produkt AS p, erzeugt AS e, maschine AS m WHERE s.nummer = p.nummer AND p.nummer = e.pnummer AND e.maschnummer = m.nummer; 8. 8.1. Geben Sie eine Liste ALLER Kunstwerke (Bezeichnung) aus und bei welchen Kunstschauen (Name und Datum) sie ausgestellt wurden. Wenn ein Kunstwerk nicht ausgestellt wurde geben Sie an Stelle des Namens der Ausstellung 'unter Verschluss' und statt dem Datum das aktuelle Datum aus (Stichwort COALESCE). SELECT p.bezeichnung, COALESCE(z.name, 'unter Verschluss') AS name, COALESCE(z.datum, DATE(NOW())) AS date FROM produkt AS p, kunstwerk AS k LEFT JOIN zeigt AS z ON (z.kunstwerknummer = k.nummer) WHERE p.nummer = k.nummer; 8.2. Geben Sie eine Liste ALLER Kunstwerke aus und wenn das Kunstwerk in Österreich ausgestellt wurde, bei welchen Kunstschauen (Name und Datum) es ausgestellt wurden. Wenn ein Kunstwerk nicht oder nicht in Österreich ausgestellt wurde geben Sie anstelle des Datums das aktuelle Datum und anstelle des Namens 'keine Ausstellung in AUT' SELECT p.bezeichnung, COALESCE(aut.name, 'keine Ausstellung in AUT') AS name, COALESCE(aut.datum, DATE(NOW())) AS date FROM produkt AS p, kunstwerk AS k LEFT JOIN ( SELECT k.name, k.datum, z.kunstwerknummer FROM kunstschau AS k, zeigt AS z WHERE k.name = z.name AND k.datum = z.datum AND k.land = 'Oesterreich' ) AS aut ON (k.nummer = aut.kunstwerknummer) WHERE p.nummer = k.nummer; 9. 9.1. Geben Sie das erste Kündigungsdatum aus. SELECT kuendigungsdatum FROM kuendigung ORDER BY kuendigungsdatum ASC LIMIT 1; 9.2. Geben Sie die Namen und Vornamen jener Mitarbeiter aus, die als erstes gekündigt wurden. SELECT vorname, nachname FROM person WHERE nummer IN ( SELECT nummer FROM kuendigung WHERE kuendigungsdatum = ( SELECT kuendigungsdatum FROM kuendigung ORDER BY kuendigungsdatum ASC LIMIT 1 ) ); 10. Geben Sie jene Künstler aus (Name und Vorname), die an allen Kunstschauen in Graz teilgenommen haben. SELECT vorname, nachname FROM person WHERE nummer IN ( SELECT knummer FROM ( SELECT DISTINCT knummer, z.datum, z.name FROM zeigt AS z, kunstschau AS ks WHERE z.datum = ks.datum AND z.name = ks.name AND ks.ort = 'Graz' ) AS tmp GROUP BY knummer HAVING COUNT(knummer) = ( SELECT COUNT(*) FROM kunstschau WHERE ort = 'Graz' ) ); 11. Geben Sie Produktnummer und Bezeichnung aller Produkte aus, die in der Produktion nicht durch die Füllanlage 1 gehen. SELECT nummer, bezeichnung FROM produkt WHERE nummer NOT IN ( SELECT DISTINCT pnummer FROM maschine AS m, erzeugt AS e WHERE m.beschreibung = 'Fuellanlage 1' AND m.nummer = e.maschnummer ); 12. 12.1. Geben Sie für jeden Kunden (Name und Adresse) die Anzahl der jeweiligen Aufträge aus, die noch nicht abgeschlossen wurden. SELECT k.firmenname, k.adresse, COUNT(a.firmenname) FROM auftrag AS a, kunde AS k WHERE a.status != 'abgeschlossen' AND a.firmenname = k.firmenname GROUP BY k.firmenname, k.adresse; 12.2. Geben Sie aus, wieviele Kunden mit nicht abgeschlossen Aufträgen es gibt. SELECT COUNT(DISTINCT firmenname) FROM auftrag WHERE status != 'abgeschlossen'; 13. Geben Sie Namen und Vornamen des bekanntesten Künstlers aus, der nicht auch Mitarbeiter im Unternehmen ist. SELECT p.vorname, p.nachname FROM kuenstler AS k, person AS p WHERE k.nummer = p.nummer AND k.nummer NOT IN ( SELECT nummer FROM mitarbeiter WHERE nummer NOT IN ( SELECT nummer FROM kuendigung ) ) AND k.bekanntheit = ( SELECT MAX(bekanntheit) FROM kuenstler WHERE nummer NOT IN ( SELECT nummer FROM mitarbeiter ) AND nummer NOT IN ( SELECT nummer FROM kuendigung ) ); 14. Geben Sie die Namen und Vornamen jener Künstler aus, die auch Mitarbeiter des Unternehmens sind und einen größeren Bekanntheitsgrad als 6 haben. SELECT p.vorname, p.nachname FROM kuenstler AS k, person AS p WHERE k.nummer IN ( SELECT nummer FROM mitarbeiter WHERE nummer NOT IN ( SELECT nummer FROM kuendigung ) ) AND k.nummer = p.nummer AND k.bekanntheit > 6; 15. Geben Sie Name, Vorname und Nummer jener Künstler aus, die bei Kunstschauen die meisten Werke ausgestellt haben. SELECT vorname, nachname, nummer FROM zeigt, person GROUP BY vorname, nachname, knummer, nummer HAVING COUNT(DISTINCT kunstwerknummer) = ( SELECT COUNT(DISTINCT kunstwerknummer) AS cnt FROM zeigt GROUP BY knummer ORDER BY cnt DESC LIMIT 1 ) AND knummer = nummer; 16. Gesucht sind Nummer, Vorname und Nachname jener Mitarbeiter, die alle Maschinen bedienen können. SELECT m.nummer, p.vorname, p.nachname FROM mitarbeiter AS m, bedient, person AS p WHERE m.nummer NOT IN( SELECT nummer FROM kuendigung ) AND m.nummer = mitnummer AND m.nummer = p.nummer GROUP BY m.nummer, p.vorname, p.nachname, p.nummer HAVING COUNT(mitnummer) = ( SELECT COUNT(*) FROM maschine ); 17. Geben Sie eine Liste ALLER Lager (Bezeichnung und Fläche) aus mit folgenden Infos: die Fläche des Lagers, die Anzahl der verschiedenen Produkte die darin gelagert werden, sowie die Gesamtmenge aller Produkte. SELECT l1.bezeichnung, l1.flaeche, COUNT(l2.pnummer) AS cnt, COALESCE(SUM(l2.menge), 0) AS amount FROM lager AS l1 LEFT JOIN lagert AS l2 ON (l1.bezeichnung = l2.bezeichnung) GROUP BY l1.bezeichnung, l1.flaeche; 18. Bei wievielen Kunstschauen in Österreich konnten Künstler einen Platz unter den ersten drei machen? SELECT COUNT(*) FROM ( SELECT k.datum, k.name FROM kunstschau AS k, zeigt AS z WHERE k.land = 'Oesterreich' AND k.datum = z.datum AND k.name = z.name AND z.platz <= 3 GROUP BY k.datum, k.name ) AS foo; 19. Geben Sie eine nach Plätzen sortierte Liste der Plätze aus, die je mit Kunstwerken in Österreich gemacht wurden, und dazu die Anzahl der Plätze. SELECT z.platz, COUNT(z.platz) AS cnt FROM kunstschau AS k, zeigt AS z WHERE k.land = 'Oesterreich' AND k.datum = z.datum AND k.name = z.name GROUP BY z.platz ORDER BY z.platz ASC; 20. Gesucht sind Vorname und Nachname jener Personen, die keine Künstler sind, nicht gekündigt wurden und mindestens einen Mischer bedienen können. SELECT vorname, nachname FROM person WHERE nummer NOT IN ( SELECT nummer FROM kuenstler ) AND nummer NOT IN ( SELECT nummer FROM kuendigung ) AND nummer IN ( SELECT mitnummer FROM bedient, maschine WHERE maschnummer = nummer AND beschreibung = 'Mischer' ); 21. Schnäppchen sind entweder Kunstwerke mit einem Schätzwert unter 2000 Euro oder Süßigkeiten unter 3 Euro. Geben Sie eine Liste von Schnäppchen (bezeichnung und gewicht) aus. Vermerken Sie dabei auch in einer eigenen Spalte, die Sie 'ist' nennen, ob es sich um ein Kunstwerk oder ein Produkt aus dem Standardsortiment handelt. (Hinweis: Verwenden Sie das keyword union). SELECT p.bezeichnung, p.gewicht, ist FROM ( SELECT nummer, 'Kunstwerk' AS ist FROM kunstwerk WHERE schaetzwert < 2000 UNION SELECT nummer, 'Standardsortiment' AS ist FROM standardsortiment WHERE preis < 3 ) AS foo, produkt AS p WHERE foo.nummer = p.nummer; 22. Erstellen Sie eine Liste ALLER Kunden (Firmennamen) und geben Sie zu jedem Kunden den Gesamtpreis der in sämtlichen Aufträgen bestellten Produkten aus dem Standardsortiment. Nennen Sie diese Spalte Gesamtpreis und sortieren Sie die Liste danach. SELECT e.firmenname, SUM(e.menge * s.preis) AS gesamtpreis FROM enthaelt AS e, standardsortiment AS s WHERE e.pnummer = s.nummer GROUP BY e.firmenname ORDER BY gesamtpreis ASC; 23. Geben Sie eine Liste ALLER Künstler (Vor- und Nachname) aus und das Datum des letzten Kunstschau, an der dieser Künstler teilgenommen hat. SELECT p.vorname, p.nachname, MAX(z.datum) AS datum FROM person AS p, kuenstler AS k LEFT JOIN zeigt AS z ON (z.knummer = k.nummer) WHERE k.nummer = p.nummer GROUP BY k.nummer, p.vorname, p.nachname; 24. Geben Sie die Bezeichung und die Fläche jener Lager aus in denen mehr als 20% der Produkte lagern. SELECT l1.bezeichnung, l1.flaeche FROM lager AS l1, lagert AS l2 WHERE l1.bezeichnung = l2.bezeichnung GROUP BY l1.bezeichnung, l1.flaeche HAVING SUM(l2.menge) > ( SELECT SUM(menge)*0.2 FROM lagert );