Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

SQL - Structured Query Language AIFB SS 2001 1 (1/7) 2.3.8 Verknüpfung von Relationen mit Subqueries (1/7) 32. Namen aller Angestellten, die mit 100 %

Ähnliche Präsentationen


Präsentation zum Thema: "SQL - Structured Query Language AIFB SS 2001 1 (1/7) 2.3.8 Verknüpfung von Relationen mit Subqueries (1/7) 32. Namen aller Angestellten, die mit 100 %"—  Präsentation transkript:

1 SQL - Structured Query Language AIFB SS 2001 1 (1/7) 2.3.8 Verknüpfung von Relationen mit Subqueries (1/7) 32. Namen aller Angestellten, die mit 100 % ihrer Arbeitszeit an einem Projekt mitarbeiten. 1. Schritt: Bestimme aus ang-pro alle ANG-NR, die zu PROZ-ARBZEIT=100 gehören (Query a) (das sind geschachtelte Queries) anstelle von Join Ergebnis: ang-pro (#=m) P-NRANG-NRPROZ-ARBZEIT 7612353207100 761235311550 761235319050 761235143540 761235342550 770008224420 770008123740 770008281470 770008245440 770114281430 770114143560 770114123760 770114245460 770114342550 7701142412100 770231319050 7702312314100 770231224480 770231311550 7702311324100 ANG-NR 3207 2412 2314 1324 SELECT FROM WHERE ANG-NR ang-pro PROZ-ARBZEIT=100;

2 SQL - Structured Query Language AIFB SS 2001 2 angestellte (#=n) ANG-NRNAMEWOHNORTABT-NR 3115 MeyerKarlsruhe35 3207 MüllerMannheim30 2814 KleinMannheim32 3190 MausKarlsruhe30 2314 GroßKarlsruhe35 1324 SchmittHeidelberg35 1435 MayerleinBruchsal32 2412 MüllerKarlsruhe32 2244 SchulzBruchsal31 1237 KrämerLudwigshafen31 3425 MeierPforzheim30 2454 SchusterWorms31 (2/7) 2.3.8 Verknüpfung von Relationen mit Subqueries (2/7) 2. Schritt: Wähle in angestellte alle Tupel aus, deren ANG-NR in der oben gegebenen Ergebnismenge liegt: (Query b) Ergebnis: NAME Müller Groß Schmitt Müller SELECT FROM WHERE NAME angestellte ANG-NR IN (3207, 2412, 2314,1324);

3 SQL - Structured Query Language AIFB SS 2001 3 (3/7) 2.3.8 Verknüpfung von Relationen mit Subqueries (3/7) {äußere Query b} SELECT NAME FROM angestellte WHERE ANG-NR IN {Subquery a} (SELECT ANG-NR FROM ang-pro WHERE PROZ-ARBZEIT = 100) Vorgehensweise des Systems: a) Abarbeitung Subquery (a) b) Übergabe Ergebnis an übergeordnete (äußere) Query (b) c) Abarbeitung Query b mit dem übergebenen Ergebnis Zusammenfassung zu geschachtelter Query:

4 SQL - Structured Query Language AIFB SS 2001 4 (4/7) 2.3.8 Verknüpfung von Relationen mit Subqueries (4/7) SELECT NAME FROM angestellte, ang-pro WHERE PROZ-ARBZEIT = 100 AND ang-pro.ANG-NR = angestellte.ANG-NR; 33. Äquivalente Abfrage mit Join: Vergleich 32. mit 33.: (vereinfachte Betrachtung!) man betrachte Anzahl der notwendigen DB-Zugriffe! bei 32.:n+m bei 33.:n m Ergebnis von 32. SELECT NAME FROM angestellte WHERE ANG-NR IN (SELECT ANG-NR FROM ang-pro WHERE PROZ-ARBZEIT = 100)

