81 Lassen Sie sich alle Spieler anzeigen.... SELECT 1 Vorbereitung select * from spieler 2 82 Lassen sie sich alle Produkte anzeigen! SELECT 0 Abfragen select * from produktlager 2 84 Welche Spieler schossen am ersten Spieltag ein Tor? SELECT 1 Abfragen select distinct pname from schiesst where spieltag=1 2 85 Welche Sturmer bekommen ein Gehalt vom mehr als 1000 EUR? SELECT 1 Abfragen select vertrag.pname from vertrag, stuermer where vertrag.pname = stuermer.pname and gehalt > 1000 2 86 Wann spielten Mannschaften aus den selben Orten gegeneinander? SELECT 1 Abfragen select s1.spieltag from mannschaft m1, spiel s1, mannschaft m2 where m1.mname=s1.heim and m2.mname=s1.gast and m1.heimatort=m2.heimatort 2 87 Welche Schiris sind auch Spieler? SELECT 1 Abfragen select pname from schiri where pname in (select pname from spieler) 2 88 Welche Spieler schossen mehr als ein Tor? SELECT 1 Abfragen select distinct s1.pname from schiesst s1, schiesst s2 where s1.pname=s2.pname and (s1.spieltag<>s2.spieltag or s1.heim<>s2.heim or s1.gast<>s2.gast or s1.spielminute <> s2.spielminute) 2 89 Welche Spieler schossen am selben Tag mehr als ein Tor? SELECT 1 Abfragen select distinct s1.pname from schiesst s1, schiesst s2 where s1.pname=s2.pname and s1.spieltag=s2.spieltag and (s1.heim<>s2.heim or s1.gast<>s2.gast or s1.spielminute <> s2.spielminute) 2 90 Welche Spieler schossen kein Tor? SELECT 1 Abfragen select pname from spieler where pname not in (select pname from schiesst) 2 91 Welcher Torwart schoss ein Eigentor? SELECT 1 Abfragen select p.pname from torwart p, tor, schiesst where p.pname=schiesst.pname and schiesst.spieltag=tor.spieltag and schiesst.heim=tor.heim and schiesst.gast=tor.gast and schiesst.spielminute=tor.spielminute and tor.eigentor=1 2 92 Welche Mannschaft erzielte noch kein Eigentor? SELECT 1 Abfragen select mname from mannschaft where mname not in (select m.mname from mannschaft m, vertrag v, schiesst s, tor t where m.mname=v.mname and v.pname=s.pname and s.spieltag=t.spieltag and s.heim=t.heim and s.gast=t.gast and s.spielminute=t.spielminute and t.eigentor=1) 2 93 Welche Mannschaft sprengt ihren Etat? SELECT 1 Abfragen select m1.mname from (select m.mname,sum(v.gehalt) as gehalt from mannschaft m,vertrag v where m.mname=v.mname group by m.mname) m1, mannschaft m2 where m1.mname=m2.mname and m2.etat < m1.gehalt 2 94 Wer schoss in der ersten Halbzeit die meisten Tore? SELECT 1 Abfragen select pname from schiesst where spielminute <= 45 group by pname having count(*) >= all(select count(*) from schiesst where spielminute <= 45 group by pname) 2 95 Wer bekommt das hochste Gehalt? SELECT 1 Abfragen select pname from vertrag where gehalt >= all(select gehalt from vertrag) 2 96 Wer bekommt das zweit-hochste Gehalt? SELECT 1 Abfragen with r as (select pname,gehalt from vertrag where gehalt <> (select max(gehalt) from vertrag)) select pname from r where gehalt >= all(selectgehalt from r) 2 97 Welche Mannschaft schoss die meisten Tore? SELECT 1 Abfragen select m.mname from mannschaft m, vertrag v, schiesst s where m.mname=v.mname and v.pname=s.pname group by m.mname having count(*) >= all(select count(*) from mannschaft m, vertrag v, schiesst s where m.mname=v.mname and v.pname=s.pname group by m.mname) 2 98 Welche Mannschaft schoss in der ersten Halbzeit die wenigsten Tore? (Keine Mannschaften mit 0 Toren!) SELECT 1 Abfragen select m.mname from mannschaft m, vertrag v, schiesst s where s.spielminute <= 45 and m.mname=v.mname and v.pname=s.pname group by m.mname having count(*) <= all(select count(*) from mannschaft m, vertrag v, schiesst s wheres.spielminute <= 45 and m.mname=v.mname and v.pname=s.pname group by m.mname) 2 99 Bitte lassen sie sich probeweise alle Hotels anzeigen. SELECT 1 Vorbereitung select * from hotel 3 101 Welche Hotels verfugen uber Einzel- oder Doppelzimmer? SELECT 1 Abfragen select distinct hname from zimmertyp where ztyp='EZ' or ztyp='DZ' 3 102 Welche Hotels verfugen uber Einzel- und Doppelzimmer? SELECT 1 Abfragen select distinct hname from zimmertyp where ztyp='EZ' and hname in (select hname from zimmertyp where ztyp='DZ') 3 103 Welche Hotels verfugen nur uber Einzelzimmer? SELECT 1 Abfragen select hname from zimmertyp where ztyp='EZ' and hname not in(select hname from zimmertyp where ztyp<>'EZ') 3 104 Welche Ausstattung bietet Hotel Neptun zu welchem Preis an? SELECT 1 Abfragen select aname, preis from bietet where hname = 'Neptun' 3 105 Was kosten Einzelzimmer in 5-Sterne-Hotels? SELECT 1 Abfragen select preis from zimmertyp, hotel where hotel.hname = zimmertyp.hnameand ztyp='EZ' and kategorie=5 3 106 Was kosten Doppelzimmer mit Minibar in 5-Sterne-Hotels? SELECT 1 Abfragen select preis from hotel, zimmertyp, besitzt where hotel.hname = zimmertyp.hname and zimmertyp.ztyp=besitzt.ztyp and zimmertyp.hname=besitzt.hname andbesitzt.aname='Minibar' and kategorie=5 and zimmertyp.ztyp='DZ' 3 107 In welchen Hotels hat Franz Mueller reserviert? SELECT 1 Abfragen select distinct hname from reserviert where pname='Mueller'and pvorname='Franz' 3 108 In welchen 2-Sterne-Hotels hat Franz Mueller Zimmer mit Doppelbett reserviert? SELECT 1 Abfragen select hotel.hname from reserviert, hotel where reserviert.hname = hotel.hname and kategorie=2 and ztyp='DZ' and pvorname='Franz'and pname='Mueller' 3 109 In welchen Rostocker Hotels hat Franz Mueller Zimmer fur 1 Nacht gebucht? SELECT 1 Abfragen select hotel.hname from rechnung, hotel where rechnung.hname = hotel.hname and ort='Rostock' and bis-von=1 and pname='Mueller' andpvorname='Franz' 3 110 Welche Gaste Haben noch offene Rechnungen? SELECT 1 Abfragen select distinct pname, pvorname from rechnung where bezahlt='N' 3 111 In welchen Hotels wurden alle gestellten Rechnungen bezahlt? SELECT 1 Abfragen select distinct hname from rechnung where bezahlt='Y' and hname not in (select hname from rechnung where bezahlt='N') 3 112 Welche Personen sind keine Gaste? SELECT 1 Abfragen select p.pname, p.pvorname from person p where not exists (select * from gast g where g.pname=p.pname and g.pvorname=p.pvorname) 3 113 Welches Hotel bietet das billigste Zimmer an? SELECT 1 Abfragen select hname from zimmertyp where preis = (select min(preis) from zimmertyp) 3 114 Welches Hotel bietet die meisten Einzelzimmer an? SELECT 1 Abfragen select hname from zimmertyp where ztyp='EZ' and anzahl = (select max(Anzahl) from zimmertyp where ztyp='EZ') 3 115 Welches Hotel bietet die durchschnittlich billigsten Zimmer an? SELECT 1 Abfragen select hname from zimmertyp group by hname having avg(preis) <= all(select avg(preis) from zimmertyp group by hname) 3 116 Wer hat die hochste Hotelrechnung? SELECT 1 Abfragen select pname, pvorname from rechnung where summe = (select max(summe)from rechnung) 3 117 Wer hat mehr als eine Hotelrechnung bezahlt? SELECT 1 Abfragen select pname, pvorname from rechnung where bezahlt='Y' groupby pname, pvorname having count(*) > 1 3 0 Lassen Sie sich bitte zum Test des Systems alle Kunden anzeigen, indem sie in das unten stehende Textfeld: 'select * from kunden' eingeben und dann per Mausklick bestatigen. SELECT 1 Vorbereitung select * from kunden 1 33 gesucht: alle Kunden (Kundennummer) mit Postleitzahl und Ort, die in Wismar oder Hamburg wohnen. SELECT 1 Abfragen select k.kundennummer, ad.postleitzahl, ad.ort from kunden k, adressen ad, kunde_hat_adresse kha where k.kundennummer=kha.kundennummer and ad.adress_id=kha.adress_id and (ad.ort='wismar' or ad.ort='hamburg') 1 34 gesucht: alle Kunden mit Kundennummer & Auftragsnummer die irgend etwas in 2003 oder vor 2000 bestellt haben. SELECT 1 Abfragen select kundennummer, auftragsnummer from (select k.kundennummer, a.auftragsnummer, a.auftragsdatum from kunden k, auftrag a where k.kundennummer=a.kundennummer) where (auftragsdatum>='01.01.2003' and auftragsdatum<='31.12.2003') or auftragsdatum<'01.01.2000' 1 35 gesucht: alle Produkte (produktnummer, bezeichnung, stueckzahl, preis),die bisher noch nie bestellt wurden. SELECT 1 Abfragen select pl.produktnummer, pl.bezeichnung, pl.stueckzahl, pl.preis fromproduktlager pl left outer join auftrag_hat_positionen ahp on pl.produktnummer=ahp.produktnummer where ahp.produktnummer is null 1 36 gesucht: alle Produkte (produktnummer, bezeichnung, preis), die der Kunde mit der Kdnr 4 bestellt hat. SELECT 1 Abfragen select pl.produktnummer, pl.bezeichnung, pl.preis from kunden k join (auftrag a join (auftrag_hat_positionen pos join produktlager pl on pos.produktnummer=pl.produktnummer) on a.auftragsnummer=pos.auftragsnummer) on k.kundennummer=a.kundennummer where k.kundennummer='4' 1 37 gesucht: die Bezeichnung aller Produkte, deren Preis uber dem mittleren Preis liegt. SELECT 1 Abfragen select bezeichnung from produktlager where preis > (select avg(preis) from produktlager) 1 38 gesucht: alle Kunden (Kundennummer), die mehr als 2 Auftrage haben. SELECT 1 Abfragen select k.kundennummer from kunden k join auftrag a on k.kundennummer=a.kundennummer group by k.kundennummer having count(*)>2 1 39 gesucht: Namen der Kunden, die das teuerste Produkt bestellt haben. SELECT 1 Abfragen select k.name from kunden k join (auftrag a join (auftrag_hat_positionen ahp join produktlager pl on ahp.produktnummer=pl.produktnummer) on a.auftragsnummer=ahp.auftragsnummer) on k.kundennummer=a.kundennummer where pl.preis=(select max(preis) from produktlager) 1 40 gesucht: alle Kunden (kundennummer, name, vorname), die das am haufigsten bestellte Produkt (gemessen an der Anzahl der Datensatze in der Tabelle POSITIONEN) bestellt haben SELECT 1 Abfragen select k.kundennummer, k.name, k.vorname from kunden k join (select distinct a.kundennummer from auftrag a join (select distinct ahp.auftragsnummer from auftrag_hat_positionen ahp join (select produktnummer from (select produktnummer, count(*) as c from auftrag_hat_positionen group by produktnummer) tmp where tmp.c=(select max(c) from (select produktnummer, count(*) as c from auftrag_hat_positionen group by produktnummer) tmp)) tmp on ahp.produktnummer = tmp.produktnummer) tmp on a.auftragsnummer = tmp.auftragsnummer) tmp on k.kundennummer = tmp.kundennummer 1 42 gesucht: alle Kunden (Kundennummer) und deren Auftrage (Auftragsnummer)aufsteigend sortiert nach Kundennummer! SELECT 1 Abfragen select k.kundennummer, a.auftragsnummer from kunden k join auftrag a on k.kundennummer=a.kundennummer order by k.kundennummer 1 43 gesucht: alle Kunden (Kundennummer) und deren Auftrage (Auftragsnummer)aufsteigend sortiert nach Kundennummer und innerhalb der Kundennummer absteigendsortiert nach Auftragsnummer! SELECT 1 Abfragen select k.kundennummer, tmp.auftragsnummer from kunden k join (select a.auftragsnummer, a.kundennummer from auftrag a order by a.auftragsnummer desc) tmp on k.kundennummer=tmp.kundennummer order by k.kundennummer 1 44 gesucht: alle Auftrage (gruppiert nach Kunden), deren Auftragsstatus 'in arbeit' ist! (Kundennummer, Auftragsnummer) SELECT 1 Abfragen select kundennummer, auftragsnummer from auftrag where auftragsstatus= 'in arbeit' group by kundennummer, auftragsnummer 1 46 gesucht: alle bestellten Produkte als Produktnummer ohne Duplikate! SELECT 1 Abfragen select distinct produktnummer from auftrag_hat_positionen 1 47 gesucht: alle Kunden (alle Kundendaten), die noch keine Auftrage gestellt haben! (Anfrage als unkorrelierte Anfrage) SELECT 1 Abfragen select * from kunden k where k.kundennummer not in (select kundennummer from auftrag) 1 48 gesucht: alle Kunden (alle Kundendaten), die noch keine Auftrage gestellt haben! (Anfrage als korrelierte Anfrage) SELECT 1 Abfragen select * from kunden k where not exists (select a.kundennummer from auftrag a where a.kundennummer=k.kundennummer) 1 49 gesucht: alle bestellten Produkte und deren Besteller (Produktnummer, Kundennummer)! SELECT 1 Abfragen select ahp.produktnummer, a.kundennummer from auftrag_hat_positionen ahp join auftrag a on a.auftragsnummer=ahp.auftragsnummer 1 50 gesucht: das Zahlungsverhalten (mogliche Werte --> -1, 0, 1) der Kunden (Kundennummer, Zahlungsverhalten)und Umwandlung der Ausgabe fur Werte >=0als positiv (+) und negativ (-) fur Werte mit -1! (Nutzung des case-Konstruktesim Select-Teil der Anfrage) SELECT 1 Abfragen select kundennummer, case when zahlungsverhalten = '-1' then'-' else '+' end from kunden_profil 1 51 gesucht: Kunden und deren Auftrage (Kundennummer, Auftragsnummer) mittels right outer join! SELECT 1 Abfragen select k.kundennummer, a.auftragsnummer from kunden k, auftrag a where k.kundennummer=a.kundennummer(+) 1 52 gesucht: Kunden und deren Auftrage (Kundennummer, Auftragsnummer) mittels full join. SELECT 1 Abfragen select k.kundennummer, a.auftragsnummer from kunden k full join auftrag a on k.kundennummer=a.kundennummer 1 53 gesucht: Kunden (alle Daten) deren Name ahnlich Meier, Meyer, Mayer ist! SELECT 1 Abfragen select * from kunden where name like 'm__er' 1 54 gesucht: alle Kunden (Kundennummer, Name, Vorname), die das am haufigsten bestellte Produkt , gemessen an der bestellten Stuckzahl in der Tabelle POSITIONEN. SELECT 1 Abfragen select k.kundennummer, k.name, k.vorname from kunden k join (select distinct a.kundennummer from auftrag a join (select distinct ahp.auftragsnummer from auftrag_hat_positionen ahp join (select produktnummer from (select produktnummer, sum(stueckzahl) as s from auftrag_hat_positionen group by produktnummer) tmp where tmp.s=(select max(s) from (select produktnummer, sum(stueckzahl) as s from auftrag_hat_positionen group by produktnummer) tmp)) tmp on ahp.produktnummer = tmp.produktnummer) tmp on a.auftragsnummer = tmp.auftragsnummer) tmp on k.kundennummer = tmp.kundennummer 1 55 gesucht: der Wohnort der Kunden, die die meisten Auftrage geordert haben. SELECT 1 Abfragen select ad.ort from adressen ad join (select adress_id from kunde_hat_adresse kha join (select tmp.kundennummer from (select kundennummer, count(*) as c from auftrag group by kundennummer) tmp where tmp.c = (select min(c) from (select kundennummer, count(*) as c from auftrag group by kundennummer) tmp)) tmp on tmp.kundennummer = kha.kundennummer) tmp on tmp.adress_id=ad.adress_id 1 56 Uberprufen Sie in einem SQL-statement, ob es unter den Kunden (Kundennummer), die das teuerste Produkt bestellt haben, den (die) Kunden mit dem gro?tenAuftragsvolumen gibt. (Hinweis: benutzen Sie die Operation INTERSECT) SELECT 1 Abfragen select k.kundennummer from kunden k join (auftrag a join (auftrag_hat_positionen ahp join produktlager pl on ahp.produktnummer=pl.produktnummer) on a.auftragsnummer=ahp.auftragsnummer)on k.kundennummer=a.kundennummer where pl.preis=(select max(preis) from produktlager) intersect select k.kundennummer from kunden k join kunden_profil kp on k.kundennummer=kp.kundennummer where kp.auftragsvolumen=(select max(auftragsvolumen) from kunden_profil) 1 57 Bestimmen Sie in einem SQL-statement alle Produkte (Produktnummer, Bezeichnung, Preis, Kundennummer), die von Kunden mit den meisten Auftragen oder vonKunden mit dem gro?ten Auftragsvolumen, auf jeden Fall aber von Kunden mit den wenigsten Auftragen bestellt wurden! (Hinweis: verwenden Sie UNION und INTERSECT,entsprechend geklammert) SELECT 1 Abfragen select pl.produktnummer, pl.bezeichnung, pl.preis, k.kundennummer from kunden k join (auftrag a join (auftrag_hat_positionen pos join produktlager pl on pos.produktnummer=pl.produktnummer) on a.auftragsnummer=pos.auftragsnummer) on k.kundennummer=a.kundennummer where k.kundennummer in (select tmp.kundennummer from (select kundennummer, count(*) c from auftrag group by kundennummer) tmp where tmp.c=(select min(c) from (select kundennummer, count(*) as c from auftrag group by kundennummer) tmp) intersect select k.kundennummer from kunden k join kunden_profil kp on k.kundennummer=kp.kundennummer where kp.auftragsvolumen=(select max(auftragsvolumen) from kunden_profil) union select tmp.kundennummer from (select kundennummer, count(*) as c from auftrag group by kundennummer) tmp where tmp.c=(select max(c) from (select kundennummer, count(*) as c from auftrag group by kundennummer) tmp)) 1 58 Definieren Sie eine Sicht uber alle Kunden (Kundennummer, Name, Ort) undderen Auftrage (Auftragsnummer, Auftragsstatus, Auftragsdatum) und benennen Siediese Sicht als Auftragsdetails! (mehrfache Adressen ergeben mehrere Eintrage mit gleichen Inhalten???) CREATE 0 Abfragen create view auftragsdetails as (select au.auftragsnummer, au.auftragsstatus, au.auftragsdatum, k.kundennummer, k.name, a.ort from (adressen a join (kunde_hat_adresse kha join (kunden k join auftrag au on k.kundennummer = au.kundennummer) on kha.kundennummer = k.kundennummer) on a.adress_ID = kha.adress_ID)) 1 60 Definieren Sie eine Sicht uber alle Auftrage und deren Produkte (Auftragsnummer, Produktnummer, Produktbezeichnung, Preis) als Produktdetails! CREATE 0 Abfragen create view produktdetails as (select distinct au.auftragsnummer, pl.produktnummer, pl.bezeichnung, pl.preis from produktlager pl join (auftrag au join auftrag_hat_positionen ahp on ahp.auftragsnummer = au.auftragsnummer) on ahp.produktnummer = pl.produktnummer) 1 61 Kombinieren Sie alle Informationen der beiden Sichten und lassen Sie sich diese anzeigen! (natural join) SELECT 0 Abfragen select * from produktdetails natural join auftragsdetails 1 64 Legen sie eine beliebige Tabelle an. Wahlen sie bitte einen Tabellennamen, der sich beispielsweise aus Ihrem Namen herleitet. Bei Namen, wie "test","tabelle" etc. konnte es zu Fehlermeldungen kommen, da? das Objekt bereits existiert! Bitte versuchen sie es in dem Fall mit einem anderen Tabellennamen. CREATE 1 Vorbereitung keine Musterlosung 1 65 Fullen sie die von Ihnen angelegte Tabelle mit mindestens einem Datensatz. INSERT 1 Vorbereitung keine Musterlosung 1 66 Fragen Sie bitte die Inhalte der von Ihnen angelegten Tabelle ab! SELECT 1 Vorbereitung select * from 1 83 Wer schoss in der 90. Spielminute ein Tor? SELECT 1 Abfragen select pname from schiesst where spielminute = 90 2 81 1 1 2 82 2 2 2 83 3 3 2 84 4 4 2 85 5 5 2 86 6 6 2 87 7 7 2 88 8 8 2 89 9 9 2 90 10 10 2 91 11 11 2 92 12 12 2 93 13 13 2 94 14 14 2 95 15 15 2 96 16 16 2 97 17 17 2 98 18 18 2 99 1 1 3 101 2 2 3 102 3 3 3 103 4 4 3 104 5 5 3 105 6 6 3 106 7 7 3 107 8 8 3 108 9 9 3 109 10 10 3 110 11 11 3 111 12 12 3 112 13 13 3 113 14 14 3 114 15 15 3 115 16 16 3 116 17 17 3 117 18 18 3 33 16 16 1 34 17 17 1 0 1 1 1 35 19 19 1 36 18 18 1 37 20 20 1 38 21 21 1 39 22 22 1 40 23 23 1 42 5 5 1 43 6 6 1 44 7 7 1 46 8 8 1 47 9 9 1 48 10 10 1 49 11 11 1 50 12 12 1 51 13 13 1 52 14 14 1 53 15 15 1 54 24 24 1 55 25 25 1 56 26 26 1 57 27 27 1 58 28 28 1 59 29 29 1 60 30 30 1 61 31 31 1 64 2 2 1 65 3 3 1 66 4 4 1