Kurs:Wirtschaftsinformatik SS09 Datenbankmanagementsysteme/Teil 4/Loesungen SS2010
category: Aggregation, level: einfach
BearbeitenExerciseID: 50660 (category: Aggregation, level: einfach)
BearbeitenGib alle Fahrer aus, deren Nachname mit einem S beginnt. Ergebnistyp sei das volle Tupel.
Musterlösung:
select * from Fahrer where nachname like 'S%'
ExerciseID: 50661 (category: Aggregation, level: einfach)
BearbeitenErmittle die durchschnittliche Unfallzahl aller männlichen Fahrer.
Musterlösung:
select avg(unfallzahl) from Fahrer where geschlecht='m'
ExerciseID: 50662 (category: Aggregation, level: einfach)
BearbeitenWieviele maennliche Fahrer mit mehr als 3 Kindern gibt es?
Musterlösung:
select count(fahrernr) from Fahrer where geschlecht='m' AND kinderanzahl > 3
ExerciseID: 50663 (category: Aggregation, level: einfach)
BearbeitenGib alle Fahrer aus, deren Vorname mit einem S beginnt. Ergebnistyp sei das volle Tupel.
Musterlösung:
select * from Fahrer where vorname like 'S%'
ExerciseID: 50664 (category: Aggregation, level: einfach)
BearbeitenWieviele Haltestellen gibt es? Benennungen von Ergebnisspalten sind nicht vorzunehmen.
Musterlösung:
select count(*) from Haltestelle
ExerciseID: 50665 (category: Aggregation, level: einfach)
BearbeitenWie hoch ist das höchste Grundgehalt der Fahrer? Der Ergebnis-Typ sei (hoechstGehalt).
Musterlösung:
select max(grundgehalt) as hoechstGehalt from Fahrer
ExerciseID: 50655 (category: Aggregation, level: einfach)
BearbeitenGebe jeden Fahrernamen zusammen mit seinem Gesamtgehalt (bestehend aus Grundgehalt und Kinderzulage) aus. Ergebnistyp sei (vorname, nachname,gesamtgehalt).
Musterlösung:
select vorname, nachname, grundgehalt+kinderzulage as gesamtgehalt from Fahrer
ExerciseID: 50656 (category: Aggregation, level: einfach)
BearbeitenWas ist die höchste Anzahl an Unfällen, in die ein männlicher Fahrer verwickelt war? Benennungen von Ergebnisspalten sind nicht vorzunehmen.
Musterlösung:
select max(unfallzahl) from Fahrer where geschlecht='m'
ExerciseID: 50657 (category: Aggregation, level: einfach)
BearbeitenWieviele Fahrer gibt es? Benennungen von Ergebnisspalten sind nicht vorzunehmen.
Musterlösung:
select count(*) from Fahrer
ExerciseID: 50658 (category: Aggregation, level: einfach)
BearbeitenGib alle Fahrer aus, deren Nachname mit einem P beginnt. Ergebnistyp sei das volle Tupel.
Musterlösung:
ExerciseID: 50658 (category: Aggregation, level: einfach)
BearbeitenGib alle Fahrer aus, deren Nachname mit einem P beginnt. Ergebnistyp sei das volle Tupel.
Musterlösung:
select * from Fahrer where nachname like 'P%'
ExerciseID: 50659 (category: Aggregation, level: einfach)
BearbeitenErmittle das Durchschnittsgrundgehalt aller männlichen Fahrer. Benennungen von Ergebnisspalten sind nicht vorzunehmen.
Musterlösung:
select avg(grundgehalt) from Fahrer where geschlecht='m'
[ExerciseID: 50666 (category: Aggregation, level: einfach)] Wieviele Fahrtnummern gibt es? Benennungen von Ergebnisspalten sind nicht vorzunehmen.
Musterlösung:
select count(fahrtnr) from Fahrt
ExerciseID: 45744 (category: GROUP-BY, level: einfach)
BearbeitenGeben Sie die Häufigkeit der Kinderanzahl der Fahrer aus. Das Ergebnis soll aus (kinderanzahl, fahreranzahl) bestehen.
Studentische Lösung: select kinderanzahl, count(fahrernr) as fahreranzahl from Fahrer group by kinderanzahl
Musterlösung:SELECT kinderanzahl, count(*) as fahreranzahl FROM fahrer group by kinderanzahl;
ExerciseID: 50644 (category: GROUP-BY, level: einfach)
BearbeitenGeben Sie die Häufigkeit der Vornamen der Fahrer aus. Das Ergebnis soll aus (vorname, anzahl) bestehen
Musterlösung:
SELECT vorname, count(*) as anzahl FROM fahrer group by vorname
ExerciseID: 50669 (category: Aggregation, level: einfach)
BearbeitenErmittle das Durchschnittsgrundgehalt aller weiblichen Fahrer mit Kindern. Benennungen von Ergebnisspalten sind nicht vorzunehmen.
Mustetlösung:
select avg(grundgehalt) from Fahrer where geschlecht='w' and kinderanzahl>0
ExerciseID: 50668 Geben Sie alle Fahrer aus, deren Vorname gleich dem Nachnamen ist.
BearbeitenMusterlösung: select * from fahrer where nachname=vorname;
ExerciseID: 45794 (category: SFW, level: einfach)
BearbeitenWelche Busse müssen im 1. Quartal 2009 zum Tuev (Rückgabe busnr, tuev).
Musterlösung: SELECT busnr,tuev FROM bus WHERE tuev between '2009-01-01' and '2009-03-31';
ExerciseID: 50682 (category: SFW, level: einfach): Welche Busse müssen im 1. Quartal 2009 zum Tuev (Rückgabe busnr, tuev).
Bearbeiten
Musterlösung:
select busnr,tuev from bus where tuev between '2009-01-01' and '2009-03-31'
ExerciseID: 50697 (category: SFW, level: einfach)
BearbeitenWelche Busse müssen im 2. Halbjahr 2008 zum Tuev? Rückgabe-Typ sei (busnr,tuev).
Musterlösung:
select busnr, tuev from bus where tuev between '2008-07-01' and '2008-12-31'
ExerciseID: 50687 (category: SFW, level: einfach)
BearbeitenWelche Busse müssen im Februar 2009 zum TÜV? Rückgabe-Typ sei (busnr,tuev).
Kein Schaltjahr
SELECT busnr,tuev FROM bus WHERE tuev between '2009-02-01' and '2009-02-28';
ExerciseID: 50695 (category: SFW, level: einfach)
BearbeitenWelche weiblichen fahrer haben Kinder (es soll das ganze Tupel ausgegeben werden?)
Musterlösung:
select * from fahrer where geschlecht='w' and kinderanzahl>0
ExerciseID: 50701 (category: SFW, level: einfach)
BearbeitenWelche Fahrer (vorname, nachname, fahrernr) erhalten weniger Grundgehalt als 1600 Euro?
Musterloesung: SELECT vorname , nachname , fahrernr FROM Fahrer WHERE grundgehalt < 1600;
ExerciseID: 50700 (category: SFW, level: einfach)
BearbeitenErmittle alle männliche Fahrer, die am Montag geboren sind (Ausgabe: alle Attribute)
Studentische Lösung:
select * from fahrer where geschlecht='m' and to_char(geburtsdatum, 'dy')='mon'
Musterlösung:
select * from fahrer where geschlecht = 'm' and EXTRACT(DOW FROM geburtsdatum) = 1
ExerciseID: 50698 (category: SFW, level: einfach)
BearbeitenErmittle unter Verwendung der Duplikateliminierung, an welchen Tagen (anschaffungstag) neue Busse angeschafft wurden; Ergebnistyp sei (anschaffungstag).
select distinct anschaffungstag from Bus
ExerciseID: 50690 (category: SFW, level: einfach)
BearbeitenWelche Busse müssen im Dezember 2009 zum TÜV? Rückgabe-Typ sei (busnr,tuev).
select busnr, tuev from bus where tuev between '2009-12-01' and '2009-12-31'
ExerciseID: 50683 (category: SFW, level: einfach)
BearbeitenErmittle alle weiblichen Fahrer, deren Zustand gesetzt ist, d.h. deren Zustand weder eine leere Zeichenkette, noch der Wert null ist ( Ausgabe: alle Attribute).
Musterlösung:
select * from fahrer where geschlecht ='w' and zustand!= and zustand is not null
==
ExerciseID: 50654 (category: Aggregation, level: einfach)
BearbeitenWieviele Kinder haben alle Fahrer zusammen (mögliche gemeinsame Kinder bei verheirateten werden nicht berücksichtigt)?
Musterlösung:
select sum(kinderanzahl) from fahrer
ExerciseID: 50684 (category: SFW, level: einfach)
BearbeitenErmittle den Anteil der Kinderzulage pro Fahrer, den jedes Kind bekommt, wenn die Kinderzulage gleichwertig auf alle Kinder verteilte wird. Hinweise: (Achte darauf, dass die Kinderanzahl 0 oder null sein, ferner sollen nur Datensätze berücksichtigt werden, in denen die Kinderzulage != 0 ist). Ausgabe(kinderzulage, kinderanzahl, ZulageProKind).
Studentische Lösung:
SELECT kinderzulage, kinderanzahl, (Kinderzulage/Kinderanzahl) as ZulageProKind FROM Fahrer WHERE kinderzulage is not NULL AND Kinderzulage!=0 and kinderanzahl !=0 and kinderanzahl is not null
Musterlösung:
select kinderzulage, kinderanzahl, kinderzulage/kinderanzahl as ZulageProKind from fahrer where kinderanzahl <> 0 and kinderanzahl is not null and kinderzulage <> 0
ExerciseID: 50689 (category: SFW, level: einfach)
BearbeitenErmittle alle unterschiedlichen (!) Vor- und Nachnamen von Fahrern, wobei für die Fahrernachnamen gelten soll, dass sie aus mindestens 5 Buchstaben bestehen und mit 't' enden. (d.h. vor dem "t" befinden sich mind. 4 weitere Buchstaben).
Musterlösung:
select distinct vorname, nachname from fahrer where nachname like '____%t'
==
ExerciseID: 50696 (category: SFW, level: einfach)
BearbeitenWelche Busse sind älter als 10 Jahre? (Rückgabetyp = busnr, 1 Jahr = 365 Tage).
Studentische Lösung:
select busnr from bus where (current_date-anschaffungstag)/365 >= 10
Musterlösung:
select busnr from bus where (current_date - anschaffungstag) > (365*10);
ExerciseID: 50685 (category: SFW, level: einfach)
BearbeitenWelche Busse sind jünger als 5 Jahre? (Rückgabetyp = busnr, 1 Jahr = 365 Tage).
Musterloesung: select busnr from bus where (current_date - anschaffungstag) < (365*5);
==
ExerciseID: 50688 (category: SFW, level: einfach)
BearbeitenWelche Busse stehen im Depot, deren Tuev seit 2008 bis heute abgelaufen sind. Rückgabe-Typ sei (busnr,tuev).
Musterloesung: SELECT busnr,tuev FROM bus WHERE tuev between '2008-01-01' and current_date;
ExerciseID: 50693 (category: SFW, level: einfach)
BearbeitenWelche Busse stehen im Depot, deren TÜV zwischen dem 1.1.2009 und heute abgelaufen ist. Rückgabe-Typ sei (busnr,tuev)
Musterloesung: SELECT busnr,tuev FROM bus WHERE tuev between '2009-01-01' and current_date
ExerciseID: 50691 (category: SFW, level: einfach)
BearbeitenDie Kinderzulage der Fahrer werden um 15% erhöht.Die neue Kinderzulage soll angezeigt werden (kein Update ist vorzunehmen). Ausgabe(vorname, nachname, kinderzulage,neukinderzulage)
Musterloesung: select vorname, nachname, kinderzulage, (kinderzulage * 1.15) as neukinderzulage from fahrer
ExerciseID: 50694 (category: SFW, level: einfach)
BearbeitenBei welchen Fahrern liegt das Einstellungsdatum mehr als 10 Jahren zurück? Berechnen Sie die Fahrer auf Basis, dass 1 Jahr = 365 Tage hat. (Ausgabe fahrerNr)
Musterloesung: select fahrerNr from Fahrer where (current_date - einstellung) > (365*10)
==
ExerciseID: 50692 (category: SFW, level: einfach)
BearbeitenErmittle alle männliche Fahrer, deren Zustand gesetzt ist, d.h. deren Zustand weder eine leere Zeichenkette, noch der Wert null ist ( Ausgabe: alle Attribute).
Musterloesung: select * from fahrer where geschlecht ='m' and zustand!= and zustand is not null
ExerciseID: 50649 (category: DDL, level: einfach)
BearbeitenLösche die Tabelle 'erreicht' aus der DB.
DROP TABLE erreicht;
ExerciseID: 50646 (category: DDL, level: einfach)
BearbeitenLösche die Tabelle Fahrer aus der DB.
Musterlösung:
DROP TABLE fahrer;
ExerciseID: 50647 (category: DDL, level: einfach)
BearbeitenErstelle eine Tabelle FahrerAttr, die (vorerst nur) die Attribute nachname, vorname (jeweils als Zeichenketten mit der Länge 31) und geschlecht (vom Typ GESCHLECHT_TYP) enthält.
Musterloesung: create table FahrerAttr (nachname varchar(31), vorname varchar(31), geschlecht GESCHLECHT_TYP);
ExerciseID: 50641 (category: GROUP-BY, level: mittel)
BearbeitenGeben Sie die Nachnamen (und die Anzahl der Nachnamen), die mehr als zweimal unter den Fahrern vorkommen.
Musterloesung: select nachname, count(*) from fahrer group by nachname having count(*) > 2;
ExerciseID: 50616 (category: DML, level: einfach)
BearbeitenErgänzen Sie die Fahrertabelle um einen Fahrer (id=47111), der zum heutigen Datum neu angestellt wurde und ab sofort aktiv in Dienst tritt. Der Fahrer heißt "Heinz Huttrop" und wurde am 23.06.1986 geboren. Heinz Huttrop ist kinderlos und fängt mit einem Anfangsgrundgehalt von 1800 Euro an.
Musterloesung:
INSERT INTO Fahrer (fahrernr, vorname, nachname, zustand, geburtsdatum, grundgehalt, einstellung, kinderanzahl) VALUES (47111, 'Heinz', 'Huttrop', 'aktiv', '1986-06-23', 1800, current_date, 0);
ExerciseID: 50619 (category: Mengen, level: mittel)
BearbeitenWelche Haltestellen sind im Fahrplan der Linie 111 und nicht in dem der Linie 118 beinhaltet? Ausgabe(haltestellenr,haltestellenname).
SELECT haltestellenr, haltestellenname FROM Haltestelle natural join erreicht natural JOIN Linie WHERE Linienr=111 EXCEPT SELECT haltestellenr, haltestellenname FROM Haltestelle natural join erreicht natural JOIN Linie WHERE Linienr=118;
Musterloesung: select haltestellenr ,haltestellenname from erreicht natural join haltestelle where linienr = 111 and haltestellenr not in (select haltestellenr from erreicht where linienr = 118);
ExerciseID: 50670 (category: SFW, level: mittel)
BearbeitenGib alle weiblichen Fahrer aus (alle Attribute), die in mehr als 4 Unfälle verwickelt waren.
Musterloesung: select * from Fahrer where geschlecht='w' and unfallzahl > 4;
==
ExerciseID: 50673 (category: SFW, level: mittel)
BearbeitenZeige alle Busse an, deren Anschaffungsdatum früher als das des Busses mit der Nummer 101 ist und deren TÜVs nach dem des Busses der Nummer 101 endet.. Ausgabe(das gesamte Bus-tupel).
Musterloesung: SELECT * FROM bus WHERE anschaffungstag < (select anschaffungstag from bus where busnr = 101) AND tuev >(select tuev from bus where busnr =101);
==
ExerciseID: 50675 (category: SFW, level: mittel)
BearbeitenMusterloesung: select distinct nachname, vorname, unfallzahl from fahrer where nachname like '____%' and nachname LIKE '%t%' and vorname like 'M%'
Studentische Lösung:
select distinct nachname, vorname, unfallzahl from fahrer where nachname like '%%t%' and vorname like 'M%'
Ermittle alle Fahrer, die unterschiedliche Nachnamen haben, welche aus mindestens 4 Buchstaben bestehen und ‘t’ beinhalten, und deren Vornamen mit ‚M’ beginnen (Ausgabe: nachname, vorname, unfallzahl)
ExerciseID: 50643 (category: GROUP-BY, level: schwer)
BearbeitenGib eine Liste mit dem Alter (in Jahren) der Fahrer aus - zusammen mit der entsprechenden Anzahl von Fahrern, die dieses Alter haben (1 Jahr = 365 Tage). Die Ausgaberelation hat die form (alter, anzahl). Hinweis: Berechnen Sie dabei das Alter unter der Annahme, dass ein Jahr 365 Tage hat (Verwenden Sie also nicht die Funktion Extract).
select ((current_date-geburtsdatum)/365) as alter, count(*) as anzahl from fahrer group by alter;
ExerciseID: 50651 (category: Aggregation, level: schwer)
BearbeitenZeige alle Fahrer an, die weniger als das durchschnittlichen Grundgehalt anderer Fahrer, die im gleichen Jahr geboren sind, verdienen.
Musterloesung: select * from fahrer f where f.grundgehalt < (select avg(grundgehalt) from fahrer f2 where (SELECT EXTRACT(YEAR FROM f2.geburtsdatum) = (select extract (year from f.geburtsdatum) )));
Studentische Lösung:
SELECT f1.* FROM Fahrer AS f1 WHERE f1.grundgehalt < (SELECT AVG(f2.grundgehalt) FROM Fahrer AS f2 WHERE extract (year from f1.geburtsdatum)= extract (year from f2.geburtsdatum));
ExerciseID: 50653 (category: Aggregation, level: schwer)
BearbeitenWelche Haltestelle steht am häufigsten in den Fahrplänen? Ausgabe (haltestellenr, haltestellenname).
Studentische Lösung:
SELECT distinct haltestellenr, haltestellenname FROM erreicht e natural join haltestelle WHERE (select count(*) from erreicht ee WHERE ee.haltestellenr = e.haltestellenr) = (select MAX(a) from (select count(*) as a from erreicht group by haltestellenr ) as b )
Musterloesung: select haltestellenr, haltestellenname from haltestelle where haltestellenr in (select haltestellenr as aa from erreicht group by haltestellenr having count(*) = (select max(a) from (select count(*) as a from erreicht group by haltestellenr ) as b ))
ExerciseID: 50618 (category: Mengen, level: mittel)
BearbeitenGeben Sie alle Busse aus, die NICHT auf Fahrten eingesetzt werden. Die Ergebnisrelation soll alle Attribute der Bus-Relation anzeigen.
Musterloesung: SELECT * FROM bus where busnr NOT IN (SELECT busnr from fahrt);
ExerciseID: 50676 (category: SFW, level: schwer)
BearbeitenZeige alle Fahrer an, deren Zustand 'aktiv' or 'krank' ist, und deren Grundgehalt größer als das durchschnittliche Grundgehalt aller Fahrer ist, die den gleichen Zustand wie dieser Fahrer haben.Ausgabe(Das gesamte Fahrer-Tupel). (Zustand soll nicht null sein)
Musterloesung: SELECT * FROM fahrer f WHERE zustand in ('aktiv','krank') AND grundgehalt > (SELECT avg(grundgehalt) FROM fahrer WHERE f.zustand = zustand);
Studentische Lösung:
SELECT * FROM Fahrer AS anfrageobjekt WHERE (anfrageobjekt.zustand IS NOT null) AND anfrageobjekt.grundgehalt > (SELECT AVG(grundgehalt) FROM Fahrer AS andere WHERE andere.zustand = anfrageobjekt.zustand) AND (anfrageobjekt.zustand='aktiv' OR anfrageobjekt.zustand='krank' )
ExerciseID: 50680 (category: SFW, level: schwer)
BearbeitenZeige alle Fahrer an, die die gleichen Kinderanzahl, Geschlecht und Unfallzah haben, wie der Fahrer mit der Nummer 19436. (Ausgabe: Gesamtes Fahrer-Tupel ohne den Fahrer mit der Nummer 19436).
Musterloesung: SELECT * FROM fahrer WHERE (kinderanzahl, geschlecht, unfallzahl) = (SELECT kinderanzahl, geschlecht, unfallzahl FROM fahrer WHERE fahrernr = 19436) AND fahrernr <> 19436;
ExerciseID: 50677 (category: SFW, level: schwer)
BearbeitenZeige alle Fahrer an, die gleichen Zustand, Kinderanzahl und Geschlecht wie die Fahrer mit dem Nachnamen 'Wernicke'.Ausgabe(Das gesamte Fahrer-Tupel). Hinweis: Wernicke selbst soll nicht in der Ergebnisrelation vorhanden sein.
Musterloesung: SELECT * FROM fahrer WHERE (zustand, kinderanzahl, geschlecht) in (SELECT zustand, kinderanzahl, geschlecht FROM fahrer WHERE nachname = 'Wernicke') AND nachname <> 'Wernicke';
ExerciseID: 50626 (category: Verbund, level: mittel)
BearbeitenFür welche Linien werden die einzelnen Fahrer eingesetzt? Erzeuge eine Ergebnistabelle vom Typ (fahrerNr, linieNr). Duplikate sollen nicht angezeigt werden.
Musterloesung: select distinct fahrerNr, LinieNr from Fahrt natural join Leitet
ExerciseID: 50625 (category: Verbund, level: mittel)
BearbeitenWie heißen die Start-Haltestellen der jeweiligen Linien? Gib die Liniennummer und den Namen der Starthaltestelle aus (linieNr, haltestellenName).
Musterloesung: select linieNr, haltestellenName from Haltestelle inner join Linie ON(linieBeginnHaltestelleNr = HaltestelleNr)
ExerciseID: 50602 (category: DML, level: mittel)
BearbeitenDer Fahrer mit der Fahrernr 19609 ist befördert worden. Erhöhen Sie sein Grundgehalt um 10%.
Musterloesung: update fahrer set grundgehalt = grundgehalt * 1.1 where fahrernr = 19609;
ExerciseID: 50603 (category: DML, level: mittel)
BearbeitenMusterloesung: update fahrer set grundgehalt = grundgehalt + 100 where kinderanzahl > 0;
Das Grundgehalt aller Fahrer mit Kindern soll um 100 Euro steigen.
ExerciseID: 50604 (category: DML, level: mittel)
BearbeitenSetzen Sie den Zustand aller Fahrer, die einer Fahrt zugeteilt sind, auf "aktiv"
Studentische Lösung:
UPDATE Fahrer SET zustand='aktiv' WHERE fahrernr in (select fahrernr from fahrer inner join leitet USING(fahrernr))
Musterloesung: update Fahrer set zustand='aktiv' where fahrernr = any (select fahrernr from leitet);
ExerciseID: 50605 (category: DML, level: mittel)
BearbeitenAlle Fahrer, die vor dem 1.1.1950 geboren worden sind, sollen in den Ruhestand und aus der Fahrertabelle gelöscht werden.
Studentische Lösung:
DELETE FROM Fahrer WHERE geburtsdatum < '1950-01-01'
Musterloesung: delete from Fahrer where fahrerNr IN (select fahrerNr from Fahrer where geburtsdatum<'1950-01-01');
ExerciseID: 50611 (category: DML, level: mittel)
BearbeitenLinie Nummer 118 ist unrentabel geworden und wird eingestellt. Daher müssen u.a. aus der Tabelle Leitet alle betroffenen Zeilen entfernt werden.
Musterloesung: delete from Leitet where fahrtNr IN (select fahrtNr from Fahrt where linieNr = 118);
ExerciseID: 50606 (category: DML, level: mittel)
BearbeitenLinie Nummer 117 ist unrentabel geworden und wird eingestellt. Daher müssen u.a. aus der Tabelle Leitet alle betroffenen Zeilen entfernt werden.
Musterloesung: delete from Leitet where fahrtNr IN (select fahrtNr from Fahrt where linieNr= 117);
ExerciseID: 50614 (category: DML, level: schwer)
BearbeitenSetzen Sie die Beginnhaltestelle aller Linien auf jene Haltestelle, die sie zuerst erreichen (fahrzeit = 0 Minuten).
Musterloesung: update linie set liniebeginnhaltestellenr = (select haltestellenr from erreicht where fahrzeit = '00:00:00' and erreicht.linienr = linie.linienr);
ExerciseID: 50631 (category: Verbund, level: schwer)
BearbeitenGib für alle Linien ihre Haltestellennummern aus. Starthaltestellen sollen NICHT in der Ergebnistabelle erscheinen. (Ausgabe: linienr, haltestellenr)
Studentische Lösung:
SELECT linieNr, haltestelleNr FROM linie INNER JOIN Erreicht USING(linieNr) WHERE linie.liniebeginnhaltestelleNr <> erreicht.haltestelleNr
Musterloesung: select linie.linieNr, haltestelleNr from Linie inner join Erreicht ON (linieBeginnHaltestelleNr <> haltestelleNr AND Linie.linieNr = Erreicht.linieNr)
ExerciseID: 50632 (category: Verbund, level: schwer)
BearbeitenWelche Fahrer haben den gleichen Vornamen? Die Ergebnistabelle soll folgendes Schema besitzen (fahrernr1, fahrernr2, vorname). Fahrernr1 muss immer kleiner als Fahrernr2 sein.
Musterloesung: select Fahrer1.fahrerNr as fahrernr1, Fahrer2.fahrerNr as fahrernr2, Fahrer1.vorname from Fahrer as Fahrer1 join Fahrer AS Fahrer2 ON (Fahrer1.vorname = Fahrer2.vorname AND Fahrer1.fahrerNr < Fahrer2.fahrerNr)
ExerciseID: 50637 (category: Verbund, level: schwer)
BearbeitenWelche männlichen Fahrer haben den gleichen Vornamen? Die Ergebnistabelle soll folgendes Schema besitzen (fahrernr1, fahrernr2, vorname). Die Fahrernr1 muss immer kleiner als die Fahrernr2 sein.
Studentische Lösung:
select Fahrer1.fahrerNr as fahrernr1, Fahrer2.fahrerNr as fahrernr2, Fahrer1.vorname AS vorname FROM Fahrer as Fahrer1 join Fahrer AS Fahrer2 ON (Fahrer1.vorname = Fahrer2.vorname AND Fahrer1.fahrerNr < Fahrer2.fahrerNr AND Fahrer1.geschlecht=Fahrer2.geschlecht) WHERE Fahrer1.geschlecht='m'
Musterloesung: select Fahrer1.fahrerNr as fahrernr1, Fahrer2.fahrerNr as fahrernr2, Fahrer1.vorname from Fahrer as Fahrer1 join Fahrer AS Fahrer2 ON (Fahrer1.vorname = Fahrer2.vorname AND Fahrer1.fahrerNr < Fahrer2.fahrerNr) where fahrer1.geschlecht = 'm' and fahrer2.geschlecht = 'm'
ExerciseID: 50630 (category: Verbund, level: schwer)
BearbeitenWelche Fahrer mit Vornamen 'Heintje' haben ein unterschiedliches Geschlecht? (Ausgabe: vorname, fahrerNr1, geschlecht1, fahrerNr2, geschlecht2). Fahrernr1 muss immer kleiner als Fahrernr2 sein.
Musterloesung: select Fahrer1.vorname as vorname, Fahrer1.fahrerNr as fahrernr1, Fahrer1.geschlecht as geschlecht1, Fahrer2.fahrerNr as fahrernr2, Fahrer2.geschlecht as geschlecht2 from Fahrer as Fahrer1 join Fahrer AS Fahrer2 ON (Fahrer1.geschlecht <> Fahrer2.geschlecht AND Fahrer1.fahrerNr < Fahrer2.fahrerNr AND fahrer1.vorname='Heintje' and fahrer2.vorname='Heintje')
ExerciseID: 50636 (category: Verbund, level: schwer)
BearbeitenWelche weiblichen Fahrer haben den gleichen Vornamen? Die Ergebnistabelle soll folgendes Schema besitzen (fahrernr1, fahrernr2, vorname). Fahrernr1 muss immer kleiner als Fahrernr2 sein.
Musterloesung: select Fahrer1.fahrerNr as fahrernr1, Fahrer2.fahrerNr as fahrernr2, Fahrer1.vorname from Fahrer as Fahrer1 join Fahrer AS Fahrer2 ON (Fahrer1.vorname = Fahrer2.vorname AND Fahrer1.fahrerNr < Fahrer2.fahrerNr) where fahrer1.geschlecht = 'w' and fahrer2.geschlecht = 'w'
ExerciseID: 50621 (category: Mengen, level: schwer)
BearbeitenWelche Linien starten von 'Altenessen Mitte' und fahren über 'Hirschlandplatz'.Ausgabe(Alle Attribute von Linie).
Studentische Lösung:
SELECT * FROM Linie WHERE LinieNr IN ( SELECT linieNr FROM Erreicht JOIN Haltestelle USING(haltestelleNr) WHERE haltestellenname IN (SELECT haltestellenname FROM Erreicht JOIN Haltestelle USING(haltestelleNr) WHERE haltestellenname='Hirschlandplatz' ) ) INTERSECT SELECT * FROM Linie WHERE liniebeginnhaltestelleNr= ( SELECT liniebeginnhaltestelleNr FROM Linie INNER JOIN Haltestelle ON(liniebeginnhaltestelleNr=haltestelleNr AND haltestellenname='Altenessen Mitte') )