5 SQL - Structured Query Language AIFB SS 2001 5 (5/7) 2.3.8 Verknüpfung von Relationen mit Subqueries (5/7) 34. Namen aller Angestellten, die an mindestens einem Projekt in Karlsruhe mitarbeiten. Vorgehensweise: a) in projekt: Auswahl P-NR der Projekte in Karlsruhe b) in ang-pro: Auswahl ANG-NR, deren P-NR in der obigen Ergebnismenge liegen c) in angestellte: Auswahl Tupel mit o. best. ANG-NR c)SELECT NAME FROM angestellte WHERE ANG-NR IN b)(SELECT ANG-NR FROM ang-pro WHERE P-NR IN a)(SELECT P-NR FROM projekt WHERE P-FILIALE =Karlsruhe)); Mehrfach geschachtelte Queries Animation und Ergebnis dieses Beispiels (siehe Seite 72)

6 SQL - Structured Query Language AIFB SS 2001 6 (6/7) 2.3.8 Verknüpfung von Relationen mit Subqueries (6/7) SELECTa.NAME FROMangestellte a, ang-pro ap, projekt p WHEREa.ANG-NR = ap.ANG-NR AND ap.P-NR=p.P-NR AND P-FILIALE=Karlsruhe 35. äquivalente Formulierung mit 2-fach Join:

7 SQL - Structured Query Language AIFB SS 2001 7 (7/7) 2.3.8 Verknüpfung von Relationen mit Subqueries (7/7) Correlated subquery: Subquery bezieht Größen der umgebenden äußeren Query ein (als Variablen). : 36. Gib alle Orte an, an denen mehr als ein Projekt angesiedelt ist. b)SELECT DISTINCT P-FILIALE FROM projekt a WHERE 1 < a)(SELECT COUNT (*) FROM projekt b WHERE b.P-FILIALE = a.P-FILIALE Jetzt: b) kann nicht vorab ausgewertet werden, da abhängig von P-Filiale aus a). Animation und Ergebnis dieses Beispiels (siehe Seite 73)

8 SQL - Structured Query Language AIFB SS 2001 8 Beispiel für Mehrfach geschachtelte Queries SELECT NAME FROM angestellte WHERE ANG-NR IN angestellte (#=n) ANG-NRNAMEWOHNORTABT-NR 3115MeyerKarlsruhe35 3207MüllerMannheim30 2814KleinMannheim32 3190MausKarlsruhe30 2314GroßKarlsruhe35 1324SchmittHeidelberg35 1435MayerleinBruchsal32 2412MüllerKarlsruhe32 2244SchulzBruchsal31 1237KrämerLudwigshafen31 3425MeierPforzheim30 2454SchusterWorms31 projekt (#=k) P-NAMEP-NRP-FILIALEP-LEITER p-1761235Karlsruhe3115 p-2770008Karlsruhe3115 p-3770114Heidelberg1324 P-4770231Mannheim2814 ang-pro (#=m) P-NRANG-NRPROZ-ARBZEIT 7612353207100 761235311550 761235319050 761235143540 761235342550 770008224420 770008123740 770008281470 770008245440 770114281430 770114143560 770114123760 770114245460 770114342550 7701142412100 770231319050 7702312314100 770231224480 770231311550 7702311324100 (SELECT P-NR FROM projekt WHERE P-FILIALE =Karlsruhe)); (SELECT ANG-NR FROM ang-pro WHERE P-NR IN Ergebnis: NAME Meyer Müller Klein Maus Mayerlein Krämer Meier Schuster

9 SQL - Structured Query Language AIFB SS 2001 9 Beispiel für Correlated subquery SELECTDISTINCT P-FILIALE FROMprojekt a WHERE1 < (SELECT COUNT (*) FROM projekt b WHERE b.P-FILIALE = a.P-FILIALE); projekt a P-NAMEP-NRP-FILIALEP-LEITER p-1761235Karlsruhe3115 p-2770008Karlsruhe3115 p-3770114Heidelberg1324 P-4770231Mannheim2814 Ergebnis: P-FILIALE Kalrsruhe projekt b P-NAMEP-NRP-FILIALEP-LEITER p-1761235Karlsruhe3115 p-2770008Karlsruhe3115 p-3770114Heidelberg1324 P-4770231Mannheim2814 2 1 1


Herunterladen ppt "SQL - Structured Query Language AIFB SS 2001 1 (1/7) 2.3.8 Verknüpfung von Relationen mit Subqueries (1/7) 32. Namen aller Angestellten, die mit 100 %"

Ähnliche Präsentationen


Google-Anzeigen