m164/Tage/5/select-join.md

74 lines
2.7 KiB
Markdown
Raw Normal View History

# SELECT JOIN
## Inhaltsverzeichnis
- [SELECT JOIN](#select-join)
- [Inhaltsverzeichnis](#inhaltsverzeichnis)
- [Aufgaben](#aufgaben)
- [Kartesisches Produkt](#kartesisches-produkt)
- [Einfache Abfragen über zwei Tabellen](#einfache-abfragen-über-zwei-tabellen)
## Aufgaben
### Kartesisches Produkt
> Erklären Sie in eigenen Worten, warum diese Abfrage kein sinnvolles Ergebnis gibt:
Die folgende Abfrage hat kein nützliches Ergebnis, weil die beiden Tabellen nicht zusammengeführt wurden. Ohne Zusammenführung entsteht eine riesige Tabelle, die nicht sehr aussagekräftig ist. Man muss die Abfrage ändern, um nur wichtige Ergebnisse zu erhalten.
```sql
SELECT * FROM kunden
INNER JOIN orte
```
### Einfache Abfragen über zwei Tabellen
1. Geben Sie Name, Postleitzahl und Wohnort aller Kunden aus. Die Liste enthält den Kundennamen und den Namen des Orts, wo er wohnt.<br>
2. Geben Sie Name und Wohnort aller Kunden aus, die die Postleitzahl 79312 haben.<br>
3. Geben Sie Name und Wohnort aller Kunden aus, die in Emmendingen wohnen (Einschränkungskriterium ist NICHT die Postleitzahl, sondern 'Emmendingen').<br>
4. Geben Sie Name, Wohnort und Einwohnerzahl für alle Kunden aus, die in einem Ort mit mehr als 70000 Einwohnern wohnen.<br>
5. Geben Sie alle Orte aus, die weniger als 1000000 Einwohner haben.
6. Geben Sie Kundename und Ortname aus für alle Kunden, die in Orten mit einer Einwohnerzahl zwischen 100.000 und 1.500.000 leben.<br>
7. Geben Sie Kundename, Postleitzahl und Ortname aus für alle Kunden, deren Name ein "e" enthält und alle Orte, die ein "u" oder ein "r" enthalten (frEd aus stUden wird also genau so angezeigt wie jEssE aus bRnz, frEd aus salzen aber nicht und martin aus hambURg auch nicht).<br>
```sql
-- 1
SELECT kunden.Name, kunden.Postleitzahl, orte.Name as Wohnort
FROM kunden
JOIN orte ON kunden.OrtID = orte.ID;
-- 2
SELECT kunden.Name, orte.Name as Wohnort
FROM kunden
JOIN orte ON kunden.OrtID = orte.ID
WHERE kunden.Postleitzahl = 79312;
-- 3
SELECT kunden.Name, orte.Name as Wohnort
FROM kunden
JOIN orte ON kunden.OrtID = orte.ID
WHERE orte.Name = 'Emmendingen';
-- A4
SELECT kunden.Name, orte.Name as Wohnort, orte.Einwohnerzahl
FROM kunden
JOIN orte ON kunden.OrtID = orte.ID
WHERE orte.Einwohnerzahl > 70000;
-- 5
SELECT orte.Name, orte.Einwohnerzahl
FROM orte
WHERE orte.Einwohnerzahl < 1000000;
-- 6
SELECT kunden.Name, orte.Name as Wohnort
FROM kunden
JOIN orte ON kunden.OrtID = orte.ID
WHERE orte.Einwohnerzahl BETWEEN 100000 AND 1500000;
-- 7
SELECT kunden.Name, kunden.Postleitzahl, orte.Name as Wohnort
FROM kunden
JOIN orte ON kunden.OrtID = orte.ID
WHERE kunden.Name LIKE '%e%' AND (orte.Name LIKE '%u%' OR orte.Name LIKE '%r%');
```