diff --git a/Tage/2-3/Solutions/Tag03 Auftrag SELECT.sql b/Tage/2-3/Solutions/Tag03 Auftrag SELECT.sql
new file mode 100644
index 0000000..aac62bf
--- /dev/null
+++ b/Tage/2-3/Solutions/Tag03 Auftrag SELECT.sql
@@ -0,0 +1,90 @@
+USE filmeDatenbank;
+
+#a. Lassen Sie sich mit SELECT alle Datensätze Ihrer DVD-Sammlung ausgeben.
+SELECT
+ *
+FROM dvd_sammlung;
+
+#b. Erstellen Sie eine Anweisung, die alle Filmtitel und die jeweils zugehörige Nummer ausgibt.
+SELECT
+ film
+ , nummer
+FROM dvd_sammlung;
+
+#c. Erstellen Sie eine Anweisung, die alle Filmtitel und den jeweils zugehörigen Regisseur ausgibt.
+SELECT
+ film
+ , regisseur
+FROM dvd_sammlung;
+#d. Erstellen Sie eine Liste mit allen Filmen von Quentin Tarantino.
+SELECT
+ *
+FROM dvd_sammlung
+WHERE regisseur = 'Quentin Tarantino';
+
+#e. Erstellen Sie eine Liste mit allen Filmen von Steven Spielberg.
+SELECT
+ *
+FROM dvd_sammlung
+WHERE regisseur = 'Steven Spielberg';
+
+#f. Erstellen Sie eine Liste aller Filme, in denen der Regisseur den Vornamen "Steven" hat.
+SELECT
+ *
+FROM dvd_sammlung
+WHERE regisseur LIKE 'Steven%';
+
+#g. Erstellen Sie eine Liste mit allen Filmen, die länger als 2 Stunden sind.
+SELECT
+ *
+FROM dvd_sammlung
+WHERE laenge_minuten > 120;
+
+#h. Erstellen Sie eine Liste mit allen Filmen, die von Tarantino oder von Spielberg gedreht wurden.
+SELECT
+ film, regisseur
+FROM dvd_sammlung
+WHERE regisseur = 'Steven Spielberg'
+OR regisseur = 'Quentin Tarantino';
+
+#i. Suchen Sie alle Filme heraus, die von Tarantino gedreht wurden und kürzer als 90 Minuten sind.
+SELECT
+ *
+FROM dvd_sammlung
+WHERE regisseur = 'Quentin Tarantino'
+AND laenge_minuten < 90;
+
+#j. Sie erinnern sich an einen Film, in dessen Titel "Sibirien" vorkam. Suchen Sie ihn.
+SELECT
+ *
+FROM dvd_sammlung
+WHERE film LIKE '%Sibirien%';
+
+#k. Lassen Sie sich alle Teile von "Das große Rennen" ausgeben.
+SELECT
+ *
+FROM dvd_sammlung
+WHERE film = 'Das große Rennen';
+
+#l. Lassen Sie sich eine Liste aller Filme ausgeben, sortiert nach Regisseur.
+SELECT
+ film
+ , regisseur
+FROM dvd_sammlung
+ORDER BY regisseur;
+
+#m. Lassen Sie sich eine Liste aller Filme ausgeben, sortiert nach Regisseur, dann nach Filmtitel.
+SELECT
+ film
+ , regisseur
+FROM dvd_sammlung
+ORDER BY regisseur, film;
+
+#n. Lassen Sie sich eine Liste aller Filme von Tarantino ausgeben, die längsten zuerst.
+SELECT
+ film
+ , laenge_minuten
+ , regisseur
+FROM dvd_sammlung
+WHERE regisseur = 'Quentin Tarantino'
+ORDER BY laenge_minuten DESC;
\ No newline at end of file
diff --git a/Tage/4/Solutions/Tag04 SELECT JOIN.sql b/Tage/4/Solutions/Tag04 SELECT JOIN.sql
new file mode 100644
index 0000000..e2a5cbc
--- /dev/null
+++ b/Tage/4/Solutions/Tag04 SELECT JOIN.sql
@@ -0,0 +1,73 @@
+
+SELECT * FROM kunden
+LEFT JOIN orte
+ ON ort_postleitzahl = postleitzahl;
+
+#a) Geben Sie Name, Postleitzahl und Wohnort aller Kunden aus. Die Liste enthält den Kundennamen und den Namen des Orts, wo er wohnt.
+SELECT
+ kunden.Name
+ , ort_Postleitzahl
+ , orte.name
+FROM kunden
+LEFT JOIN orte
+ ON kunden.ort_postleitzahl = orte.postleitzahl;
+
+#b) Geben Sie Name und Wohnort aller Kunden aus, die die Postleitzahl 79312 haben.
+
+SELECT
+ kunden.Name
+ , orte.name
+FROM kunden
+LEFT JOIN orte
+ ON kunden.ort_postleitzahl = orte.postleitzahl
+WHERE kunden.ort_postleitzahl = 79312;
+
+#c) Geben Sie Name und Wohnort aller Kunden aus, die in Emmendingen wohnen (Einschränkungskrite-rium ist NICHT die Postleitzahl, sondern 'Emmendingen').
+SELECT
+ kunden.Name
+ , orte.name
+FROM kunden k
+LEFT JOIN orte
+ ON kunden.ort_postleitzahl = orte.postleitzahl
+WHERE orte.name = 'Emmendingen';
+
+#d) Geben Sie Name, Wohnort und Einwohnerzahl für alle Kunden aus, die in einem Ort mit mehr als 70000 Einwohnern wohnen.
+SELECT
+ kunden.Name
+ , orte.name
+ , orte.Einwohnerzahl
+FROM kunden
+LEFT JOIN orte
+ON kunden.ort_postleitzahl = orte.postleitzahl
+WHERE orte.einwohnerzahl > 70000;
+
+#e) Geben Sie alle Orte aus, die weniger als 1000000 Einwohner haben.
+SELECT
+ name
+ , Einwohnerzahl
+FROM orte
+WHERE einwohnerzahl < 1000000;
+
+#f) Geben Sie Kundename und Ortname aus für alle Kunden, die in Orten mit einer Einwohnerzahl zwischen 100.000 und 1.500.000 leben.
+SELECT
+ kunden.Name
+ , orte.name
+ , orte.Einwohnerzahl
+FROM kunden
+LEFT JOIN orte
+ ON kunden.ort_postleitzahl = orte.postleitzahl
+WHERE orte.einwohnerzahl BETWEEN 100000 AND 1500000;
+
+#g) 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).
+
+SELECT
+ kunden.Name
+ , kunden.ort_postleitzahl
+ , orte.name
+FROM kunden
+LEFT JOIN orte
+ ON kunden.ort_postleitzahl = orte.postleitzahl
+WHERE kunden.name LIKE '%e%'
+AND (orte.name LIKE '%u%'OR orte.name like '%r%');
\ No newline at end of file
diff --git a/Tage/5/Solutions/Tag05 Aggregatsfunktionen.sql b/Tage/5/Solutions/Tag05 Aggregatsfunktionen.sql
new file mode 100644
index 0000000..aaf62a3
--- /dev/null
+++ b/Tage/5/Solutions/Tag05 Aggregatsfunktionen.sql
@@ -0,0 +1,82 @@
+#1.a
+SELECT MAX(gehalt), MIN(gehalt)
+FROM lehrer;
+
+#1.b
+SELECT
+ MAX(l.gehalt)
+FROM lehrer l
+INNER JOIN lehrer_hat_faecher lhf
+ ON lhf.idlehrer = l.id
+INNER JOIN faecher f
+ ON f.id = lhf.idfaecher
+WHERE f.fachbezeichnung = 'Mathe';
+
+#1.c
+SELECT MAX((s.noteMathe+s.noteDeutsch)/2)
+FROM schueler s;
+
+#1.d
+SELECT MIN(orte.einwohnerzahl) AS 'Niedrigste Einwohnerzahl', MAX(orte.einwohnerzahl) 'Höchste Einwohnerzahl'
+FROM orte;
+
+#1.e
+SELECT MAX(orte.einwohnerzahl) - MIN(orte.einwohnerzahl) AS 'Differenz'
+FROM orte;
+
+#1.f
+SELECT COUNT(*)
+FROM schueler;
+
+#1.g
+SELECT COUNT(*)
+FROM schueler
+WHERE idSmartphones is not null;
+
+#1.h
+SELECT COUNT(schueler.id)
+FROM schueler
+INNER JOIN smartphones phone
+ ON schueler.idsmartphones = phone.id
+WHERE phone.marke = 'Samsung'
+OR phone.marke = 'HTC';
+
+#1.i
+SELECT COUNT(schueler.id)
+FROM schueler
+INNER JOIN orte
+ ON schueler.idOrte = orte.id
+WHERE orte.name = 'Waldkirch';
+
+#1.j
+SELECT COUNT(schueler.id)
+FROM schueler
+INNER JOIN orte
+ ON schueler.idOrte = orte.id
+INNER JOIN lehrer_hat_schueler lhs
+ ON schueler.id = lhs.idSchueler
+INNER JOIN lehrer
+ ON lhs.idLehrer = lehrer.id
+WHERE orte.name = 'Emmendingen'
+AND lehrer.name = 'Bohnert';
+
+#1.k
+SELECT COUNT(schueler.id)
+FROM schueler
+INNER JOIN lehrer_hat_schueler lhs
+ ON schueler.id = lhs.idSchueler
+INNER JOIN lehrer
+ ON lhs.idLehrer = lehrer.id
+WHERE lehrer.name = 'Zelawat';
+
+#1.l
+SELECT COUNT(schueler.id)
+FROM schueler
+INNER JOIN lehrer_hat_schueler lhs
+ ON schueler.id = lhs.idSchueler
+INNER JOIN lehrer
+ ON lhs.idLehrer = lehrer.id
+WHERE lehrer.name = 'Zelawat'
+AND schueler.nationalitaet = 'RU';
+
+
diff --git a/Tage/5/Solutions/Tag05 SELECT ALIAS.sql b/Tage/5/Solutions/Tag05 SELECT ALIAS.sql
new file mode 100644
index 0000000..600ad1f
--- /dev/null
+++ b/Tage/5/Solutions/Tag05 SELECT ALIAS.sql
@@ -0,0 +1,37 @@
+-- 1. Ergänzen Sie folgende Statements und überprüfen Sie die Funktion:
+
+SELECT
+ kundenliste.kunde_id
+ , kundenliste.name
+ , kundenliste.ort_postleitzahl
+FROM kunden AS kundenliste
+WHERE kundenliste.ort_postleitzahl > 80000;
+-- -- ausgegeben werden sollen kunde_id, Name des Kunden und Postleitzahl des Kunden
+
+SELECT
+ o.name
+ , k.name
+FROM kunden AS k
+INNER JOIN orte AS ON o.postleitzahl = k.ort_postleitzahl
+WHERE o.name LIKE '%n'
+
+
+-- 2. Korrigieren Sie die folgenden Statements, dass sie funktionieren.
+-- -- Aliasse 'prfz' und 'hrgs' bitte nicht verändern!
+SELECT kunde_id
+ , hrgs.name
+ , prfz.name
+FROM kunde AS hrgs
+INNER JOIN ort AS prfz ON prfz.postleitzahl = hrgs.ort_postleitzahl
+ORDER BY hrgs.kunde_id
+
+-- -- Fügen Sie die notwendigen Aliasse ein!
+SELECT
+ k.name
+ , o.postleitzahl
+ , o.name
+FROM kunden AS k
+INNER JOIN orte AS o ON k.ort_postleitzahl = o.postleitzahl
+WHERE k.name LIKE '%a%'
+ AND o.name LIKE '%u%'
+
diff --git a/Tage/5/Solutions/Tag05 SELECT GROUP BY.sql b/Tage/5/Solutions/Tag05 SELECT GROUP BY.sql
new file mode 100644
index 0000000..4723698
--- /dev/null
+++ b/Tage/5/Solutions/Tag05 SELECT GROUP BY.sql
@@ -0,0 +1,57 @@
+#1.a
+SELECT
+ COUNT(schueler.id) AS 'Anzahl'
+ , schueler.nationalitaet
+FROM schueler
+GROUP by schueler.nationalitaet;
+
+#1.b
+select
+ orte.name AS 'Ort'
+ , COUNT(schueler.id) AS 'Anzahl der Schüler'
+FROM schueler
+INNER JOIN orte
+ ON schueler.idOrte = orte.id
+GROUP BY orte.name
+order by COUNT(schueler.id) DESC;
+
+#1.c
+SELECT
+ f.fachbezeichnung
+ , COUNT(l.id) AS 'Anzahl'
+FROM lehrer l
+INNER JOIN lehrer_hat_faecher lhf
+ ON lhf.idlehrer = l.id
+INNER JOIN faecher f
+ ON f.id = lhf.idfaecher
+GROUP BY f.fachbezeichnung
+ORDER BY COUNT(distinct l.id) DESC;
+
+#1.d
+SELECT
+ l.name AS Lehrername,
+ GROUP_CONCAT(f.fachbezeichnung) AS 'Fächer'
+FROM lehrer l
+INNER JOIN lehrer_hat_faecher lhf
+ ON lhf.idLehrer = l.id
+INNER JOIN faecher f
+ ON f.id = lhf.idFaecher
+GROUP BY l.id
+ORDER BY Lehrername;
+
+#1.e
+SELECT
+ s.name,
+ GROUP_CONCAT(DISTINCT l.name) `Lehrer`,
+ GROUP_CONCAT(DISTINCT f.fachbezeichnung) `Fächer`
+FROM lehrer l
+INNER JOIN lehrer_hat_faecher lhf
+ ON lhf.idLehrer = l.id
+INNER JOIN faecher f
+ ON f.id = lhf.idFaecher
+INNER JOIN lehrer_hat_schueler lhs
+ ON lhs.idLehrer = l.id
+INNER JOIN schueler s
+ ON s.id = lhs.idSchueler
+GROUP BY s.name
+ORDER BY s.name
\ No newline at end of file
diff --git a/Tage/5/Solutions/Tag05 SELECT HAVING.sql b/Tage/5/Solutions/Tag05 SELECT HAVING.sql
new file mode 100644
index 0000000..6f7c9c7
--- /dev/null
+++ b/Tage/5/Solutions/Tag05 SELECT HAVING.sql
@@ -0,0 +1,48 @@
+#1.a
+SELECT
+ s.name `Schülername`,
+ (s.noteDeutsch + s.noteMathe) / 2 AS Durchschnittsnote
+FROM schueler s
+HAVING Durchschnittsnote > 4;
+
+#1.b
+SELECT
+ s.name `Schülername`,
+ ROUND(((s.noteDeutsch + s.noteMathe) / 2), 1) AS Durchschnittsnote
+FROM schueler s
+HAVING Durchschnittsnote > 4
+ORDER BY Durchschnittsnote ASC;
+
+#2
+SELECT
+ l.name, (gehalt * 0.7) AS nettogehalt
+FROM lehrer l
+HAVING nettogehalt > 3000;
+
+#3
+SELECT
+ s.klassenzimmer, COUNT(s.id) AS `Anzahl`
+FROM schueler s
+GROUP BY klassenzimmer
+HAVING `Anzahl` < 15;
+
+#4.a
+SELECT
+ COUNT(s.id) AS `Anzahl`, o.name AS `Ort-Name`
+FROM schueler s
+INNER JOIN orte o
+ ON s.idOrte = o.id
+WHERE s.nationalitaet = 'RU'
+GROUP BY o.id
+ORDER BY `Ort-Name`
+
+#4.b
+SELECT
+ COUNT(s.id) AS `Anzahl`, o.name AS `Ort-Name`
+FROM schueler s
+INNER JOIN orte o
+ ON s.idOrte = o.id
+WHERE s.nationalitaet = 'RU'
+GROUP BY o.id
+HAVING `Anzahl` >= 10
+ORDER BY `Ort-Name`
\ No newline at end of file
diff --git a/Tage/5/datenintegritaet.md b/Tage/5/datenintegritaet.md
new file mode 100644
index 0000000..d8f7b03
--- /dev/null
+++ b/Tage/5/datenintegritaet.md
@@ -0,0 +1,22 @@
+# Referentielle Datenintegrität
+
+Zeit: 30 Min.
+Form: 2er Team
+
+Lesen Sie zuerst aus dem Skript [Skript_M164_Themenübersicht](../../02_Theorie_Unterlagen/Skript_M164_Themenuebersicht.pdf) das Kapitel 3 *Löschen in professionellen Datenbanken* aufmerksam durch.
+
+
+## Aufgabe 1
+1. Weshalb können in professionellen Datenbanken nicht einfach so Daten gelöscht werden?
+2. Wer stellt die referentielle Integrität sicher?
+
+## Aufgaben 2
+
+Verwenden Sie die Lösung von "Tourenplaner" und importieren Sie das Dump-File [tourenplaner_dump](../90_Dumps/tourenplaner_dump.sql)
+
+1. Als Datenbank-Entwickler stellen Sie fest, dass bei der Dateneingabe ein Fehler passiert ist. Anstatt «4000 Basel» sollte «3000 Bern» heissen. Versuchen Sie in der Tabelle «tbl_ort» die Ortschaft «Basel» zu löschen.
+Was stellen sie fest? Erklären Sie!
+2. Was müssten Sie tun, damit nun die richtige Ortschaft in der Datenbank eingetragen sowie die falsch eingegebene Ortschaft gelöscht werden kann?
+Setzen Sie Ihren Plan um.
+
+---
diff --git a/Tage/6/README.md b/Tage/6/README.md
new file mode 100644
index 0000000..ba9e1a8
--- /dev/null
+++ b/Tage/6/README.md
@@ -0,0 +1,6 @@
+# Tag 6
+
+## Inhaltsverzeichnis
+
+- [Datensicherung](datensicherung.md)
+- [Bulk Import](bulk-import.md)
\ No newline at end of file
diff --git a/Tage/6/bulk-import.md b/Tage/6/bulk-import.md
new file mode 100644
index 0000000..507a281
--- /dev/null
+++ b/Tage/6/bulk-import.md
@@ -0,0 +1,8 @@
+# Bulk Import
+
+## Inhaltsverzeichnis
+- [Bulk Import](#bulk-import)
+ - [Inhaltsverzeichnis](#inhaltsverzeichnis)
+ - [placeholder](#placeholder)
+
+## placeholder
\ No newline at end of file
diff --git a/Tage/6/datensicherung.md b/Tage/6/datensicherung.md
new file mode 100644
index 0000000..0a65f25
--- /dev/null
+++ b/Tage/6/datensicherung.md
@@ -0,0 +1,23 @@
+# Datensicherung
+## Inhaltsverzeichnis
+- [Datensicherung](#datensicherung)
+ - [Inhaltsverzeichnis](#inhaltsverzeichnis)
+ - [Backup/Dumping von Datenbanken](#backupdumping-von-datenbanken)
+ - [Sourcing von Dumps](#sourcing-von-dumps)
+
+## Backup/Dumping von Datenbanken
+Ein Datenbank-Dump kann leicht hergestellt werden mit folgendem Command:
+```bash
+$ mysqldump -u -p=
+```
+Dieser Command gibt aber nur das Script hinaus, es schreibt es nicht in eine Datei. Um dies zu erreichen leiten wir einfach den Output zu einer Datei weiter:
+```bash
+$ mysqldump -u -p= > /path/to/database_dump.sql
+```
+
+## Sourcing von Dumps
+Damit ein Backup oder ein selbstgeschriebenes Script eingespielt werden kann, verwenden wir folgenden Command in MySQL/MariaDB:
+```
+mysql> source /path/to/database_dump.sql
+```
+Dieser Command führt den angegebenen Script in MySQL aus.
\ No newline at end of file