Self-Join Bei der Verbundbildung wird mehr als einmal Bezug auf eine Relation genommen Prinzip der Verbundbildung Select * From Tabellenname T1, Tabellenname T2; -- T1=T2 Anwendungsbeispiel: Finde die Namen aller Studenten, die an zwei Kursen teilnehmen, die zur gleichen Zeit 1. Schritt: Finde die SID aller Studenten, die an mehr als einem Kurs teilnehmen Select Distinct B1.SNummer From Besucht B1, Besucht B2 WHERE B1.SNummer=B2.SNummer AND B1.VName <> B2.VName; 2. Schritt: Finde die SID aller Studenten, die unterschiedliche Kurse besuchen, die zur gleichen Zeit Select Distinct B1.SNummer From Besucht B1, Besucht B2, Veranstaltung V1, Veranstaltung V2 Where B1.SNummer=B2.SNummer AND B1.VName <> B2.VName AND B1.VName = V1.VName AND B2.VName = V2.VName AND V1.Beginnt_um=V2.Beginnt_um; 3. Schritt: Finde die Namen aller Studenten, die an zwei Kursen teilnehmen, die zur gleichen Zeit Select Distinct S.SName From Student S Where S.SNummer IN (Select B1.SNummer From Besucht B1, Besucht B2, Veranstaltung V1, Veranstaltung V2 Where B1.SNummer=B2.SNummer AND B1.VName <> B2.VName AND B1.Vname = V1.VName AND B2.Vname = V2.VName AND V1.Beginnt_um=V2.Beginnt_um); Seite 1
IN Auswahloperator Spaltenname IN (SFW-Anweisung) Vergleichsbedingung ist erfüllt, sobald der Wert von Spaltenname mit mindestens einem der Werte aus der Subauswahl übereinstimmt Liefert die Subauswahl eine leere Menge zurück, so ist die Auswahlbedingung nicht zutreffend ANY Auswahloperator Spaltenname Vergleichsoperation ANY (SFW-Anweisung) Ist die Vergleichsbedingung bei mindestens einem Wert aus der Subauswahl erfüllt, so wird aktueller Datensatz Bestandteil des Ergebnisses Liefert die Subauswahl eine leere Menge zurück, so ist die Auswahlbedingung nicht zutreffend Seite 2
ALL Auswahloperator Spaltenname Vergleichsoperation ALL (SFW-Anweisung) Ist die Vergleichsbedingung bei allen Werten aus der Subauswahl erfüllt, so wird aktueller Datensatz Bestandteil des Ergebnisses Liefert die Subauswahl keinen Wert zurück, so triff die Auswahlbedingung zu EXISTS EXISTS (SFW-Anweisung) Liefert die Subauswahl ein Ergebnis, so triff die Auswahlbedingung zu (korrelierte Subquery Subauswahl wird für jede Tabellenzeile isoliert ausgewertet) Liefert die Subauswahl keinen Wert zurück, so ist die Auswahlbedingung nicht erfüllt Seite 3
Division von Relationen Anwendung von NOT EXISTS Anwendungsbeispiel: Gesucht werden die Namen aller Studenten, die alle angebotenen Kurse/Veranstaltungen besuchen Gegeben: Gesucht: E / V Relation S Student Relation V Veranstaltung Relation B besucht Relation E - S Natural Join B Effiziente Umsetzung in SQL: 1. Schritt: Finde die SID aller Studenten, die mindestens eine Veranstaltung besuchen Select B.SNummer From Veranstaltung V, Besucht B Where V.VName = B.VName; 2. Schritt: Finde die SID aller Studenten, die mindestens eine Veranstaltung nicht besuchen Select B.SNummer From Besucht B Where not exists ( Select * From Veranstaltung V Where V.VName = B.VName); 3. Schritt: Berechnung aller Studenten, die alle Veranstaltungen besuchen Select Distinct S.SName from Student S Where not exists (Select B.SNummer From Besucht B Where not exists (Select * From Veranstaltung V Where V.VName = B.VName)); Seite 4
Studenten-Datenbank Student SNUMMER SNAME HAUPTFACH SEMESTER SALTER ------------------------------------------------------------------------------------------------------- 101 Karl Biologie 5 25 102 Mayer Mathematik 1 20 103 Schenk Deutsch 14 30 104 Grust Informatik 10 34 105 Mainberger Biologie 4 22 106 Conrad Sport 1 18 Veranstaltung VNAME BEGINNT_U RAUM FID ------------------------------------------------------------------------------------------------------- Grundlagen der Mathematik 10:00 R201 1 Informatik I 12:00 D301 1 Biologie fuer Quereinsteiger 08:00 F345 2 Biologie fuer Fortgeschrittene 08:00 F346 2 Fakultaet FID FNAME ---------------------------------------------- 1 Informatik 2 Biologie 3 Sport besucht SNUMMER VNAME ---------------------------------------------------------- 101 Informatik I 101 Biologie fuer Quereinsteiger 102 Grundlagen der Mathematik 104 Informatik I 104 Grundlagen der Mathematik 104 Biologie fuer Quereinsteiger 105 Biologie fuer Quereinsteiger 105 Grundlagen der Mathematik 105 Biologie fuer Fortgeschrittene 105 Informatik I Seite 5