Kurs:Wirtschaftsinformatik SS09 Datenbankmanagementsysteme/Teil 4/Loesungen SS2010

category: Aggregation, level: einfach Bearbeiten

ExerciseID: 50660 (category: Aggregation, level: einfach) Bearbeiten

Gib 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) Bearbeiten

Ermittle die durchschnittliche Unfallzahl aller männlichen Fahrer.

Musterlösung:

select avg(unfallzahl) from Fahrer where geschlecht='m'


ExerciseID: 50662 (category: Aggregation, level: einfach) Bearbeiten

Wieviele 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) Bearbeiten

Gib 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) Bearbeiten

Wieviele Haltestellen gibt es? Benennungen von Ergebnisspalten sind nicht vorzunehmen.

Musterlösung:

select count(*) from Haltestelle


ExerciseID: 50665 (category: Aggregation, level: einfach) Bearbeiten

Wie 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) Bearbeiten

Gebe 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) Bearbeiten

Was 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) Bearbeiten

Wieviele Fahrer gibt es? Benennungen von Ergebnisspalten sind nicht vorzunehmen.

Musterlösung:

select count(*) from Fahrer


ExerciseID: 50658 (category: Aggregation, level: einfach) Bearbeiten

Gib alle Fahrer aus, deren Nachname mit einem P beginnt. Ergebnistyp sei das volle Tupel.

Musterlösung:


ExerciseID: 50658 (category: Aggregation, level: einfach) Bearbeiten

Gib 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) Bearbeiten

Ermittle 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) Bearbeiten

Geben 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) Bearbeiten

Geben 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) Bearbeiten

Ermittle 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. Bearbeiten

Musterlösung: select * from fahrer where nachname=vorname;

ExerciseID: 45794 (category: SFW, level: einfach) Bearbeiten

Welche 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) Bearbeiten

Welche 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) Bearbeiten

Welche 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) Bearbeiten

Welche 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) Bearbeiten

Welche 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) Bearbeiten

Ermittle 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) Bearbeiten

Ermittle 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) Bearbeiten

Welche 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) Bearbeiten

Ermittle 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) Bearbeiten

Wieviele 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) Bearbeiten

Ermittle 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) Bearbeiten

Ermittle 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) Bearbeiten

Welche 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) Bearbeiten

Welche 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) Bearbeiten

Welche 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) Bearbeiten

Welche 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) Bearbeiten

Die 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) Bearbeiten

Bei 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) Bearbeiten

Ermittle 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) Bearbeiten

Lösche die Tabelle 'erreicht' aus der DB.

DROP TABLE erreicht;


ExerciseID: 50646 (category: DDL, level: einfach) Bearbeiten

Lösche die Tabelle Fahrer aus der DB.

Musterlösung:

DROP TABLE fahrer;


ExerciseID: 50647 (category: DDL, level: einfach) Bearbeiten

Erstelle 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) Bearbeiten

Geben 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) Bearbeiten

Ergä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) Bearbeiten

Welche 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) Bearbeiten

Gib 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) Bearbeiten

Zeige 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) Bearbeiten

Musterloesung: 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) Bearbeiten

Gib 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) Bearbeiten

Zeige 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) Bearbeiten

Welche 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) Bearbeiten

Geben 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) Bearbeiten

Zeige 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) Bearbeiten

Zeige 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) Bearbeiten

Zeige 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) Bearbeiten

Fü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) Bearbeiten

Wie 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) Bearbeiten

Der 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) Bearbeiten

Musterloesung: 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) Bearbeiten

Setzen 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) Bearbeiten

Alle 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) Bearbeiten

Linie 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) Bearbeiten

Linie 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) Bearbeiten

Setzen 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) Bearbeiten

Gib 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) Bearbeiten

Welche 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) Bearbeiten

Welche 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) Bearbeiten

Welche 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) Bearbeiten

Welche 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) Bearbeiten

Welche 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') )