Restructure & Progress on day 5

- Created aggregatsfunktionen.md
- Created select-join.md
- Modified Tage/5/README.md
- Moved Tourenplaner/ and Introduction/ to Tage/2-3
This commit is contained in:
Sangelo 2023-04-13 20:36:04 +02:00
parent bf9cacdefb
commit f6a4a92264
9 changed files with 279 additions and 7 deletions

View File

@ -1,10 +1,10 @@
# Auftrag 1
-- Auftrag 1
CREATE SCHEMA if not exists db_MyFlower
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
USE db_MyFlower;
# Auftrag 2
-- Auftrag 2
CREATE TABLE if not exists Bestellung (
id INT NOT NULL AUTO_INCREMENT,
Best_Nummer VARCHAR(5) NOT NULL,
@ -15,24 +15,24 @@ CREATE TABLE if not exists Bestellung (
PRIMARY KEY (id)
);
# Auftrag 3
-- Auftrag 3
INSERT INTO Bestellung (Best_Nummer, Lieferadresse, Lieferdatum, Lieferzeit, Betrag)
VALUES ('#0001', 'Musterstrasse 3', '2023-08-09', '17:08', '10.05');
# Auftrag 4
-- Auftrag 4
INSERT INTO Bestellung (Best_Nummer, Lieferadresse, Lieferdatum, Betrag)
VALUES ('#0002', 'Musterville 32', '2023-12-10', '100.20');
# Auftrag 6
-- Auftrag 6
UPDATE Bestellung
SET Betrag = Betrag + 20
WHERE id = 1;
# Auftrag 7
-- Auftrag 7
SELECT id, Lieferdatum, Lieferzeit, Lieferadresse
FROM Bestellung
WHERE (Lieferdatum >= '2023-01-01' AND Lieferzeit > '12:00') OR Lieferadresse = 'Zürich'
ORDER BY Lieferdatum DESC, Lieferzeit ASC;
# Auftrag 5
-- Auftrag 5
ALTER TABLE Bestellung MODIFY Lieferzeit DateTime;

View File

@ -3,6 +3,8 @@
- [Tag 5](#tag-5)
- [Inhaltsverzeichnis](#inhaltsverzeichnis)
- [Select Alias](#select-alias)
- [Select Join \[↗\]](select-join.md)
- [Aggregatsfunktionen \[↗\]](aggregatsfunktionen.md)
## Select Alias
SQL Script-Ergänzung:

View File

@ -0,0 +1,196 @@
# Aggregatsfunktionen
## Aufgaben
1. Welches ist das niedrigste/höchste Gehalt eines Lehrers?
```sql
MariaDB [uebungSchule]> select min(gehalt) from lehrer;
+-------------+
| min(gehalt) |
+-------------+
| 1740 |
+-------------+
1 row in set (0.000 sec)
------
MariaDB [uebungSchule]> select max(gehalt) from lehrer;
+-------------+
| max(gehalt) |
+-------------+
| 6581 |
+-------------+
1 row in set (0.000 sec)
```
2. Was ist das niedrigste Gehalt, das einer unserer Mathelehrer bekommt?
```sql
MariaDB [uebungSchule]> select min(gehalt) from lehrer where id in (select idLehrer from lehrer_hat_faecher where idFaecher = (select id from faecher where fachbezeichnung = 'Mathe'));
+-------------+
| min(gehalt) |
+-------------+
| 2490 |
+-------------+
1 row in set (0.001 sec)
```
3. Was ist der beste Notendurchschnitt der Noten Deutsch/Mathe?
```sql
MariaDB [uebungSchule]> select avg(noteMathe) from schueler;
+----------------+
| avg(noteMathe) |
+----------------+
| 3.5437 |
+----------------+
1 row in set (0.000 sec)
------
MariaDB [uebungSchule]> select avg(noteDeutsch) from schueler;
+------------------+
| avg(noteDeutsch) |
+------------------+
| 3.6699 |
+------------------+
1 row in set (0.000 sec)
-- Besserer Durchschnitt ist in Deutsch.
```
4. Wie viel Einwohner hat der größte Ort, wie viel der Kleinste? Ausgabe "Höchste Einwohnerzahl", "Niedrigste Einwohnerzahl"
```sql
MariaDB [uebungSchule]> select min(einwohnerzahl) from orte;
+--------------------+
| min(einwohnerzahl) |
+--------------------+
| 2977 |
+--------------------+
1 row in set (0.000 sec)
---
MariaDB [uebungSchule]> select max(einwohnerzahl) from orte;
+--------------------+
| max(einwohnerzahl) |
+--------------------+
| 262811 |
+--------------------+
1 row in set (0.000 sec)
```
5. Wie groß ist die Differenz zwischen dem Ort mit den meisten und dem mit den wenigsten Einwohnern (z.B.: kleinster Ort hat 1000 Einwohner, größter Ort hat 3000 - Differenz ist 2000). Ausgabe einer Spalte "Differenz".
```sql
MariaDB [uebungSchule]> select max(einwohnerzahl) - min(einwohnerzahl) as differenz from orte;
+------------+
| differenz |
+------------+
| 259834 |
+------------+
1 row in set (0.000 sec)
```
6. Wie viele Schüler haben wir in der Datenbank?
```sql
MariaDB [uebungSchule]> select count(*) from schueler;
+----------+
| count(*) |
+----------+
| 103 |
+----------+
1 row in set (0.000 sec)
```
7. Wie viele Schüler haben ein Smartphone?
```sql
MariaDB [uebungSchule]> select count(idSmartphones) from schueler;
+----------------------+
| count(idSmartphones) |
+----------------------+
| 98 |
+----------------------+
1 row in set (0.000 sec)
```
8. Wie viele Schüler haben ein Smartphone der Firma Samsung oder der Firma HTC?
```sql
MariaDB [uebungSchule]> select count(idSmartphones) from schueler where idSmartphones = 1 or idSmartphones = 3;
+----------------------+
| COUNT(idSmartphones) |
+----------------------+
| 39 |
+----------------------+
1 row in set (0.000 sec)
```
9. Wie viele Schüler wohnen in Waldkirch?
```sql
MariaDB [uebungSchule]> select * from orte;
+----+--------------+-------------+---------+---------------+
| id | postleitzahl | name | vorwahl | einwohnerzahl |
+----+--------------+-------------+---------+---------------+
| 1 | 79312 | Emmendingen | 07641 | 29612 |
| 2 | 79311 | Reute | 07641 | 8501 |
| 3 | 79312 | Wasser | 07641 | 2977 |
| 4 | 79098 | Freiburg | 0761 | 262811 |
| 5 | 79206 | Breisach | 07667 | 22719 |
| 6 | 79313 | Waldkirch | 07681 | 25020 |
+----+--------------+-------------+---------+---------------+
6 rows in set (0.000 sec)
MariaDB [uebungSchule]> select count(idOrte) from schueler where idOrte = 6;
+---------------+
| count(idOrte) |
+---------------+
| 12 |
+---------------+
1 row in set (0.000 sec)
```
10. Wie viele Schüler, die bei Herrn Bohnert Unterricht haben, wohnen in Emmendingen?
```sql
MariaDB [uebungSchule]> SELECT COUNT(*)
-> FROM schueler s
-> JOIN lehrer_hat_schueler l ON s.id = l.idSchueler
-> JOIN lehrer le ON l.idLehrer = le.id
-> WHERE le.id = 4 AND s.idOrte = 1;
+----------+
| COUNT(*) |
+----------+
| 1 |
+----------+
1 row in set (0.001 sec)
```
11. Wie viele Schüler unterrichtet Frau Zelawat?
```sql
MariaDB [uebungSchule]> select count(idSchueler) from lehrer_hat_schueler where idLehrer = 28;
+-------------------+
| count(idSchueler) |
+-------------------+
| 35 |
+-------------------+
1 row in set (0.001 sec)
```
12. Wie viele Schüler russischer Nationalität unterrichtet Frau Zelawat?
```sql
MariaDB [uebungSchule]> SELECT COUNT(*)
-> FROM schueler
-> JOIN lehrer_hat_schueler ls ON schueler.id = ls.idSchueler
-> JOIN lehrer ON ls.idLehrer = lehrer.id
-> WHERE lehrer.id = 28 AND schueler.nationalitaet = "RU";
+----------+
| COUNT(*) |
+----------+
| 16 |
+----------+
1 row in set (0.001 sec)
```
13. Welcher Lehrer verdient am meisten? (Achtung: Falle! Überprüfen Sie Ihr Ergebnis.)
```sql
MariaDB [uebungSchule]> select name, max(gehalt) from lehrer;
+---------+-------------+
| name | max(gehalt) |
+---------+-------------+
| Schmitt | 6581 |
+---------+-------------+
1 row in set (0.000 sec)
```

74
Tage/5/select-join.md Normal file
View File

@ -0,0 +1,74 @@
# 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%');
```