Skip to content

Commit

Permalink
Add Aufgabe for SELECT across three tables.
Browse files Browse the repository at this point in the history
  • Loading branch information
SilasBerger committed May 26, 2024
1 parent f31fbb2 commit 1e2c40f
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 0 deletions.
48 changes: 48 additions & 0 deletions content/material/Datenbanken/05-Liste-von-Freunden.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Liste von Freunden
Sie haben gelernt, wie Sie die [Tabellen `legodudes` und `legodudes_freunde` kombinieren](Multi-Select) können, um herauszufinden, wer mit wem befreundet ist.

Im Ergebnis erhalten Sie allerdings noch kaum Informationen über die entsprechenden Freunde, ausser deren `id`.
![](img/freunde.png)

Sie bräuchten also eigentlich nochmal die Tabelle `legodudes`, denn die enthält ja alle weiteren Informationen wie etwa den Namen.

:::aufgabe[Erster Versuch]
Nehmen Sie die Abfrage
```sql
SELECT * FROM legodudes, legodudes_freunde WHERE name = 'Botot' and legodude_id = legodudes.id;
```

und passen Sie so an, dass nicht nur aus den zwei Tabellen `legodudes` und `legodudes_freunde`, sondern aus den "drei" Tabellen `legodudes`, `legodudes_freunde` und nochmal `legodudes` selektiert wird.

Führen Sie die Abfrage aus und versuchen Sie das Ergebnis zu interpretieren.

<details>
<summary>Musterlösung</summary>
<div>
```sql
SELECT * FROM legodudes, legodudes_freunde, legodudes WHERE name = 'Botot' and legodude_id = legodudes.id;
```
</div>
</details>
:::

Ups — da haben wir ein Problem. Mit _Mehrdeutigkeit_ hatten wir es bereits zu tun, als SQL nicht klar war, auf welche der beiden `id`-Spalten wir uns beziehen. Das haben wir präzisiert, indem wir gesagt haben, dass es um die Spalte `legodudes.id` geht. Nun haben wir in unserer Abfrage aber **zwei Tabellen namens `legodudes`**.

Jetzt müssen wir also noch weiter präzisieren, auf welche "Version" der `legodudes`-Tabelle wir uns beziehen, weil die in unserer Abfrage jetzt zweimal vorkommt (auch wenn es sich natürlich beide Male um genau die gleiche Tabelle handelt). Das machen wir, in dem wir eine der beiden Tabellen in unserer Abfrage _temporär umbenennen_ — wir geben ihr ein sogenanntes **Alias**.

Dazu müssen wir den `FROM`-Teil wie folgt anpassen:

```sql
[...] FROM legodudes, legodudes_freunde, legodudes as freunde [...];
```

Der zweiten "Version" von `legodudes` geben wir hier also den "Spitznamen" (das _Alias_) `freunde`.

:::aufgabe[Abfrage verbessern]
Passen Sie Ihre Abfrage so lange an, bis Sie als Ergebnis die folgende Tabelle erhalten:
![--width=60%](img/freunde_mit_namen.png)

Speichern Sie Ihre Abfrage als `Liste von Freunen.sql` und geben Sie sie ab.
:::

---
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 1e2c40f

Please sign in to comment.