-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Aufgabe for SELECT across three tables.
- Loading branch information
1 parent
f31fbb2
commit 1e2c40f
Showing
2 changed files
with
48 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.